Python人脸编码 python人脸检测代码 您所在的位置:网站首页 python画方格图 Python人脸编码 python人脸检测代码

Python人脸编码 python人脸检测代码

2023-06-20 23:19| 来源: 网络整理| 查看: 265

目录

1.理论知识

1)安装opencv

2)opencv人脸检测器

3) 加载人脸分类器

2.代码介绍

1)用摄影头调用图像

2)选择图片

 3.完整代码

1.理论知识1)安装opencv

本文实现人脸目标检测的方法是opencv图像采集,因此我们也需先下载opencv的相关库

方法:pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple

2)opencv人脸检测器

opencv中自带人脸检测器,是使用Haar算法进行人脸检测。大致介绍一下其原理,先生成一个矩形块,根据人脸的各个部位的明暗度,并要求眼睛、鼻梁、嘴等部位超过一定的阈值(PS中的知识)从而实现人脸检测,大致看图就清晰易懂。

Python人脸编码 python人脸检测代码_python

3) 加载人脸分类器# 创建一个级联分类器 haarcascade = cv2.CascadeClassifier('D:\\2\\haarcascade_frontalface_alt.xml')

但这个人脸分类器我试过只能达到正脸的效果,侧脸并不能进行检测出是人的效果

Haar的下载地址:https://github.com/opencv/opencv/tree/master/data

2.代码介绍1)用摄影头调用图像# 调用摄像头进行拍照 cap = cv2.VideoCapture(0) ret, img = cap.read() cap.release()2)选择图片

本文运用图片进行目标检测

# 括号中的path为图像路径 img=cv2.imread(path)

检测图像中的人脸,返回人脸的相关向量组

faces = haarcascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

scaleFactor参数:指图像尺寸每次减小的比例为1.3

minNeighbors参数:指每一个目标至少被检测5次才算真正的目标(像素在计算机里就是一个个格子,不同大小的图像框都能检测到人脸)

绘制矩形框:

# 对检测到的目标画框 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 1)

rectangle函数中参数的含义: 

img:处理的图像 (x,y),(x+w,y+h): 矩形框的左上和右下的坐标 (255,255,0): 颜色 1 : 线条的宽度

展示图像:

# 显示结果 cv2.imshow("Final_image", img) cv2.waitKey(0)

结果显示(含侧脸检测失败图): 

 

Python人脸编码 python人脸检测代码_Python人脸编码_02

Python人脸编码 python人脸检测代码_Python人脸编码_03

 3.完整代码import cv2 if __name__=="__main__": img = cv2.imread("D:\\2\\code\\datas\\test1.jpg") # 读取照片后转换成灰度图 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) haarcascade = cv2.CascadeClassifier('D:\\2\\haarcascade_frontalface_alt.xml') # 识别图像中的人脸,返回所有人脸的矩形框向量组 # scaleFactor 为了检测到不同大小的目标,通过scalefactor参数把图像长宽同时按照一定比例逐步缩小 # 然后检测,这个参数设置的越大,计算速度越快,但可能会错过了某个大小的人脸。 # minNeighbors 构成检测目标的相邻矩形的最小个数 faces = haarcascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5) # 对检测到的目标画框 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 1) """ #在img上绘制矩形 def draw(img, faces, color): for x1, y1, x2, y2 in faces: cv2.rectangle(img, (x1, y1), (x2, y2), color, 2) img1 = img.copy() draw(img1, faces, (0, 255, 0)) """ # 显示结果 cv2.imshow("Final_image", img) cv2.waitKey(0)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有