• IT-Karriere:
  • Services:

OpenCV übernimmt die Gesichtserkennung

Dass die Gesichtserkennung in einem eigenen Thread läuft, hat einen einfachen Grund: Sie ist rechenzeitintensiv, die angelieferten Bilder der Kamera werden gepuffert. Liefe das Holen des Bildes und dessen Auswertung im gleichen Thread, würden wir beim nächsten Schleifendurchgang ein Bild unbekannten Alters aus dem Puffer erhalten. Mit capture.grab() leeren wir stets den Puffer und sorgen dafür, dass im Thread mit capture.retrieve() immer nur das aktuelle Bild ausgewertet wird:

Stellenmarkt
  1. Schüco International KG, Bielefeld
  2. ARTE Deutschland TV GmbH, Baden-Baden

  1. void *faceThread(void *arg)
  2. {
  3. Mat img;
  4. while(1) {
  5. if(capture.retrieve(img)) {
  6. checkFace(img);
  7. }
  8. }
  9. }

Die eigentliche Erkennung läuft in der Funktion checkFace(). Diese Funktion sah ursprünglich so aus:

  1. void checkFace(Mat img) {
  2.  
  3. ...
  4. cvtColor(img, gray, CV_BGR2GRAY);
  5. equalizeHist( gray, gray);
  6.  
  7. face_cascade.detectMultiScale(small, faces,
  8. 1.1, 2, CV_HAAR_SCALE_IMAGE);
  9.  
  10. if(faces.size() > 0) {
  11.  
  12. int p = faces[0].x + (faces[0].width/2);
  13. int pd = map_pixel_to_deg(p);
  14. servo(180 - pd);
  15. }
  16.  
  17. }

Das Kamerabild wird in ein Graustufenbild umgewandelt, die Farbverteilung im Bild normalisiert und schließlich auf Gesichter geprüft. Die detectMultiScale()-Methode liefert für jedes gefundene Gesicht ein Rect-Objekt zurück. Es enthält die xy-Koordination eines Rechtecks sowie dessen Höhe und Breite. Jedes Rechteck beschreibt also, wo im Bild ein Gesicht gefunden wurde. Wir ermitteln auf Basis dieser Daten dann die x-Koordinate der Mitte des Rechtecks. Sie wird in eine Grad-Angabe (0 - 180 Grad) umgerechnet und der Funktion servo() zur Ansteuerung des Servos übergeben.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Programmieren in C++ und mit MRAADer Edison beeindruckt 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12.  


Anzeige
Spiele-Angebote
  1. 0,45€
  2. 3,43€
  3. 15,49€

derdiedas 21. Nov 2014

Na ja - das Edison/Arduino Gespann ist nun so viel kleiner nicht. Das reine Edison Modul...

_speedy_ 21. Nov 2014

und vom USB-Stick? Von SD wäre natürlich genial und vielleicht besser Intel hier ja noch...

Zwangsangemeldet 20. Nov 2014

Irgendwie ist die Betonung des Sprechers im Video ... hmm, naja, seltsam. *Sehr* seltsam...


Folgen Sie uns
       


iPad 8 und iPad OS 14 im Test: Kritzeln auf dem iPad
iPad 8 und iPad OS 14 im Test
Kritzeln auf dem iPad

Das neue iPad 8 ist ein eher unauffälliger Refresh seines Vorgängers, bleibt aber eines der lohnenswertesten Tablets. Mit iPad OS 14 bekommt zudem der Apple Pencil spannende neue Funktionen.
Ein Test von Tobias Költzsch

  1. iPad-Betriebssystem iPadOS 14 macht Platz am Rand
  2. Zehntes Jubiläum Auch Microsoft hat das erste iPad überrascht

Amazon: Der Echo wird kugelig
Amazon
Der Echo wird kugelig

Zäsur bei Amazon: Alle neuen Echo-Lautsprecher haben ein komplett neues Design erhalten.

  1. Echo Auto im Test Tolle Sprachsteuerung und neue Alexa-Funktionen
  2. Echo Auto Amazon bringt Alexa für 60 Euro ins Auto

Geforce RTX 3090 ausverkauft: Einmal Frust für 1.500 Euro, bitte!
Geforce RTX 3090 ausverkauft
Einmal Frust für 1.500 Euro, bitte!

Erst Vorfreude, dann Ernüchterung und Wut: Der Kauf der Geforce-RTX-3090-Grafikkarte wird zu einer Reise ohne Ziel, dafür mit Emotionen.
Ein IMHO von Oliver Nickel

  1. Ampere-Grafikkarten Kondensatoren sind der Grund für instabile Geforce RTX 3080

    •  /