人脸检测是一种识别数字图像中人类面孔的技术。人脸检测是一项相对成熟的技术,还记得在您的数码相机的旧日子里,当您通过取景器看时?您会看到围绕在取景器中的人们脸部的矩形框。在进行人脸识别之前,您需要学习的技术就是人脸检测,也就是试图给脸部赋予一个名字。
对于人脸检测,其中最著名的算法之一是被称为Viola-Jones人脸检测技术,通常称为Haar级联。Haar级联在深度学习流行之前就被发明了,是最常用于检测人脸的技术之一。
尽管检测和识别人脸的能力确实很酷,但它肯定涉及很多道德问题。在将面部识别应用到项目中之前,您需要注意一些关切事项。这些关切事项包括隐私(人脸检测可用于在未经同意的情况下追踪人们的活动)、偏见(人脸检测可能对不同种族、性别或年龄的个体存在偏见)以及滥用(捕捉到的面部可能被用于其他非法用途或恶意目的)。因此,尽管本文侧重于人脸检测的技术能力,但在将其应用到工作中之前,您应该仔细考虑道德和伦理问题。
以下是一些低风险项目,可以在其中实施人脸检测/识别:
然而,在某些应用中使用人脸识别具有严重的道德影响。以下是一些例子:
Haar级联分类器用于检测其经过训练的对象。以下是Haar面部分类器的工作原理的高级概述:
幸运的是,不需要知道Haar级联是如何工作的,OpenCV可以直接使用预训练的Haar级联进行人脸检测,以及用于识别其他对象的其他Haar级联。预定义的Haar级联列表可在GitHub上找到,链接为:https://github.com/opencv/opencv/tree/master/data/haarcascades。
开源计算机视觉(OpenCV)是由英特尔最初开发的开源计算机视觉和机器学习软件库。它旨在为计算机视觉应用程序提供共同的基础架构,并加速机器感知在商业产品中的使用。OpenCV附带了几个预训练的Haar级联,可以检测眼睛、脸部、俄罗斯车牌、微笑等。对于人脸检测,您将需要`haarcascade_frontalface_default.xml`文件,可以从上文的GitHub链接中下载。
让我们尝试使用OpenCV进行人脸检测。首先,您需要使用以下命令进行安装:
!pip install opencv-python
对于本文示例,您需要创建一个名为`face_detection.py`的文件。首先,通过以下语句导入OpenCV库:
import cv2
接下来要做的是连接到您的网络摄像头并在屏幕上显示图像:
import cv2# default webcamstream = cv2.VideoCapture(0)while(True): # Capture frame-by-frame (grabbed, frame) = stream.read() # Show the frame cv2.imshow("Image", frame) key = cv2.waitKey(1) & 0xFF if key == ord("q"): # Press q to break out of the loop break# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)
为引用您的网络摄像头,请使用`VideoCapture`类并传递一个数字,表示您的摄像头实例(0表示第一个摄像头,1表示第二个摄像头,依此类推)。
stream = cv2.VideoCapture(0)
为了持续捕获来自网络摄像头的输入,使用一个无限循环(`while(True)`)读取每一帧然后显示它:
# Capture frame-by-frame (grabbed, frame) = stream.read() # Show the frame cv2.imshow("Image", frame)
为了使程序能够优雅地退出,等待用户在键盘上按键。当按下"q"键时,循环终止:
key = cv2.waitKey(1) & 0xFF if key == ord("q"): # Press q to break out of the loop break
然后进行清理工作:
# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)
要运行程序,请转到终端并键入:
$ python face_detection.py
现在您应该看到您的脸:
现在来玩个有趣的部分 —— 检测脸部。首先,创建`CascadeClassifier`类的一个实例,并将`haarcascade_frontalface_default.xml`文件传递给它:
import cv2# for face detectionface_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
您需要复制`haarcascade_frontalface_default.xml`文件并将其放在与`face_detection.py`文件相同的文件夹中。您可以从https://github.com/opencv/opencv/tree/master/data/haarcascades下载XML文件。现在,您可以使用`detectMultiScale()`函数来检测脸部:
while(True): # Capture frame-by-frame (grabbed, frame) = stream.read() #===============DETECTING FACES============ # Convert to grayscale gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Try to detect faces in the webcam faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) # for each faces found for (x, y, w, h) in faces: # Draw a rectangle around the face color = (0, 255, 255) # in BGR stroke = 5 cv2.rectangle(frame, (x, y), (x + w, y + h), color, stroke) #===============DETECTING FACE============= # Show the frame cv2.imshow("Image", frame) key = cv2.waitKey(1) & 0xFF if key == ord("q"): # Press q to break out of the loop break
请注意`detectMultiScale()`函数中的以下参数:
您可以变化这两个参数的值以确保正确检测到人脸。
当检测到脸部时,您希望在它们周围画出矩形:
# for each faces found for (x, y, w, h) in faces: # Draw a rectangle around the face color = (0, 255, 255) # in BGR stroke = 5 cv2.rectangle(frame, (x, y), (x + w, y + h), color, stroke)
当您重新运行`face_detection.py`文件时,现在应该能够检测到脸部了。
`face_detection.py`文件的完整内容如下:
import cv2# for face detectionface_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# default webcamstream = cv2.VideoCapture(0)while(True): # Capture frame-by-frame (grabbed, frame) = stream.read() # Convert to grayscale gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Try to detect faces in the webcam faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) # for each faces found for (x, y, w, h) in faces: # Draw a rectangle around the face color = (0, 255, 255) # in BGR stroke = 5 cv2.rectangle(frame, (x, y), (x + w, y + h), color, stroke) # Show the frame cv2.imshow("Image", frame) key = cv2.waitKey(1) & 0xFF if key == ord("q"): # Press q to break out of the loop break# Cleanupstream.release()cv2.waitKey(1)cv2.destroyAllWindows()cv2.waitKey(1)
希望这篇简短的文章为您提供了一种使用Python和您的网络摄像头检测脸部的简单方法。确保下载`haarcascade_frontalface_default.xml`文件并将其放入与您的Python文件相同的文件夹中。
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-93353-0.html基于 Python 的人脸检测 :人脸识别的前提
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: ASP.NET Core 十大优秀第三方中间件推荐
下一篇: 事务中存在多线程,怎么处理?