前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV进行人脸识别(Python)

OpenCV进行人脸识别(Python)

作者头像
码客说
发布2022-09-27 15:37:50
8330
发布2022-09-27 15:37:50
举报
文章被收录于专栏:码客码客

前言

本文环境

  • python 3.8
  • opencv-python 4.6.0.66

包管理器

安装包管理器

代码语言:javascript
复制
pip install pipenv
pipenv install

添加opencv

代码语言:javascript
复制
pipenv install opencv-python=4.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

查看安装的依赖

代码语言:javascript
复制
pipenv run pip list

安装所有配置文件中的依赖

代码语言:javascript
复制
pipenv install

运行

代码语言:javascript
复制
pipenv run python main.py

人像识别

导入的时候使用

代码语言:javascript
复制
import cv2

训练库

https://gitee.com/mirrors/opencv/tree/4.x/data/haarcascades

https://github.com/opencv/opencv/tree/master/data/haarcascades

1)对于人脸检测,OpenCV提供以下(从最宽松到最严格):

  • haarcascade_frontalface_default.xml
  • haarcascade_frontalface_alt.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_frontalface_alt_tree.xml

2) 对于眼睛检测,我们可以选择两种方法:

  • haarcascade_eye.xml
  • haarcascade_eye_tree_eyegasses.xml

原则

在识别的时候 如果是眼睛检测就最好是在单人并且主体是人像中找。 如果是人脸检测则主体要是人 否则识别效果特别差。

其中尝试了以下几个

haarcascade_frontalface_default.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt2.xml haarcascade_frontalface_alt_tree.xml

经测试haarcascade_frontalface_alt2.xml效果较好。

识别代码

代码语言:javascript
复制
import cv2

# 读取图片
image = cv2.imread('./imgs/01.png')

# 引入人像识别训练库 haarcascade_frontalface_alt2.xml
face_patterns = cv2.CascadeClassifier(r'.\xml\haarcascade_frontalface_alt2.xml')
# 获取识别到的人脸
faces = face_patterns.detectMultiScale(image, scaleFactor=1.1, minNeighbors=4, minSize=(6, 6))

print(faces)

# 将识别到的人脸框出来
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 生成一张新的图片保存识别结果
cv2.imwrite('./imgs/02.jpg', image)

识别前

01
01

识别后

02
02

OpenCV常用操作

窗口显示图片

代码语言:javascript
复制
cv2.namedWindow("Image",0);
cv2.resizeWindow("Image", 800, 500);
cv2.imshow("Image", image)

while True:
    c = cv2.waitKey(1)
    if c == 27:
        cv2.destroyAllWindows()
        break

其中

代码语言:javascript
复制
cv2.namedWindow("Image",0);
cv2.resizeWindow("Image", 800, 500);

这两行是设置窗口的大小,默认是图片的实际大小。

后面是让程序死循环,否则会直接推出,这时按Esc才会推出。

获取摄像头画面

代码语言:javascript
复制
import cv2

video = cv2.VideoCapture(0)
fps = video.get(cv2.CAP_PROP_FPS)
print(fps)
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)
while True:
    ret, frame = video.read()
    cv2.imshow("A video", frame)
    c = cv2.waitKey(1)
    if c == 27:
        break
video.release()
cv2.destroyAllWindows()

摄像头添加人像识别

代码语言:javascript
复制
import cv2

# 引入人像识别训练库 haarcascade_frontalface_alt2.xml
face_patterns = cv2.CascadeClassifier(r'.\xml\haarcascade_frontalface_alt2.xml')

video = cv2.VideoCapture(0)
fps = video.get(cv2.CAP_PROP_FPS)
print(fps)
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)

timenum = 0
while True:
    ret, frame = video.read()
    # 降低解析的频率
    if timenum >= 1:
        timenum = 0
        # 获取识别到的人脸
        faces = face_patterns.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=4, minSize=(60, 60))
        # 将识别到的人脸框出来
        for (x, y, w, h) in faces:
            cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

    cv2.imshow("Face", frame)
    c = cv2.waitKey(int(1000 / fps))
    timenum += 1
    if c == 27:
        break

# 解除摄像头占用
video.release()
cv2.destroyAllWindows()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 包管理器
  • 人像识别
  • OpenCV常用操作
    • 窗口显示图片
    • 获取摄像头画面
    • 摄像头添加人像识别
    相关产品与服务
    人脸识别
    腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档