Memememe # selfie

7 Schritt:Schritt 1: Android + OpenCV Schritt 2: Haar Cascades - ein Intro Schritt 3: Haar Cascades - Sammeln Sie die Negativ Schritt 4: Haar Cascades - Zusammenstellen der Positiv Schritt 5: Haar Cascades - Training der Cascade Schritt 6: Haar Cascades - Testing Schritt 7: memememe # selfie

Memememe # selfie

ohne Gespräch, gibt es keine Selbst und-andere

- Paul Pangaro
Wenn Gespräche und Identität gemeinsam auftreten, wie von Gordon Pask vorgeschlagene Conversation Theory , was sind die Konsequenzen (oder Beschränkungen) der Kommunikation ohne eine andere? Können wir unsere Identität und unsere Umwelt während im Gespräch mit uns genauso einfach zu konstruieren? Was ist der Ton von einem einseitigen Gespräch?
memememe # selfie ist eine Skulptur, die einige dieser Fragen untersucht, im Rahmen unserer heutigen Beschäftigung mit Trending, Sympathie, folgende, etc. Es könnte die erste Instanz des künstlichen Unver sein.
Es ist auch der erste Schritt eines längeren Projekt wird in Zusammenarbeit mit Radamés Ajna entwickelt, genannt memememe , über physikalische Kommunikationsprotokolle und Maschinenkörper language.Step 1: Android + OpenCV



Memememe # selfie

Memememe # selfie

Erste Schritt, um Telefone, sich selbst zu erkennen, ist es, OpenCV auf sie zu installieren.
Gute Neuigkeiten!!! Die OpenCV Menschen haben ein Framework, das Schreiben vereinfacht, Kompilieren und Ausführen OpenCV 2.4 Apps für Android-Geräte. Sie müssen nicht mehr auf OpenCV Source und (Cross-) kompilieren Sie es, wie es ist 2010 herunterladen .
Stattdessen ist es das, was wir getan haben:
1. Installierte Android SDK, NDK und Eclipse-Umgebungen und Plug-Ins. Es gibt viele Schritte hier, aber auch viele Ressourcen online. Die offizielle Android SDK Installationsanleitung , die Android NDK Installationsanleitung und die OpenCV Intro zu Android Setup-Anleitung .
Ich wollte versuchen, die neue Android Studio IDE , aber es hat NDK Entwicklung unterstützen zu der Zeit, entschlossen, mit Eclipse-Stick, und nutzten die Handumgebungskonfiguration Abschnitt der OpenCV Führung .
2. Installiert OpenCV SDK Heruntergeladene die OpenCV-Bibliothek für Android und Beispiele von Sourceforge , und folgte den Anweisungen dieses OpenCV Setup-Anleitung .
3. Installierte OpenCV-Manager App aus dem Play Store Die OpenCV-Manager ist eine Anwendung, die für OpenCV dynamischen Bibliotheken bereits auf einem Handy installiert prüfen wird, und laden Sie neue Bibliotheken, wenn nötig. Mehr Infos gibt es bei dieser OpenCV Seite .
4. RTFM (oder in diesem Fall, eine kurze Anleitung). Dies ist ein ziemlich gutes Tutorial für immer ein Projekt gestartet: Es wird gezeigt, wie OpenCV initialisieren und erhalten Rahmen von der Kamera.
Danach wird die Gesichtserkennung Beispiel testeten wir auf einige Standbilder und auf uns selbst.
Leistungs-Verhältnis! Selbst in der Dunkelheit! ! Auf einem alten Telefon mit Android 2.3.4 Schritt 2: Haar Cascades - ein Intro

Memememe # selfie

