前言
前面利用ResNet18实现了二分类,这里借助分类网络来识别图片和视频中不同肤色的人数。大体流程可以分为以下几步:数据获取、数据处理、模型训练、图片识别以及视频识别,其中大部分内容参考《机器视觉之TensorFlow2入门、原理与应用实践》第4章。
一、数据获取
这里获取黑人和白人模特数据用于训练。
- 图片地址链接
https://www.quanjing.com/tupian/mote_bairen.html https://www.quanjing.com/tupian/mote_heiren.html - 爬虫代码
参照书本,爬虫脚本定义了一个Crawler类,主要分为以下几块 - 根据自己需要,可以调整时间间隔以及图片数量。
- 爬虫结果
白人
黑人
二、数据处理
前面爬取得到的图片不仅仅包含人脸,还有身体及其他背景等内容,而且图片大小也不一致,所以这里需要对获取的图片进行预处理,主要分为以下两个步骤:
- 获取每张图片上人脸位置
- 依据人脸位置对图片进行裁剪,得到人脸图像
1. 获取人脸位置
为了快速获得图片中人脸位置信息,这里借助face_recognition
库直接得到人脸位置。
- 安装
face_recognition
- 识别流程
- 结果
2. 裁剪图片
通过上一步获得了人脸的包围框信息,借助openCV
库对其进行裁剪,并保存至相应文件夹。
裁剪后图片
三、模型训练
经过以上步骤,数据集就制作完成了,沿用Resnet18实现二分类的内容制作对应的数据集并进行训练,得到黑人和白人两个类别的分类模型。
训练过程这里就不重复,直接贴出训练过程中visdom
可视化结果
四、图片识别
对于给定图片,我们按照先确定人脸位置,然后再对人脸进行分类的思路进行处理。这里确定人脸位置同样采用face_recognition
模块,裁剪得到对应的人脸图片,然后输入到人脸二分类模型,进行预测,进而得到不同肤色的人数。接下来按照以下步骤进行展开。
- 检测图片中人脸位置
- 绘制人脸边界框
- 图片左上角显示不同肤色的人数
五、视频识别
视频和图片类似,在图片识别的基础上多了一个获取视频单帧图片和按Q退出程序的步骤。
- 获取视频每一帧图片
- 检测图片中人脸位置
- 绘制人脸边界框
- 图片左上角显示不同肤色的人数
- 随着人脸移动、框也进行位置变动
- 按Q键退出程序
这里借助openCV
直接调取电脑摄像头