====== Baur Dienst für Personen/Hintergrund ====== Welche Dienste laufen wo? Das System kann unter ''%%http://api.picalike.com/enrichment/baur_enrichment.php?url=%%'' getestet werden. ===== testgurke.v4 ===== Nutzer: baur * image_cloud auf TCP/8196 * cpu_extractor auf TCP/4242 für Person <- AlexNetConv * baur_enrichment auf TCP/3142 als Entrypoint für das PHP-Skript http://host:3142/baur_enrichment?key=...&url=... * feature_db auf TCP/3128 ===== tegra01 ===== Nutzer: picalike * gpu_extractor auf TCP/4242 für AlexNet/conv -> Person ====== Dienst: Personendetektion ====== Aufbau und Übersicht. Der grobe Ablauf sieht wie folgt aus: Mittels einer High-Level-API 'iterware.py' wird eine Liste von URLs übermittelt und für jede URL eine Klassifikation bzgl. Person ja/nein ausgegeben: url, y_hat = obj.get_features(net_spec, [meine_url]) url = 'http://wackeldingdong.de/bild.jpg' y_hat = [-3.1] Zu beachten ist, dass y_hat //immer// eine Liste ist, die bei einer SVM, eine Klasse und Trennung über +1/-1, in ein float konvertiert werden muss. Der Dienst besteht aus drei Komponenten:
    * Feature-DB zum persistenten Speichern aller Features * GPU-Extractor für die Conv-Features (hängt vom Bild ab) * CPU-Extractor für das Personen-Modell (hängt vom GPU-Extractor ab)
Wo die Dienste laufen, ist oben beschrieben. Wie werden die Dienste gestartet? v4 testgurke in $HOME/bin: $ nohup ./featdb_http -p 3128 ../var/data/db/ &> ~/var/log/feat_db.log & $ nohup ./cpu_extractor ../etc/person_model.conf &> ~/var/log/cpu_extractor.log & v4 gpu01 in $HOME/bin: $ nohup ./gpu_extractor ../models/alexnet/config &> ~/var/log/gpu_feat.log & Wie werden die Dienste konfiguriert? * featdb_http: benötigt nur ein Verzeichnis, wo die Daten gespeichert werden * cpu_extractor: Konfiguration für das trainierte Modell. Das Modell liegt in $HOME/var/models/person_model * gpu_extractor: Konfiguration für das trainierte Modell (AlexNet). Das Modell liegt in $HOME/var/models/alexnet/alex_net_full Wie sieht die High-Level-API aus? Im v4 git 'featuredb' liegt unter tests ein Beispiel 'test_distributed.py'. Selbsterklärend, allerdings wird intern ein Thread pro Extractor verwendet. Das Modul verlangt eine Konfiguration, die auf testgurke.v4/etc/person.conf liegt. Die Datei sieht wie folgt aus: {"person.output.1": { "deps": ["alexnet.conv5.1", "person.output.1"], "text": "Person Detector" }, "hosts": { "person.output.1": "http://testgurke.v4.picalike.corpex-kunden.de:4242", "alexnet.conv5.1": "http://tegra01.picalike.corpex-kunden.de:4242" }} Aufbau ist wie folgt: pro Dienst 'person.output.1' werden mögliche Abhängigkeiten 'deps' definiert und ein Text, damit man(n) weiß, was der Dienst macht. Dann folgt eine Auflistung aller verwendeten Extraktoren, die für die Auflösung Dienst→Host notwendig ist. Die Abhängigkeiten werden rückwärts definiert und enden mit dem Dienst selbst. (Alles noch im Fluss, aber so läuft es momentan!) ====== Dienst: UWSGI Baur Enrichment ====== Start: nohup /home/baur/.local/bin/uwsgi --ini /home/baur/etc/baur_uwsgi.ini &> /dev/null & Stop: echo "q" > /tmp/baur_enrichment.ctrl