Ob gut oder schlecht, können die meisten Handys und Digitalkameras heute menschliche Gesichter erkennen und, wie im vorherigen Schritt gesehen, es braucht nicht zu viel Aufwand, um einfache Gesichtserkennungscode zu erhalten auf einem Android-Handy läuft (oder jede andere Plattform ), mit OpenCV .
Das ist alles dank der Viola-Jones Algorithmus zur Gesichtserkennung, mit Haar-basierte Klassifizierer-Kaskade. Es gibt jede Menge Informationen zu diesem Online, aber eine sehr schöne Erklärung auf der OpenCV-Website finden .
Es ist im Grunde eine Maschine Lernalgorithmus, der eine Reihe von Bildern von Gesichtern und Nicht-Gesichter, einen Klassifikator, die später verwendet werden, um Gesichter in Echtzeit zu erfassen trainieren verwendet.
Die in OpenCV implementierte Algorithmus kann auch verwendet werden, um andere Dinge zu erkennen, solange Sie die richtigen Klassifizierer haben werden. Meine OpenCV Verteilung kam mit Klassifizierer für Augen, Oberkörper, Hände, Stirnseite und Profil Gesicht. Auf der Suche nach Informationen, wie Sie sie zu trainieren, fand ich Klassifizierer für Bananen , Stifte und iPhones .
Eigentlich ist das letzte Glied für mehr als nur iPhones. In seinem Spiegel-Test -Projekt, Jeff Thompson tatsächlich Trainingscomputer, sich in einem "nicht-utilitaristischen, fehlerhafte poetische / technologische act" zu erkennen.
Ähnlich dem, was wir wollen, aber da wir eine sehr spezielle Telefon zu erkennen, haben wir beschlossen, unsere eigenen Klassifikator zu trainieren.
Die OpenCV Tutorial für Schulungs Cascade Sichter ist ein ziemlich guter Anfang. Es erklärt die 2 binäre Versorgungsunternehmen in den Prozess (opencv_createsamples und opencv_traincascade) verwendet werden, und alle ihre Befehlszeile Argumente und Optionen, aber es nicht wirklich geben ein Beispiel für einen Ablauf zu folgen und auch nicht alle Anwendungsmöglichkeiten über die für das die opencv_createsamples Dienstprogramm.
Auf der anderen Seite, Naotoshi Seo Tutorial ist eigentlich ganz gründliche und erklärt die 4 verschiedene Verwendungen für die opencv_createsamples Dienstprogramm. Thorsten Kugel schrieb ein Tutorial mit Naotoshi Seo die Skripte, um einen Klassifikator, um Bananen zu erkennen zu trainieren, aber es laufen einige Perl-Skripte und Zusammenstellung einige erfordert C ++ ... zu viel Arbeit ...
Jeff hat auch einige schöne Notizen darüber, wie er bereitete seine Daten, und ein Skript für automatisch eine Reihe von Optionen für die 2-Dienstprogramme laufen.
Die Art, wie wir es getan haben wurde von all diesen Übungen inspiriert, mit einigen geringfügigen Änderungen und optimizations.Step 3: Haar Cascades - Sammeln Sie die Negativ


Dies ist, wo wir sammeln etwa 1000 Bilder von Nicht-Telefone. Einige Leute benutzen Videos zu diesem ... folgten wir Jeff und nahm sie von diesem Repository , mit diesem Befehl:
cd negativeImageDirectory
wget -nd -r -A "neg0*.jpg" http://tutorial-haartraining.googlecode.com/svn/trunk/data/negatives/
Erstellen einer Sammlung für diese Datei ist recht einfach mit dem folgenden Befehl:
cd negativeImageDirectory
ls -l1 *.jpg > negatives.txt Schritt 4: Haar Cascades - Zusammenstellen der Positiv

Memememe # selfie

Memememe # selfie

Memememe # selfie

Memememe # selfie

