OpenCV进行人脸识别(Python)
OpenCV,进行,人脸识别,Python
2025-03-18 08:48:41 时间
前言
本文环境
- python 3.8
- opencv-python 4.6.0.66
包管理器
安装包管理器
pip install pipenv
pipenv install
添加opencv
pipenv install opencv-python=4.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
查看安装的依赖
pipenv run pip list
安装所有配置文件中的依赖
pipenv install
运行
pipenv run python main.py
人像识别
导入的时候使用
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
效果较好。
识别代码
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)
识别前
识别后
OpenCV常用操作
窗口显示图片
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
其中
cv2.namedWindow("Image",0);
cv2.resizeWindow("Image", 800, 500);
这两行是设置窗口的大小,默认是图片的实际大小。
后面是让程序死循环,否则会直接推出,这时按Esc
才会推出。
获取摄像头画面
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()
摄像头添加人像识别
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()
相关文章
- Pycharm和Anaconda的python版本问题
- python之抛出异常(raise语句)「建议收藏」
- pycharm如何运行ipynb_python安装jupyter
- Python项目44-前后端分离项目(前戏)
- dataframe loc iloc_python的isnull函数
- 恢复pycharm中误删的Python文件
- pycharm用anaconda的Python_pycharm配置anaconda环境
- python报错no module named_pycharm报错no module named
- 分享一个简单的 Python 脚本库:将 requests 代码转换成 curl 命令
- python+pycharm安装_pycharm安装教程2020
- python爬取对方qq好友_小白工作室QQ
- 用python实现线性回归算法
- pythoncharm注释快捷键_JAVA注释快捷键
- 为什么python读取不了文件_python系统找不到指定文件怎么办
- Python绘制时间演变图工具汇总(附代码)
- 用 Python 破解 WiFi 密码,太刺激了!
- python的第三方库是用什么实现的_python 第三方库
- python安装numpy后pycharm导入不了_pycharm中numpy安装
- python与pycharm区别_pycharm与anaconda
- pycharm使用python_pytorch中文手册