====== Planung V3 ======
* Experimente / Evaluierung einzelner Feature; Wissen sammeln; Alg. bewerten
* Erzeugen des Kernsystems
* Aufstellen der Benchmarks und Testsets
* Einbau der Alg. für Segmentierung, Farbe, Form und Textur
* Test und QM, Anpassungen → (Alpha, Beta, RC, Live)
* Bier öffnen
Ziele:
* Geschwindigkeit und Stabilität
* Skalierbarkeit
Zur Geschwindigkeit:
* Bildanalysezeit: 0.2 Sek / Bild
* Datafeedanalysezeit: 1.000.000 Bilder = Ups (5 Stunden), So lala (3 Stunden), Geil (1 Stunde)
* Queryzeit: unter 0.2 Sek / Anfrage
* Hölle schnell {{/dokuwiki/lib/images/smileys/icon_smile.gif|:-)}} (Zeitansatz ca. 70k Bilder inkl. Download in < 1h (ca. 20 Img/sec), bei Ausnutzen der aktuell möglichen Parallelisierung) (1M Img/h bei bestehendem System (24 cores) sind das ca. 80ms/Img)
C++-Bibliotheken evaluieren:
* JSON-Bibliotheken: http://www.json.org/
* Cpp-Netlib: https://github.com/cpp-netlib/cpp-netlib/downloads
===== Pakete für Alg. Bewertung / Implementierung =====
Pre-Processing:
* Bildkorrektur für Mobile
* SLIC - Superpixel
* Felzenszwalb
* Split and Merge
* Saliency Map
* Geodesic Image Processing
Feature: (Farbe/Form/Textur/Schlagwort)
* Wavelets
* Dimensionsreduktion (nicht) linear
* Houghlines 2.0
* Gist
* Textur-Classifier
* Moments verschiedene Varianten
* Simpler Kategorisierer
* Tamura + machine learning
* Radon Transform (in pHash-lib schon implementiert)
Download:
* CSV-Dateien komprimiert runterladen. D.h., mittels des Apache anfordern falls WWW. (wget -O - –header=“Accept-Encoding: gzip”)
Machine Learning:
* Kohonen-Netze mit paraller Verarbeitung, inkl. Indizierung (schneller suchen) (MT)
* genetische Optimierung von Parametern
* Stichwort Ausreißer: Outlier Detection (SVM)
===== Aufgaben beim Systemdesign =====
* Optimierung der DB-Verbindungen
* System-Design
* Workflows definieren
* FMEA
* Definition von stabilen Interfaces
* Randbedingungen definieren
* Unit-Tests
* Nagios-Checks für Dienste
* Optimierung Verarbeitung CSV-Dateien
* Optimierung Crawler-Komponente
* Definition Prozesse für Versionskontrolle / Deployment(Releases)
* Kapslung in einer Bibliothek
* Update Überwachung für kritische Komponenten
* available-Feld vom Kunden parsen und in eine einheitliche Darstellung für unser System (0/1) überführen (Notwendig für VisualMail)
* für jede collection in der mongodb beschreiben welche indizes gesetzt sein müssen
* …
===== Monitoring (Nagios) =====
* mongodb und monetdb auf Funktion prüfen
* feed_updates prüfen, ob updates länger als xh laufen, dann Meldung
* Anzahl Aufgabenpakete in der Query, wenn länger als x, dann Meldung
* Status-Seite zu Kunden
* …
===== Memory =====
* Helmholtz Feature http://www.optinav.com/helmholtz.pdf
* Glanz-Erkennung
* Muster / Markenlogo besser erkennen
* Segmentierung / Produktfreisteller (Region-Growing als Alternative für GrabCut, LaticeCut, LevelSetMethoden prüfen) (s.a. [[segmentierung|Segmentierung]])
* Exact Legendre Moments http://arxiv.org/pdf/1005.5437v1.pdf
* Scale-invariance in local heat kernel descriptors without scale selection and normalization http://hal.archives-ouvertes.fr/docs/00/44/26/19/PDF/RR-7161.pdf
* Erkennung vom Geschlecht
* Thema von DamenOberBekleidung/Krinstina/Otto: Trends (metallic, Tiermuster)
* Erlaubter Zeichensatz in den feed-Dateien (positiv Liste) alles auf das [^a-zA-Z_0-9\\s\\-+*=!?$#&@:.;|,ۤ/&()~%] zutrifft wird durch _ ersetzt
===== Lessons learned aus der v2 =====
* Wenn der feed vom Kunden kommt und er soll utf8 sein, gehe davon aus das er es nicht ist.
* Wenn du einen String in die db schreibst stelle sicher das er utf8 ist, wenn das nicht notwendig ist, da er schon utf8 ist → lese diesen Eintrag von vorn.
* Die Liste mit erlaubten Zeichen in Strings hat sich bewährt.
* Gesichtserkennung kostet relativ viel Rechenzeit, eine Hauterkennung wäre zielführender wenn sie schnell ist.
* Die Datenbanken skalieren allgemein nicht linear.
* Replikation von Konfigurationen, keine Einzelanpassung.
* Klare Definition von Schnittstellen, keinen bypass.
* Reproduzierbare Testsets erstellen.
* Von Beginn an Definieren was ins Monitoring soll.
* Für alle Schnittstellen Rbd. festlegen und im Wiki dokumentieren.
* Querys verwenden um Schreibprozesse auf dbs serialisieren zu können und die Server besser auszulasten.
* Die inserts (bei updates) für die mongodb optimieren um möglichst wenig last zu erzeugen.
* …