Gesichtserkennung mit Python und OpenCV mit Webcam
OpenCV ist eine Bibliothek, mit der Bildverarbeitungen mit Programmiersprachen wie Python durchgeführt werden. In diesem Projekt wird OpenCV Library verwendet, um eine Echtzeit-Gesichtserkennung mit Ihrer Webcam als Hauptkamera durchzuführen.
Es folgen die Voraussetzungen dafür: -
- Python 2.7
- OpenCV
- Numpy
- Haar Cascade Frontal Gesichtsklassifikatoren
Ansatz / verwendete Algorithmen:
- Dieses Projekt verwendet den LBPH-Algorithmus (Local Binary Patterns Histograms), um Gesichter zu erkennen. Es beschriftet die Pixel eines Bildes durch Schwellenwertbildung der Nachbarschaft jedes Pixels und betrachtet das Ergebnis als Binärzahl.
- LBPH verwendet 4 Parameter:
(i) Radius: Der Radius wird verwendet, um das kreisförmige lokale Binärmuster aufzubauen, und repräsentiert den Radius um das
zentrale Pixel.
(ii) Nachbarn: Die Anzahl der Abtastpunkte zum Erstellen des kreisförmigen lokalen Binärmusters.
(iii) Gitter X: Die Anzahl der Zellen in horizontaler Richtung.
(iv) Gitter Y: Die Anzahl der Zellen in vertikaler Richtung. - Das gebaute Modell wird mit den Gesichtern trainiert, denen ein Etikett zugewiesen wurde. Später erhält die Maschine Testdaten und die Maschine entscheidet über das richtige Etikett.
Wie benutzt man :
- Erstellen Sie ein Verzeichnis in Ihrem PC und benennen Sie es (sagen Sie Projekt)
- Erstellen Sie zwei Python-Dateien mit den Namen create_data.py und face_recognize.py und kopieren Sie den ersten Quellcode bzw. den zweiten Quellcode.
- Kopieren Sie haarcascade_frontalface_default.xml in das Projektverzeichnis. Sie können es in opencv oder von
hier herunterladen . - Sie können jetzt die folgenden Codes ausführen.
import
cv2, sys, numpy, os
haar_file
=
'haarcascade_frontalface_default.xml'
datasets
=
'datasets'
sub_data
=
'vivek'
path
=
os.path.join(datasets, sub_data)
if
not
os.path.isdir(path):
os.mkdir(path)
(width, height)
=
(
130
,
100
)
face_cascade
=
cv2.CascadeClassifier(haar_file)
webcam
=
cv2.VideoCapture(
0
)
count
=
1
while
count <
30
:
(_, im)
=
webcam.read()
gray
=
cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
faces
=
face_cascade.detectMultiScale(gray,
1.3
,
4
)
for
(x, y, w, h)
in
faces:
cv2.rectangle(im, (x, y), (x
+
w, y
+
h), (
255
,
0
,
0
),
2
)
face
=
gray[y:y
+
h, x:x
+
w]
face_resize
=
cv2.resize(face, (width, height))
cv2.imwrite(
'% s/% s.png'
%
(path, count), face_resize)
count
+
=
1
cv2.imshow(
'OpenCV'
, im)
key
=
cv2.waitKey(
10
)
if
key
=
=
27
:
break
Der folgende Code sollte ausgeführt werden, nachdem das Modell für die Gesichter trainiert wurde:
import
cv2, sys, numpy, os
size
=
4
haar_file
=
'haarcascade_frontalface_default.xml'
datasets
=
'datasets'
(
'Recognizing Face Please Be in sufficient Lights...'
)
(images, lables, names,
id
)
=
([], [], {},
0
)
for
(subdirs, dirs, files)
in
os.walk(datasets):
for
subdir
in
dirs:
names[
id
]
=
subdir
subjectpath
=
os.path.join(datasets, subdir)
for
filename
in
os.listdir(subjectpath):
path
=
subjectpath
+
'/'
+
filename
lable
=
id
images.append(cv2.imread(path,
0
))
lables.append(
int
(lable))
id
+
=
1
(width, height)
=
(
130
,
100
)
(images, lables)
=
[numpy.array(lis)
for
lis
in
[images, lables]]
model
=
cv2.face.LBPHFaceRecognizer_create()
model.train(images, lables)
face_cascade
=
cv2.CascadeClassifier(haar_file)
webcam
=
cv2.VideoCapture(
0
)
while
True
:
(_, im)
=
webcam.read()
gray
=
cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
faces
=
face_cascade.detectMultiScale(gray,
1.3
,
5
)
for
(x, y, w, h)
in
faces:
cv2.rectangle(im, (x, y), (x
+
w, y
+
h), (
255
,
0
,
0
),
2
)
face
=
gray[y:y
+
h, x:x
+
w]
face_resize
=
cv2.resize(face, (width, height))
prediction
=
model.predict(face_resize)
cv2.rectangle(im, (x, y), (x
+
w, y
+
h), (
0
,
255
,
0
),
3
)
if
prediction[
1
]<
500
:
cv2.putText(im,
'% s - %.0f'
%
(names[prediction[
0
]], prediction[
1
]), (x
-
10
, y
-
10
),
cv2.FONT_HERSHEY_PLAIN,
1
, (
0
,
255
,
0
))
else
:
cv2.putText(im,
'not recognized'
,
(x
-
10
, y
-
10
), cv2.FONT_HERSHEY_PLAIN,
1
, (
0
,
255
,
0
))
cv2.imshow(
'OpenCV'
, im)
key
=
cv2.waitKey(
10
)
if
key
=
=
27
:
break
Hinweis: Die oben genannten Programme werden nicht in der Online-IDE ausgeführt.
Screenshots des Programms
Es könnte etwas anders aussehen, weil ich das obige Programm in das Kolbengerüst integriert hatte
Das Ausführen des zweiten Programms führt zu ähnlichen Ergebnissen wie im folgenden Bild:
Datensatzspeicherung: