资讯专栏INFORMATION COLUMN

人脸检测+人体检测C++ Android实现

马龙驹 / 3191人阅读

摘要:原始代码使用人脸数据集进行训练,仅支持了人脸检测,后经鄙人优化后,提高了人脸检测效果,并支持人脸关键点检测,人体检测。

人脸检测+人体检测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)依赖库

# pull 3rdparty(TNN,base-utils) submodulegit submodule initgit submodule update
  • 配置OpenCV

推荐opencv-4.3.0

mkdir buildcd buildcmake -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-devsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EFecho "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.listsudo apt-get updatesudo 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 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.ucloud.cn/yun/122308.html

相关文章

  • Android 中使用 dlib+opencv 实现动态人脸检测

    摘要:概述完成相机预览功能以后,在此基础上我使用与库做了一个关于人脸检测的。该在相机预览过程中对人脸进行实时检测,并将检测到的人脸用矩形框描绘出来。本文采用的是中的是方法对人脸进行检测,其检测效果要好于。1 概述 完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo。该 demo 在相机预览过程中对人脸进行实时检测,并将检测到的人...

    LeviDing 评论0 收藏0
  • 虹软人脸识别 - ArcFace SDK介绍及使用注意事项

    摘要:引擎的多线程使用单个引擎的同一功能模块中的算法功能函数不支持多线程调用,且调用过程中不能进行销毁。若需多线程调用,需要创建多个引擎。 很多朋友在开发人脸识别系统的时候,会遇到各种各样的问题,现在我们以安卓平台使用虹软的免费离线人脸识别SDK开发为例,给大家介绍一下如何开发一个带有图片的人脸检测、视频画面的人脸属性检测、人脸注册识别等功能的人脸识别系统。 一、获取SDK 1.进入ArcF...

    eternalshallow 评论0 收藏0
  • 持续更新免费的API,做一个API的搬运工

    摘要:为了方便广大的开发者,特此统计了网上诸多的免费,为您收集免费的接口服务,做一个的搬运工,以后会每月定时更新新的接口。将长段中文切词分开。 为了方便广大的开发者,特此统计了网上诸多的免费API,为您收集免费的接口服务,做一个api的搬运工,以后会每月定时更新新的接口。有些接口来自第三方,在第三方注册就可以成为他们的会员,免费使用他们的部分接口。 百度AccessToken:针对HTTP ...

    Shihira 评论0 收藏0
  • Mediapipe入门——搭建姿态检测模型并实时输出人体关节点3d坐标

    摘要:大有用武之地,可以做物体检测自拍分割头发分割人脸检测手部检测运动追踪,等等。它将尝试在第一张图像中检测最突出的人,并在成功检测后进一步定位姿势和其他地标。默认为来自人员检测模型的最小置信值,用于将检测视为成功。 ...

    不知名网友 评论0 收藏0
  • Android NDK和OpenCV整合开发 (1) 环境搭建

    摘要:和整合开发环境搭建第一部分搭建环境注以下所有下载的都保存在虚拟机的目录下,也可以到百度网盘下载,地址是,不同版本的配置方式可能有些变化,如果不是很清楚版本问题的话,推荐使用虚拟机中使用的版本配置环境下载,虚拟机中下载的版本是下载之后解压即可 Android NDK和OpenCV整合开发 (1) 环境搭建 ##### 第一部分 搭建环境 [注:以下所有下载的sdk都保存在虚拟机的/h...

    xcold 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<