情感检测器用于许多行业, 其中一个是媒体行业, 对于公司来说, 确定公众对其产品的反应非常重要。在本文中, 我们将使用OpenCV构建一个微笑检测器, 该检测器将从网络摄像头中获取实时信息。我们将要实现的微笑/幸福检测器将是一个原始的检测器, 存在许多更好的实现方法。
第1步:首先, 我们需要导入OpenCV库。
import cv2
第2步:包括所需的haar级联。
Haar级联是用于通过在面部片段上叠加预定义的图案来检测(在这种情况下为面部的)特征的分类器, 并用作XML文件。在我们的模型中, 我们将使用面部, 眼睛和微笑级联, 下载后需要将其放置在工作目录中。
可以找到所有需要的Haar级联这里.
face_cascade = cv2.CascadeClassifier( 'haarcascade_frontalface_default.xml' )
eye_cascade = cv2.CascadeClassifier( 'haarcascade_eye.xml' )
smile_cascade = cv2.CascadeClassifier( 'haarcascade_smile.xml' )
步骤3:在这一步中,我们将构建执行微笑检测的主要功能。
来自网络摄像头/视频设备的实时提要逐帧处理。我们处理灰度图像, 因为级联效果更好。
要检测面部, 我们使用:
faces = face_cascade.detectMultiScale(gray, 1.3 , 5 )
其中1.3是缩放因子, 5是最近的邻居数。我们可以根据我们的便利/结果调整这些因素, 以改进检测器。
现在, 对于检测到的每个后续面孔, 我们需要检查笑容。
def detect(gray, frame):
faces = face_cascade.detectMultiScale(gray, 1.3 , 5 )
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), ((x + w), (y + h)), ( 255 , 0 , 0 ), 2 )
roi_gray = gray[y:y + h, x:x + w]
roi_color = frame[y:y + h, x:x + w]
smiles = smile_cascade.detectMultiScale(roi_gray, 1.8 , 20 )
for (sx, sy, sw, sh) in smiles:
cv2.rectangle(roi_color, (sx, sy), ((sx + sw), (sy + sh)), ( 0 , 0 , 255 ), 2 )
return frame
说明–
- 人脸数据存储为坐标元组。此处, x和y定义面部框架左上角的坐标, w和h定义框架的宽度和高度。
- 的cv2.rectangle函数接受参数框, 脸部的左上角坐标, 右下角的坐标, 矩形的RGB代码(其中将包含检测到的脸部)以及矩形的厚度。
- 的roi_gray定义面部的兴趣区域, 并roi_color对原始框架执行相同的操作。
- 在第7行中, 我们使用级联应用微笑检测。
步骤4:我们在这个步骤中定义main函数。执行后,按“q”键即可终止功能。
video_capture = cv2.VideoCapture( 0 )
while True :
# Captures video_capture frame by frame
_, frame = video_capture.read()
# To capture image in monochrome
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# calls the detect() function
canvas = detect(gray, frame)
# Displays the result on camera feed
cv2.imshow( 'Video' , canvas)
# The control breaks once q key is pressed
if cv2.waitKey( 1 ) & 0xff = = ord ( 'q' ):
break
# Release the capture once all the processing is done.
video_capture.release()
cv2.destroyAllWindows()
输出如下:
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
评论前必须登录!
注册