====== 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. * …