Dies ist, wo wir sammeln etwa 1000 Bilder unserer Telefon. Einige Leute benutzen video, einige Leute ... wir Skripte Skripte verwendet.
1. Bilder
Dies ist, wo wir Fotos unserer Telefon. Wir brauchen nicht 1000 von ihnen. Irgendwo zwischen 15 und 20 sollte ausreichen. Dies ist, was unsere Bilder sah aus wie:
Da unsere Aufgabe ist ziemlich schwarz, verwendeten wir einen weißen Hintergrund und nahm kontrastreiche Bilder, damit der nächste Schritt einfacher. Auch haben die Bilder nicht groß sein, weil OpenCV wird sie trotzdem schrumpfen: unsere waren 1024 × 773.


2. Prozess
Dies ist, wo wir eine Verarbeitung Skript , um die Bilder zu lesen und markieren, wo sich das Objekt. Da wir verwendet kontrast und einen weißen Hintergrund, es ist ziemlich einfach, eine erste Schätzung von nur die Verfolgung der Min / Max-x- und y-Positionen der dunklen Pixel zu erhalten. Was hier wichtig ist, um sicherzustellen, dass das Seitenverhältnis der alle markierten Objekte ist derselbe. In unserem Fall war das 1: 1, und das Skript stellt sicher, dass alle markierten Bilder folgen, dass:
Neben das Bild zuzuschneiden, spuckt der Verarbeitung Skript auch eine Textdatei, die Informationen darüber, wo sich das Objekt auf dem Originalbild. Dies ist, was Naotoshi eine Beschreibung Dateiformat aufrufen.


3.Make 100s
Dies ist, wo wir von Naotoshi wagen ... Zuerst starten wir den folgenden Befehl für jeden unserer beschnittene Bilder:
opencv_createsamples -img cropped00.jpg \
-bg negativeImageDirectory/negatives.txt \
-info sampleImageDirectory/cropped00.txt \
-num 128 -maxxangle 0.0 -maxyangle 0.0 -maxzangle 0.3 \
-bgcolor 255 -bgthresh 8 -w 48 -h 48
Wo cropped00.jpg ist eine der beschnittenen Bilder von der Verarbeitung Skript ist negatives.txt die Sammlungsdatei für die negativen Bilder, ist cropped00.txt wo die opencv_createsamples Dienstprogramm wird sein Ausgangsbeschreibungsdatei zu schreiben.
Dies wird erzeugt, indem 128 Bildern eine leicht gedreht und etwas heller / dunkler Version cropped00.jpg auf einem zufällig ausgewählten negativen Bild. Und weil wir verwendet einen weißen Hintergrund, als wir unsere Bilder mit Angabe 255 die -bgcolor macht das Weiß auf dem zugeschnittenen Bild transparent, so dass wir 128 Bilder wie diese:
Das Ausführen dieses Befehls erzeugt auch eine Beschreibungsdatei mit Informationen über, wo das Handy ist in jedem der 128 Bilder.


4. Stellen Sie 1000
Wenn wir 15 Bilder, Laufen Sie den vorherigen Schritt für jeden von ihnen würde 1920 Bilder von Handys schwebend in zufälligen Stellen produziert haben. Was wir jetzt tun müssen, ist zu sammeln alle von ihnen in einem einzigen .vec Datei, bevor wir die Ausbildung Dienstprogramm auszuführen.
Zunächst sammeln wir alle 15 Beschreibungsdateien in ein, indem Sie diesen Befehl:
cd sampleImageDirectory
cat cropped*.txt > positives.txt
Dann können wir sie alle in einem einzigen .vec Datei mit diesem Befehl zu kombinieren:
opencv_createsamples -info sampleImageDirectory/positives.txt \
-bg negativeImageDirectory/negatives.txt \
-vec cropped.vec \
-num 1920 -w 48 -h 48
Dies wird 1920 zu erstellen beschnittene Bilder des Mobiltelefons, wo jeder wird etwas anders gedreht und mit einem anderen background.Step 5: Haar Cascades - Training der Cascade

Memememe # selfie

