使用 Python 进行面部和眼睛检测
人工智能等各类编程培训资料整理,所有资源无秘无压缩-购买会员
通过使用 OpenCV,你可以识别面部和眼睛等对象,并使用 Haar 级联算法实时跟踪它们。
Haar Cascade 是一种分类器,用于检测其训练对象。我们将使用 Face cascade和 Eyes cascade。你可以使用 Google 查找你可能想要检测的各种 Haar Cascades。
安装 OpenCVpipinstallopencv-python
从照片中检测
我假设你已经从上面的链接下载了haarcascade_eye.xml和haarcascade_frontalface_default.xml,并将这些文件放在项目的数据目录中。
人脸检测
我们将在下图中检测人脸。
首先导入OpenCV库、Image和haarcascade_frontalface_default.xml。
importcv2
face_cascade=cv2.CascadeClassifier(.Datahaarcascade_frontalface_default.xml)
nadia=cv2.imread(./Data/Nadia_Murad.jpg,0)
通过添加 0,图像在导入过程中变为黑白。
现在让我们创建一个函数来识别面部并在其周围绘制一个正方形。
defdetect_face(img):
face_img=img.copy()
face_rect=face_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5)
for(x,y,w,h)inface_rect:
cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)
returnface_img
现在图像已传递给函数,将在脸部周围创建一个方框。此外,我们将构建一个显示图像,并在按下“Q”时结束的 while 循环。
result=detect_face(nadia)
whileTrue:
cv2.imshow(,result)
code=cv2.waitKey(10)
ifcode==ord(q):
break
运行该文件以查看结果。
眼睛检测
检测眼睛与检测面部非常相似。只需将你的haarcascade_frontalface_default.xml文件替换为haarcascade_eye.xml.
这是代码。
importcv2
eye_cascade=cv2.CascadeClassifier(.Datahaarcascade_eye.xml)
nadia=cv2.imread(./Data/Nadia_Murad.jpg,0)
defdetect_eyes(img):
face_img=img.copy()
eyes=eye_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5)
for(x,y,w,h)ineyes:
cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)
returnface_img
result=detect_eyes(nadia)
whileTrue:
cv2.imshow(,result)
code=cv2.waitKey(10)
ifcode==ord(q):
break
运行该文件以查看结果。
从相机检测
在这里,我们将使用 Haar Cascade 的分类器,让我们的相机不仅可以检测而且可以跟踪我们的面部和眼睛。
人脸检测
让我们首先从人脸检测开始。导入 OpenCV 库和haarcascade_frontalface_default.xml文件。我们将使用与上面相同的detect_face函数。
importcv2
face_cascade=cv2.CascadeClassifier(.Datahaarcascade_frontalface_default.xml)
defdetect_face(img):
face_img=img.copy()
face_rect=face_cascade.detectMultiScale(face_img,scaleFactor=1.2,minNeighbors=5)
for(x,y,w,h)inface_rect:
cv2.rectangle(face_img,(x,y),(x+w,y+h),(255,255,255),10)
returnface_img
我们将使用一个名为 VideoCapture() 的函数。此函数允许我们打开相机并捕获视频,并将其转换为帧。
现在创建一个 while 循环并将这些帧发送到我们的函数。该函数将返回那些面部周围有方框的帧。
cap=cv2.VideoCapture(0)
whileTrue:
ret,frame=cap.read()
frame=detect_face(frame)
cv2.imshow(FaceDetection,frame)
code=cv2.waitKey(10)
ifcode==ord(q):
break
cap.release()
cv2.destroyAllWindows()
运行该文件以查看结果。
眼睛检测
与人脸检测类似,我们现在将使用haarcascade_eye.xml文件来检测眼睛。导入haarcascade_eye.xml文件并使用与人脸检测相同的代码。
importcv2
eye_cascade=cv2.CascadeClassifier(.Datahaarcascade_eye.xml)
defdetect_eye(img):
eye_img=img.copy()
eye_rect=eye_cascade.detectMultiScale(eye_img,scaleFactor=1.2,minNeighbors=5)
for(x,y,w,h)ineye_rect:
cv2.rectangle(eye_img,(x,y),(x+w,y+h),(255,255,255),10)
returneye_img
cap=cv2.VideoCapture(0)
whileTrue:
ret,frame=cap.read()
frame=detect_eye(frame)
cv2.imshow(EyeDetection,frame)
code=cv2.waitKey(10)
ifcode==ord(q):
break
cap.release()
cv2.destroyAllWindows()
现在运行该文件以查看结果。
结论
OpenCV 是一个非常强大的机器学习库。
源代码:https://github.com/Priyank010/Face-and-Eye-Detection
600学习网 » 使用 Python 进行面部和眼睛检测