Viola-Jones-Methode
Die Viola-Jones-Methode ist ein mathematisches Verfahren zur Mustererkennung in digitalen Bildern. Es wurde 2001 von Paul Viola und Michael Jones in einem Paper[1] vorgeschlagen und erlangte weltweite Popularität wegen seiner Effizienz. Die Viola-Jones-Methode erkennt in Echtzeit markante Objekte wie Gesichter in einem Bild.
Hintergrund
Anfang der 2000er Jahre kamen digitale Foto- und Videokameras in Mode und verdrängten langsam die analogen Kameras. Die zunehmende digitale Bilderflut erzeugte eine Nachfrage nach der mit analogen Medien nur umständlich möglichen technischen Gesichtererkennung. Dafür gab es zwei Schlüsselanwendungen:
- Gesichtererkennung, um die Schärfe automatisch einzustellen;
- Datenanalyse, um bestimmte Gesichter in Datenbanken anderen Daten zuordnen zu können.
Paul Viola und Michael Jones haben ihre Methode mit der freien Programmbibliothek OpenCV entwickelt, die Algorithmen für die Bildverarbeitung und Computer Vision bereitstellt. Ihre Methode findet sich in OpenCV unter CascadeClassifier::detectMultiScale()
. Das zuvor gängigste (und in Teilen auch bei Viola-Jones genutzte) Verfahren sind die 1909 von Alfréd Haar entwickelten Haar-Wavelets.
Viola-Jones besteht nicht aus einem klassischen Algorithmus, sondern basiert auf kontrolliertem Lernen, so genanntem maschinellem Lernen: Das Programm sieht sich mehrere Bilder an und trainiert sich selbst, um Ähnlichkeiten herauszufinden.[2][3] Die Lernkaskaden folgen dem Meta-Algorithmus AdaBoost von 2003.
Die Vorteile der Methode gegenüber anderen Verfahren besteht vor allem in der Schnelligkeit und Robustheit; nicht nur Gesichter lassen sich sehr effizient erkennen. Auch die Bildgröße spielt kaum eine Rolle; das Verfahren skaliert nicht das ganze Bild, sondern nur den relevanten Inhalt. Der größte Nachteil besteht darin, dass die Gesichter frontal zu sehen und gut beleuchtet sein müssen. Zum Auswerten von Halbprofilen wird Viola-Jones meist mit dem Kanade-Lucas-Tomasi Feature Tracker gekoppelt.
Programmbeispiel in Python
Das folgende kurze Programmbeispiel[4] in der Programmiersprache Python erfordert die Installation von opencv-python. Dieser Programmcode und die zwei benötigten Dateien müssen im selben Verzeichnis liegen. Das Beispielprogramm erkennt im Bild Gesichter und kennzeichnet diese mit bunten Rahmen. Die durch Training erzeugte Datei "haarcascade_frontalface_default.xml" stammt aus dem Quellcode von OpenCV[5], das zu untersuchende Bild "Jimmy_answering_questions.jpg" liegt auf Commons[6].
import cv2 # pip install opencv-python
# Erzeugen der haar cascade
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# Bild einlesen
image = cv2.imread("800px-Jimmy_answering_questions.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Gesichter im Bild erkennen
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30)
)
print("Anzahl gefundener Gesichter: {0} ".format(len(faces)))
# ein Rechteck um jedes gefundene Gesicht zeichnen
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow("gefundene Gesichter", image)
cv2.waitKey(0)
Durch Benutzung anderer Haar-Cascades-Dateien lassen sich in Bildern und Filmen andere Objekte finden. Ein Anwendungsfall ist das Erkennen von fahrenden Automobilen.[7] Funktionsfähige Programmbeispiele sind auf GitHub verfügbar.[8]
Einzelnachweise
- Rapid object detection using a boosted cascade of simple features und Viola, Jones: Robust Real-time Object Detection, IJCV 2001
- Thorsten Ball: Train Your Own OpenCV Haar Classifier. In: Coding Robin. 22. Juli 2013, abgerufen am 2. November 2018 (englisch).
- Naotoshi Seo: Tutorial: OpenCV haartraining (Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features) - Naotoshi Seo. 16. Oktober 2008, abgerufen am 2. November 2018 (englisch).
- Shantnu Tiwari: Face Recognition with Python, in Under 25 Lines of Code. Hrsg.: Real Python. (englisch, realpython.com [abgerufen am 4. November 2018]).
- Rainer Lienhart: OpenCV data/haarcascades/. In: GitHub, OpenCV. Intel, abgerufen am 4. November 2018 (englisch).
- Wikimania2009 Beatrice Murch: English: Jimmy Wales answering questions at Wikimania 2009 press conference. 25. August 2009, abgerufen am 4. November 2018.
- Tobias Weis: Training Cascades to detect cars. Abgerufen am 4. November 2018 (englisch).
- Andrews Cordolino Sobral, Ph.D.: Vehicle Detection with Haar Cascades. Abgerufen am 4. November 2018 (englisch).