凯发真人娱乐

视频人脸检测——opencv版(三) -凯发真人娱乐

2023-08-17,,

视频人脸是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——版(二)》

往期目录

视频人脸检测——dlib版(六)
opencv添加中文(五)
图片人脸检测——dlib版(四)
视频人脸检测——opencv版(三)
图片人脸检测——opencv版(二)
opencv环境搭建(一)
更多更新,欢迎访问我的github:https://github.com/vipstone/faceai

实现思路:

调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户,用户看到的效果就是视频的人脸检测。

效果预览:

实现步骤

使用opencv调用摄像头并展示

获取摄像头:

cap = cv2.videocapture(0)

参数0表示,获取第一个摄像头。

显示摄像头 逐帧显示,代码如下:

while (1):
ret, img = cap.read()
cv2.imshow("image", img)
if cv2.waitkey(1) & 0xff == ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyallwindows() # 释放窗口资源

cv2.waitkey(1) & 0xff使用了“&”位元算法,含义是获取用户输入的最后一个字符的ascii码,如果输入的是“q”,则跳出循环。

视频的人脸识别

这个时候,用到了上一节的《图片人脸检测——opencv版(二)》 把人脸识别的代码封装成方法,代码如下:

def discern(img):
gray = cv2.cvtcolor(img, cv2.color_bgr2gray)
cap = cv2.cascadeclassifier(
"c:\python36\lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"
)
facerects = cap.detectmultiscale(
gray, scalefactor=1.2, minneighbors=3, minsize=(50, 50))
if len(facerects):
for facerect in facerects:
x, y, w, h = facerect
cv2.rectangle(img, (x, y), (x h, y w), (0, 255, 0), 2) # 框出人脸
cv2.imshow("image", img)

再循环摄像头帧图片的时候,调用图片识别方法即可,代码如下:

# 获取摄像头0表示第一个摄像头
cap = cv2.videocapture(0)
while (1): # 逐帧显示
ret, img = cap.read()
# cv2.imshow("image", img)
discern(img)
if cv2.waitkey(1) & 0xff == ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyallwindows() # 释放窗口资源

完整的代码如下:

# -*- coding:utf-8 -*-
# opencv版本的视频检测
import cv2 # 图片识别方法封装
def discern(img):
gray = cv2.cvtcolor(img, cv2.color_bgr2gray)
cap = cv2.cascadeclassifier(
"c:\python36\lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"
)
facerects = cap.detectmultiscale(
gray, scalefactor=1.2, minneighbors=3, minsize=(50, 50))
if len(facerects):
for facerect in facerects:
x, y, w, h = facerect
cv2.rectangle(img, (x, y), (x h, y w), (0, 255, 0), 2) # 框出人脸
cv2.imshow("image", img) # 获取摄像头0表示第一个摄像头
cap = cv2.videocapture(0)
while (1): # 逐帧显示
ret, img = cap.read()
# cv2.imshow("image", img)
discern(img)
if cv2.waitkey(1) & 0xff == ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyallwindows() # 释放窗口资源

视频人脸检测——opencv版(三)的相关教程结束。

网站地图