Table of Contents

Baur Dienst für Personen/Hintergrund

Welche Dienste laufen wo?

Das System kann unter http://api.picalike.com/enrichment/baur_enrichment.php?url=<quoted_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:

<HTML><ol></HTML>

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?

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