手把手教你opencv做人脸识别(附源码+文档)

手把手教你opencv做人脸识别(附源码+文档)文章目录一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、SSD结合摄像头人脸检测六、结语一、环境pipinstallopencv-pythonpython3.9pycharm2020人狠话不多,直接上代码,注释在代码里面,不说废话。二、使用Haar级联进行人脸检测测试案例:代码:(记得自己到下载地址下载对应的xml)#coding=gbk”””作者:川川@时间:2021/9/516:38https://github.

大家好,又见面了,我是你们的朋友全栈君。

一、环境

pip install opencv-python

python3.9
pycharm2020
人狠话不多,直接上代码,注释在代码里面,不说废话。

二、使用Haar级联进行人脸检测

测试案例:
在这里插入图片描述

代码:(记得自己到下载地址下载对应的xml)

# coding=gbk
"""
作者:川川
@时间  : 2021/9/5 16:38
https://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:15
Haar级联结合摄像头
"""
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"):
        break

cap.release()
cv2.destroyAllWindows()

效果:
在这里插入图片描述

四、使用SSD的人脸检测

代码:

# coding=gbk
"""
图片人脸识别
作者:川川
@时间  : 2021/9/5 17:22
"""
import cv2
import numpy as np
# 下载链接:https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt
prototxt_path = r"./deploy.prototxt.txt"
# 下载链接:https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20180205_fp16/res10_300x300_ssd_iter_140000_fp16.caffemodel
model_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.0
for 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:26
SSD结合摄像头的人脸检测
"""
import cv2
import numpy as np
prototxt_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.0
    for 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"):
        break
cv2.destroyAllWindows()
cap.release()

效果:
在这里插入图片描述
可以发现SSD效果特别好!

六、结语

如果你想更深了解这些原理,去读一下opencv文档吧,中文官方文档如下:

https://woshicver.com/

在很多人调用xm会遇到一些坑,我在这里说一下,读取xml的时候用相对路径./这种,参考我的,建议不要路径中出现中文,其它没啥了。如果对你有帮助,三连支持一下,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133694.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • system.out.println()里面_println的意思

    system.out.println()里面_println的意思1.第一次见到该表达式的感受  第一此次见到该表达式的时候,我还不知道什么是方法引用,当时真是一脸蒙圈,然后问了好多同事,给我的解释也是五花八门,但我还是感觉莫名其妙,有段时间想着就当一个特例记住就好了,不要再去深究了!!!但是我这个人,在这种时候就是很难说服自己,于是有了上篇文章,再回过头来看这个问题,其实就变得非常简单了。2.揭开System.out::print…

    2022年10月2日
    2
  • html5 sexteen,Teens ‘conservative’ about pre-marital sex

    html5 sexteen,Teens ‘conservative’ about pre-marital sexAsignificantmajorityofChineseteenagersarequiteconservativewhenitcomestopre-maritalsex,asurveyof1,500peoplefromadistrictofChongqingmunicipalityhasshown.Thelatestpollsurvey…

    2022年5月10日
    38
  • VB程序设计教程(第四版)龚沛曾-实验8-6「建议收藏」

    VB程序设计教程(第四版)龚沛曾-实验8-6「建议收藏」实验8-6VB程序题:编写一个随机文件程序。要求:(1)建立一个具有5个学生的学号、姓名和成绩的随机文件(Random.dat)。(2)读出Random.dat文件中的内容,然后按成绩排序,最后按顺序写入另一个随机文件(Randoml.dat)。(3)再一次读出文件的内容,按文件中的顺序将学生的信息显示在屏幕上,检查正确性。解题,画3个按钮控件,代码如下:PrivateTy…

    2022年10月7日
    2
  • 流量分析基础篇

    流量分析基础篇流量分析1.流量分析是什么?  网络流量分析是指捕捉网络中流动的数据包,并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。  CTF比赛中,通常比赛中会提供一个包含流量数据的PCAP文件,进行分析。2.数据包分析总体把握–协议分级–端点统计过滤赛选–过滤…

    2022年6月1日
    42
  • 黑马程序猿 ———- Java网络技术之 —正則表達式 (Day06)

    黑马程序猿 ———- Java网络技术之 —正則表達式 (Day06)

    2022年1月25日
    44
  • android高德地图获取海拔_高德导航地图能显示海拔高度吗

    android高德地图获取海拔_高德导航地图能显示海拔高度吗现在人们生活水平普遍提高,私家车成为老百姓的常态,选择周末或者节假日来一场自驾游还是非常给力的,很多年轻人都喜欢挑战自己,去西部自驾游,这个就需要知道海拔信息了,那么高德地图能导航出海拔数据吗?高德地图测海拔的具体方法如下:1、第一步打开高德地图的网页,找到并点击下方那行小字。2、点中间的(开放平台)四个字。3、打开高德开发平台界面然后依次点击(开发支持)-(地图工具)-(坐标拾取器)。4、打开界…

    2022年5月21日
    434

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号