手把手教你利用opencv实现人脸识别功能(附源码+文档)
目录
- 一、环境
- 二、使用Haar级联进行人脸检测
- 三、Haar级联结合摄像头
- 四、使用SSD的人脸检测
- 五、 SSD结合摄像头人脸检测
- 六、结语
一、环境
pip install opencv-python
python3.9
pycharm2020
人狠话不多,直接上代码,注释在代码里面,不说废话。
二、使用Haar级联进行人脸检测 测试案例:
文章图片
代码:(记得自己到下载地址下载对应的xml)
# coding=gbk"""作者:川川@时间: 2021/9/5 16:38https://github.com/opencv/opencv/tree/master/data/haarcascades"""import cv2# 待检测的图片路径imagepath="2.jpg"image = cv2.imread(imagepath)#读取图片gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#图像转换为灰度图:face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')#加载使用人脸识别器faces = face_cascade.detectMultiScale(gray)#检测图像中的所有面孔#为每个人脸绘制一个蓝色矩形for x, y, width, height in faces: # 这里的color是 蓝 黄 红,与rgb相反,thickness设置宽度cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2)# 最后,让我们保存新图像cv2.imwrite("beauty_detected.jpg", image)
效果:
文章图片
效果可以看出这个效果并不是很好。
三、Haar级联结合摄像头 代码:(还是用的前面得xml)
# coding=gbk"""摄像头人脸识别作者:川川@时间: 2021/9/5 17:15Haar级联结合摄像头"""import cv2#创建新的cam对象cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)#初始化人脸识别器(默认的人脸haar级联)face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')while True:# 从摄像头读取图像_, image = cap.read()# 转换为灰度image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 检测图像中的所有人脸faces = face_cascade.detectMultiScale(image_gray, 1.3, 5)# 为每个人脸绘制一个蓝色矩形for x, y, width, height in faces:cv2.rectangle(image, (x, y), (x + width, y + height), color=(255, 0, 0), thickness=2)cv2.imshow("image", image)if cv2.waitKey(1) == ord("q"):breakcap.release()cv2.destroyAllWindows()
【手把手教你利用opencv实现人脸识别功能(附源码+文档)】效果:
文章图片
四、使用SSD的人脸检测 代码:
# coding=gbk"""图片人脸识别作者:川川@时间: 2021/9/5 17:22"""import cv2import numpy as np# 下载链接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxtprototxt_path = r"./deploy.prototxt.txt"# 下载链接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodelmodel_path =r"./res10_300x300_ssd_iter_140000_fp16.caffemodel"model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)image = cv2.imread("2.jpg")h, w = image.shape[:2]blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300),(104.0, 177.0, 123.0))model.setInput(blob)output = np.squeeze(model.forward())font_scale = 1.0for i in range(0, output.shape[0]):confidence = output[i, 2]if confidence > 0.5:box = output[i, 3:7] * np.array([w, h, w, h])start_x, start_y, end_x, end_y = box.astype(np.int)cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2)cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2)cv2.imshow("image", image)cv2.waitKey(0)cv2.imwrite("beauty_detected.jpg", image)
效果:
文章图片
我们可以看到现在的识别效果非常好了。
五、 SSD结合摄像头人脸检测 代码:
# coding=gbk"""作者:川川@时间: 2021/9/5 17:26SSD结合摄像头的人脸检测"""import cv2import numpy as npprototxt_path = "deploy.prototxt.txt"model_path = "res10_300x300_ssd_iter_140000_fp16.caffemodel"model = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)cap = cv2.VideoCapture(0)while True:_, image = cap.read()h, w = image.shape[:2]blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0))model.setInput(blob)output = np.squeeze(model.forward())font_scale = 1.0for i in range(0, output.shape[0]):confidence = output[i, 2]if confidence > 0.5:box = output[i, 3:7] * np.array([w, h, w, h])start_x, start_y, end_x, end_y = box.astype(np.int)cv2.rectangle(image, (start_x, start_y), (end_x, end_y), color=(255, 0, 0), thickness=2)cv2.putText(image, f"{confidence*100:.2f}%", (start_x, start_y-5), cv2.FONT_HERSHEY_SIMPLEX, font_scale, (255, 0, 0), 2)cv2.imshow("image", image)if cv2.waitKey(1) == ord("q"):breakcv2.destroyAllWindows()cap.release()
效果:
文章图片
可以发现SSD效果特别好!
六、结语 如果你想更深了解这些原理,去读一下opencv文档吧,中文官方文档如下:
https://woshicver.com/在很多人调用xm会遇到一些坑,我在这里说一下,读取xml的时候用相对路径./这种,参考我的,建议不要路径中出现中文,其它没啥了。
到此这篇关于手把手教你利用opencv实现人脸识别功能的文章就介绍到这了,更多相关opencv实现人脸识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 社会教你顽强,而不是教你失望
- 碎片化阅读,四步教你建立自己的知识体系
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 8种搭配,教你将铅笔裤穿的更有型!
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- 苹果手机如何利用库乐队自制铃声
- 秋季入冬学会为自己煲汤抵御寒冷吧!教你三大保暖汤
- 小姐姐教你用python把全网小说一键下载
- 教你如何做一个好看的表格,excel使用技巧大全
- 斯米兰开放,|斯米兰开放, 这篇最火的海岛穿搭指南,手把手教你惊艳整片海滩!