Dies ist, wo wir trainieren Haar Kaskadensichter mit einem anderen OpenCV-Dienstprogramm. Mit etwa 1000 negative Bilder und 2000 positive Bilder Bewaffnet wir diesen Befehl, um mit dem Training beginnen ausführen:
opencv_traincascade -data outputDirectory -vec cropped.vec \
-bg negativeImageDirectory/negatives.txt \
-numPos 1000 -numNeg 600 -numStages 20 \
-precalcValBufSize 1024 -precalcIdxBufSize 1024 \
-featureType HAAR \
-minHitRate 0.995 -maxFalseAlarmRate 0.5 \
-w 48 -h 48</p>
Die meisten von ihnen sind die Standardwerte, ist eine bemerkenswerte Ausnahme der Anstieg der Speichernutzung von 512 MB bis 2 GB. Auch eine andere Sache zu beachten, -numPos und -numNeg sollte weniger als die Gesamtzahl der Bilder tatsächlich zur Verfügung stehen und in der Beschreibung / Sammlung Dateien beschrieben. Wir fanden dies durch Versuch und Irrtum, aber es scheint wie die opencv_traincascade Dienstprogramm erhöht langsam die Anzahl der "verbraucht" Bilder, wie es durch die Ausbildung Stufen geht, um die -minHitRate und -maxFalseAlarmRate zu treffen, und wenn es nicht genug Bilder zu konsumieren, es stürzt ab. Zum Beispiel haben wir festgelegt -numPos 1000 für unsere läuft, aber von Stufe 10, es wurde "aufwendig" 1030 Bilder.
Wenn alles gut geht, sollte ein cascade.xml Datei zeigen sich in der ausgabe nach ein paar Stunden (oder Tage).
Wir schrieben ein Skript, das Beste aus dieser Prozess automatisiert .
Mit diesen Einstellungen hat es unser Training etwa 24 Stunden in Anspruch nehmen. Während des Wartens auf die 20 Stufen bis zum Ende, kann die gleiche opencv_traincascade Befehl parallel ausgeführt werden, um eine Teilkaskade Datei aus den Stufen, die bereits abgeschlossen sind erstellen. Beispielsweise liefert der folgende Aufruf einer Kaskade aus den ersten 10 Stufen des Klassifizierer im Ausgabeverzeichnis zu generieren:
opencv_traincascade -data outputDirectory -vec cropped.vec \
-bg negativeImageDirectory/negatives.txt \
-numPos 1000 -numNeg 600 -numStages 10 \
-precalcValBufSize 1024 -precalcIdxBufSize 1024 \
-featureType HAAR \
-minHitRate 0.995 -maxFalseAlarmRate 0.5 \
-w 48 -h 48</p>
Es ist im Grunde der gleiche Befehl, aber mit -numStages zu 10.Step 6: Haar Cascades - Testing

Memememe # selfie

Memememe # selfie

Einige erste Tests wurden an einem Laptop-Computer getan, unter Verwendung ofxCv in openframeworks .
Dann wurden einige weitere Tests mit gemacht ein Android-Handy .
Hurra !!! Er erkennt sich selbst und seine Freunde !!! Schritt 7: memememe # selfie


Memememe # selfie

Memememe # selfie

Memememe # selfie

Alle 6 Artikel anzeigen

Jetzt das einzige, was fehlt, ist eine gewisse Logik, zwischen Erkennen eines Telefons (jedes Telefon), oder zum Nachweis von sich zu differenzieren. Wir taten dies, indem Sie einfach ein paar Sachen zu blinken auf dem Bildschirm, und zu versuchen, den Schein im Kamerabild zu erkennen.
Wenn das Telefon erkennt selbst, dauert es eine selfie und trägt ihn ein, seine tumblr.
Der Code dafür ist auf GitHub .
Die tumblr hier .
Mehr Infos über das Projekt .
Und einige relevante Blog -Beiträge , und eine Liste von Ressourcen .