[文章]【HiSpark IPC DIY Camera试用连载 】第二篇 视频的人脸检测

阅读量0
0
0
实在的,ipc本身就带有这个功能,只要摄像头出现画面,本身就会检测人脸,而且从app上看,还有移动检测功能,已经非常强大了,但是自己做出来,可以了解更多的知识.
本文使用python和opencv来检测的人脸.
使用的主要api如下:
  1. cv2.cvtColor对色彩进行转换
  2. cv2.CascadeClassifier这个是输入人脸数据,该数据基于文件haarcascade_frontalface_alt_tree.xml,已经保存了人脸特征,不需要我们去实现
  3. cv2.detectMultiScale该函数用来检测人脸,是本文处理人脸的主要函数
复制代码
Opencv打开摄像头使用函数:
  1. camera = cv2.VideoCapture(0)  # 参数0表示第一个摄像头
复制代码
程序代码如下
# -*- coding: utf-8 -*-
import cv2
import numpy as np

camera = cv2.VideoCapture(0)

# 判断视频是否打开
if (camera.isOpened())
print('Open')
else:
    print('摄像头未打开')

# 测试用,查看视频size
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:' + repr(size))

# es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
# kernel = np.ones((5, 5), np.uint8)
# background = None

while True:
    # 读取视频流
    grabbed, frame_lwpCV = camera.read()
    gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)
    face_detector = cv2.CascadeClassifier("D:/Python/Python39/Lib/site-packages/cv2/data/haarcascade_frontalface_alt_tree.xml")
    '''
    cv2.cv2.CascadeClassifier.CascadeClassifier def __init__(self,
             *args: Any,
             **kwargs: Any) -> None
    '''
    faces = face_detector.detectMultiScale(gray_lwpCV, 1.02, 5)
    '''
    def detectMultiScale(self,
                     image: Any,                # 输入待检测的图像,灰度
                     scaleFactor: Any = None,   # 尺度系数
                     minNeighbors: Any = None,  # 需要的邻域数
                     flags: Any = None,
                     minSize: Any = None,       # 最小检测窗口
                     maxSize: Any = None) -> None   # 最大检测窗口
    '''
    for x, y, w, h in faces:
        cv2.rectangle(frame_lwpCV, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 绘制矩形
        # cv2.rectangle(frame_lwpCV, (x, y), (x + w, y + h), (0, 255, 0), 2)
        # cv2.rectangle(src, (x, y), (x + w, y + h), (0, 0, 255), 2)  # 绘制矩形
        '''
        def rectangle(img: Any,             # 图像
              pt1: Any,                     # pt1 矩形的一个顶点
              pt2: Any,                     # pt2 矩形对角线上的另一个顶点
              color: Any,                   # 线条颜色 (RGB) 或亮度(灰度图像 )
              thickness: Any = None,        # 组成矩形的线条的粗细程度,取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形
              lineType: Any = None,         # 线条的类型
              shift: Any = None) -> None
        '''
    cv2.imshow('contours', frame_lwpCV)
    # cv2.imshow('dis', diff)

    key = cv2.waitKey(1) & 0xFF
    # 按'q'健退出循环
    if key == ord('q'):
        break

# When everything done, release the capture
camera.release()
cv2.destroyAllWindows()


PS:我在发现代码格式乱了之后,尝试修改,出现如下错误
QQ截图20210114001021.jpg

没法改,尴尬...


main.py
(2.52 KB, 下载次数: 3)

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友