个性化阅读
专注于IT技术分析

Python使用OpenCV进行微笑检测示例

情感检测器用于许多行业, 其中一个是媒体行业, 对于公司来说, 确定公众对其产品的反应非常重要。在本文中, 我们将使用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 |使用OpenCV进行微笑检测1

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0)
未经允许不得转载:srcmini » Python使用OpenCV进行微笑检测示例

评论 抢沙发

评论前必须登录!