没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Python 基于 Opencv 来快速实现人脸识别
过程详解(完整版)
前言
随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识
别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基
础,从一个个函数开始走进这个奥妙的世界。
首先看一下本实验需要的数据集,为了简便我们只进行两个人的识
别,选取了
beyond
乐队的主唱黄家驹和贝斯手黄家强,这哥俩长得
有几分神似,这也是对人脸识别的一个考验:
两个文件夹,一个为训练数据集,一个为测试数据集,训练数据集中
有两个文件夹
0
和
1
,之前看一些资料有说这里要遵循
“slabel”
命名规
则,但后面处理起来比较麻烦,因为目前
opencv
接受的人脸识别标
签为整数,那我们就直接用整数命名吧:
为了方便,我们每个人用
20
张照片来训练,
0
代表黄家驹,
1
代表
黄家强:
开始啦:
1.
检测人脸
这应该是最基本的,给我们一张图片,我们要先检测出人脸的区域,
然后才能
进行操作,
opencv
已经内置了很多分类检测器,我们这次用
haar
:
def detect_face(img):
#
将测试图像转换为灰度图像,因为
opencv
人脸检测器需要灰度图
像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#
加载
OpenCV
人脸检测分类器
Haar
face_cascade =
cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
#
检测多尺度图像,返回值是一张脸部区域信息的列表(
x,y,
宽
,
高)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2,
minNeighbors=5)
#
如果未检测到面部,则返回原始图像
if (len(faces) == 0):
return None, None
#
目前假设只有一张脸,
xy
为左上角坐标,
wh
为矩形的宽高
(x, y, w, h) = faces[0]
#
返回图像的正面部分
return gray[y:y + w, x:x + h], faces[0]
2.
有了数据集和检测人脸的功能后,我们就可以进行预训练了
最后返回所有训练图片的人脸检测信息和标签:
#
该函数将读取所有的训练图像,从每个图像检测人脸并将返回两
个相同大小的列表,分别为脸部信息和标签
def prepare_training_data(data_folder_path):
#
获取数据文件夹中的目录(每个主题的一个目录)
dirs = os.listdir(data_folder_path)
#
两个列表分别保存所有的脸部和标签
faces = []
labels = []
#
浏览每个目录并访问其中的图像
for dir_name in dirs:
# dir_name(str
类型
)
即标签
label = int(dir_name)
#
建立包含当前主题主题图像的目录路径
subject_dir_path = data_folder_path + "/" + dir_name
#
获取给定主题目录内的图像名称
subject_images_names = os.listdir(subject_dir_path)
#
浏览每张图片并检测脸部,然后将脸部信息添加到脸部列表
faces[]
for image_name in subject_images_names:
#
建立图像路径
image_path = subject_dir_path + "/" + image_name
#
读取图像
image = cv2.imread(image_path)
#
显示图像
0.1s
cv2.imshow("Training on image...", image)
cv2.waitKey(100)
#
检测脸部
face, rect = detect_face(image)
剩余10页未读,继续阅读
资源评论
程序猿小乙
- 粉丝: 62
- 资源: 1740
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功