人臉檢測+人體檢測C++ Android實作
本博客將實作C++版本的人臉檢測,人臉關鍵點檢測,人體檢測,人臉+人體檢測,推理框架采用TNN,在普通Android手機,CPU和GPU都可以達到實時檢測的效果
人臉檢測+人臉關鍵點檢測+人體檢測Android Demo APP(非原始碼,僅供學習交流)
鏈接: https://pan.baidu.com/s/1By43I1DbMa0gBPLObtPZMQ 提取碼: msnr
尊重原創,轉載請注明出處:https://panjinquan.blog.csdn.net/article/details/120688804
1.專案說明
(1)訓練
訓練代碼請參考:https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB ,一個基于SSD簡化的人臉檢測模型,很輕量化,整個模型僅僅1.7M左右,在普通Android手機都可以實時檢測,
原始代碼使用WiderFace人臉資料集進行訓練,僅支持了人臉檢測,后經鄙人優化后,提高了人臉檢測效果,并支持人臉關鍵點檢測,人體檢測,資料集是WiderFace,VOC和COCO,
(2)端上部署
原始代碼已經支持MNN和NCNN
(3)依賴庫
- TNN:https://github.com/Tencent/TNN
- OpenCV: Releases - OpenCV (推薦opencv-4.3.0)
- OpenCL: Choose & Download Intel? SDK for OpenCL? Applications (GPU的支持)
- base-utils:https://github.com/PanJinquan/base-utils (一些檔案和影像處理的相關工具)
- 拉取子模塊submodule(TNN,base-utils)庫
# pull 3rdparty(TNN,base-utils) submodule
git submodule init
git submodule update
- 配置OpenCV
推薦opencv-4.3.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install
- 配置OpenCL(可選)
Android系統一般都支持OpenCL,Linux系統可參考如下配置:
# 參考安裝OpenCL: https://blog.csdn.net/qq_28483731/article/details/68235383,作為測驗,安裝`intel cpu版本的OpenCL`即可
# 安裝clinfo,clinfo是一個顯示OpenCL平臺和設備的軟體
sudo apt-get install clinfo
# 安裝依賴
sudo apt install dkms xz-utils openssl libnuma1 libpciaccess0 bc curl libssl-dev lsb-core libicu-dev
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update
sudo apt-get install mono-complete
# 在intel官網上下載了intel SDK的tgz檔案,并且解壓
sudo sh install.sh
- CMake配置說明
Linux OR Windows測驗,
CMakeLists.txt
# TNN set
set(TNN_OPENCL_ENABLE ON CACHE BOOL "" FORCE)
set(TNN_CPU_ENABLE ON CACHE BOOL "" FORCE)
set(TNN_X86_ENABLE ON CACHE BOOL "" FORCE)
set(TNN_QUANTIZATION_ENABLE OFF CACHE BOOL "" FORCE)
set(TNN_OPENMP_ENABLE ON CACHE BOOL "" FORCE) # Multi-Thread
add_definitions(-DTNN_OPENCL_ENABLE) # for OpenCL GPU
add_definitions(-DDEBUG_ON) # for WIN/Linux Log
add_definitions(-DDEBUG_LOG_ON) # for WIN/Linux Log
add_definitions(-DDEBUG_IMSHOW_OFF) # for OpenCV show
add_definitions(-DPLATFORM_LINUX)
# add_definitions(-DPLATFORM_WINDOWS)
2. 人臉人體檢測Demo
推理框架使用TNN進行部署,手擼Python轉C++實作人臉人體檢測推理程序,
下面是測驗代碼demo部分代碼
void test_face_person_detector() {
const int num_thread = 1;
DeviceType device = CPU;
// 人臉和關鍵點檢測
// const char *model_file = (char *) "../data/tnn/face_ldmks/rfb_landm_face_320_320_sim.opt.tnnmodel";
// const char *proto_file = (char *) "../data/tnn/face_ldmks/rfb_landm_face_320_320_sim.opt.tnnproto";
// ObjectDetectiobParam model_param = FACE_LANDMARK_MODEL;
// 人臉+人體檢測
// const char *model_file = (char *) "../data/tnn/face_person/rfb1.0_face_person_300_300_sim.opt.tnnmodel";
// const char *proto_file = (char *) "../data/tnn/face_person/rfb1.0_face_person_300_300_sim.opt.tnnproto";
// ObjectDetectiobParam model_param = FACE_PERSON_MODEL;//模型引數
// 人臉檢測
const char *model_file = (char *) "../data/tnn/face/rfb1.0_face_320_320.opt.tnnmodel";
const char *proto_file = (char *) "../data/tnn/face/rfb1.0_face_320_320.opt.tnnproto";
ObjectDetectiobParam model_param = FACE_MODEL;//模型引數
// 設定檢測閾值
const float scoreThresh = 0.5;
const float iouThresh = 0.3;
ObjectDetection *detector = new ObjectDetection(model_file,
proto_file,
model_param,
num_thread,
device);
string image_dir = "../data/test_image/person";
std::vector<string> image_list = get_files_list(image_dir);
for (string image_path:image_list) {
cv::Mat bgr_image = cv::imread(image_path);
if (bgr_image.empty()) continue;
FrameInfo resultInfo;
printf("init frame\n");
// 開始檢測
detector->detect(bgr_image, &resultInfo, scoreThresh, iouThresh);
// 可視化代碼
detector->visualizeResult(bgr_image, &resultInfo);
}
delete detector;
detector = nullptr;
printf("FINISHED.\n");
}
3. Android Demo效果
可以輕松移植到Android系統,在普通手機,CPU和GPU都可以達到實時檢測
人臉檢測+人臉關鍵點檢測+人體檢測Android Demo APP(非原始碼,僅供學習交流):
鏈接: https://pan.baidu.com/s/1By43I1DbMa0gBPLObtPZMQ 提取碼: msnr
這是APP的檢測效果:
| APP | 模型選擇 | 人臉檢測 |
![]() | ![]() | ![]() |
| 人臉關鍵點檢測 | 人體檢測 | 人臉+人體檢測 |
![]() | ![]() | ![]() |
4.人體關鍵點Demo(Android版本)
人體關鍵點檢測需要用到人體檢測,請查看鄙人另一篇博客:2D Pose人體關鍵點實時檢測(Python/Android /C++ Demo)_pan_jinquan的博客-CSDN博客

如果你覺得該帖子幫到你,還望貴人多多支持,鄙人會再接再厲,繼續努力的~

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309544.html
標籤:其他






