又快又好,行人检测(人体检测)和人脸检测和人脸关键点检测(C++/Android)
目录
又快又好,行人检测(人体检测)和人脸检测和人脸关键点检测(C++/Android)
1.前言
2.项目说明
(1)数据集
(2)模型训练
(3)依赖库
3. JNI接口
4. 人脸人体检测效果展示
5.源码下载
6.人体关键点Demo(Android版本)
1.前言
考虑到人脸人体检测的需求,本人开发了一套轻量化的,高精度的,可实时的人脸/人体检测Android Demo,主要支持功能如下:
- 支持人脸检测算法模型
- 支持人脸检测和人脸关键点检测(5个人脸关键点)算法模型
- 支持人体检测(行人检测)算法模型
- 支持人脸和人体同时检测算法模型
所有算法模型都使用C++开发,推理框架采用TNN,Android通过JNI接口进行算法调用;所有算法模型都可在普通Android手机实时跑,在普通Android手机,CPU和GPU都可以达到实时检测的效果(CPU约25毫秒左右,GPU约15毫秒左右)
先看一些效果:
人脸关键点检测 | 人体检测 | 人脸+人体检测 |
Android Demo APP免费体检:
Android Demo APP源码下载地址:
2.项目说明
(1)数据集
人脸人体的数据都来源于网上开源的数据集,其中把WiderFace数据集作为人脸检测和人脸关键点检测的训练数据集;使用COCO的数据集person标签作为人体检测训练的数据
数据集 | 数据说明 |
WiderFace | WIDER FACE数据集是人脸检测的一个benchmark数据集,包含32203图像,以及393,703个标注人脸,其中,158,989个标注人脸位于训练集,39,496个位于验证集。每一个子集都包含3个级别的检测难度:Easy,Medium,Hard。这些人脸在尺度,姿态,光照、表情、遮挡方面都有很大的变化范围 下载地址:Download - Data Decorators/WIDER FACE | 格物钛,非结构化数据平台 |
COCO | COCO数据集是一个可用于图像检测(image detection),语义分割(semantic segmentation)和图像标题生成(image captioning)的大规模数据集。它有超过330K张图像(其中220K张是有标注的图像),包含150万个目标,80个目标类别(object categories:行人、汽车、大象等),91种材料类别(stuff categoris:草、墙、天空等),每张图像包含五句图像的语句描述,且有250,000个带关键点标注的行人。 |
(2)模型训练
训练代码请参考:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB ,一个基于SSD简化的人脸检测模型,很轻量化,整个模型仅仅1.7M左右,在普通Android手机都可以实时检测。
原始代码使用WiderFace人脸数据集进行训练,仅支持了人脸检测,后经鄙人优化后,提高了人脸检测效果,并支持人脸关键点检测,人体检测。数据集是WiderFace,VOC和COCO。
(3)依赖库
- TNN:GitHub - Tencent/TNN: TNN: developed by Tencent Youtu Lab and Guangying Lab, a uniform deep learning inference framework for mobile、desktop and server. TNN is distinguished by several outstanding features, including its cross-platform capability, high performance, model compression and code pruning. Based on ncnn and Rapidnet, TNN further strengthens the support and performance optimization for mobile devices, and also draws on the advantages of good extensibility and high performance from existed open source efforts. TNN has been deployed in multiple Apps from Tencent, such as Mobile QQ, Weishi, Pitu, etc. Contributions are welcome to work in collaborative with us and make TNN a better framework.https://github.com/Tencent/TNN
- OpenCV: Releases - OpenCV (推荐opencv-4.3.0)
- OpenCL: Choose & Download Intel® SDK for OpenCL™ Applications (GPU的支持)
- base-utils:GitHub - PanJinquan/base-utils: 集成C/C++ OpenCV 常用的算法和工具 (一些文件和图像处理的相关工具)
- 拉取子模块submodule(TNN,base-utils)库
- 配置OpenCV
推荐opencv-4.3.0
- 配置OpenCL(可选)
Android系统一般都支持OpenCL,Linux系统可参考如下配置:
- CMake配置说明
Linux OR Windows测试,
CMakeLists.txt
3. C++/Java接口
所有算法模型都使用C++开发,推理框架采用TNN,Android通过JNI接口进行算法调用
Java接口:
C++ JNI接口
4. 人脸人体检测效果展示
在普通Android手机上,CPU和GPU都可以达到实时检测(CPU约25毫秒左右,GPU约15毫秒左右), 下面是APP的检测效果,你可下载Android Demo APP真实体检一下哦~
APP | 模型选择 | 人脸检测 |
人脸关键点检测 | 人体检测 | 人脸+人体检测 |
5.Demo源码下载
Android Demo APP免费体检:
Android Demo APP源码下载地址:
6.人体关键点Demo(Android版本)
本项目Demo支持人脸关键点检测(5个人脸关键点),如果你需要人体关键点检测,请查看鄙人另一篇博客:2D Pose人体关键点实时检测(Python/Android /C++ Demo)_pan_jinquan的博客