人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)
目录
人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)
1. 前言
2. 人脸检测和行人检测数据集说明
3. 人脸检测和人体检测检测模型
(1)模型训练
(2)将Pytorch模型转换ONNX和MNN模型
4.人脸检测和行人检测模型Android部署
(1) Android端上部署模型
(2) 一些异常错误解决方法
5. 人脸检测和行人检测效果
6.项目源码下载
1. 前言
这是项目《人脸检测和行人检测》系列之《Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测》;本篇主要分享将Python训练后的YOLOv8 YOLO11 YOLO26的人脸和行人(人体)检测模型移植到Android平台。我们将开发一个简易的、可实时运行的人脸人体(行人)检测Android Demo。
Android版本的人脸检测和行人检测,模型推理支持CPU和GPU加速,在GPU(OpenCL)加速下,可以达到实时的检测效果,CPU(4线程)约40ms左右,GPU约20ms左右 ,基本满足业务的性能需求。下表格给YOLOv8n / YOLO11n / YOLO26n计算量和参数量以及其人脸检测和行人检测精度:
| 模型 | input-size | params(M) | GFLOPs | mAP_0.5 | mAP_0.5:0.95 |
| YOLOv8n | 416×416 | 3.15M | 3.7 | 0.97046 | 0.79315 |
| YOLO11n | 416×416 | 2.62M | 2.7 | 0.97001 | 0.79531 |
| YOLO26n | 416×416 | 2.41M | 2.3 | 0.97002 | 0.79009 |
先展示一下Android Demo人脸检测和行人(人体)检测的效果

Android人脸和行人(人体)APP Demo体验:https://download.csdn.net/download/guyuealian/93441570
【尊重原创,转载请注明出处】https://blog.csdn.net/guyuealian/article/details/164629596
更多项目《人脸检测和行人检测》系列文章请参考:

如果需要进行人像分割,实现一键抠图效果,请参考文章:《一键抠图Portrait Matting人像抠图 (C++和Android源码)》
![]() |
![]() |
![]() |
2. 人脸检测和行人检测数据集说明
目前收集VOC,COCO和MPII数据集,总数据量约10W左右,可用于人体(行人)检测模型算法开发。这三个数据集都标注了人体检测框,但没有人脸框,考虑到很多项目业务需求,需要同时检测人脸和人体框;故已经将这三个数据都标注了person和face两个标签,以便深度学习目标检测模型训练。
关于人脸人体检测数据集使用说明和下载,详见另一篇博客说明:请参考《人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)》:人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)

3. 人脸检测和人体检测检测模型
(1)模型训练
人脸检测和人体检测训练过程,请参考:《人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26 实现人脸检测和行人检测(含数据集和训练代码)》https://blog.csdn.net/guyuealian/article/details/164620332
下表格给YOLOv8n / YOLO11n / YOLO26n计算量和参数量以及其人脸检测和行人检测精度:
| 模型 | input-size | params(M) | GFLOPs | mAP_0.5 | mAP_0.5:0.95 |
| YOLOv8n | 416×416 | 3.15M | 3.7 | 0.97046 | 0.79315 |
| YOLO11n | 416×416 | 2.62M | 2.7 | 0.97001 | 0.79531 |
| YOLO26n | 416×416 | 2.41M | 2.3 | 0.97002 | 0.79009 |
(2)将Pytorch模型转换ONNX和MNN模型
训练好模型后,你需要将Pytorch模型转换为ONNX和MNN模型,转换脚本工具export.py:
需要安装依赖库: pip install onnx onnxsim onnxruntime mnn
# -*- coding: utf-8 -*-
import os
import argparse
import numpy as np
from ultralytics import YOLO
def export_model(weights, format="mnn", imgsz=640, dynamic=False, half=False, int8=False):
"""
https://docs.ultralytics.com/modes/export/
:param format: onnx,ncnn,mnn,rknn
:return:
"""
model = YOLO(weights)
kwargs = {"dynamic": dynamic, "half": half, "int8": int8, "name": "", "imgsz": imgsz}
if format in ['mnn', 'rknn']: kwargs["dynamic"] = False # argument 'dynamic' is not supported for format='mnn'
if format in ['rknn']:
file = model.model_name
dirn, name = os.path.dirname(file), os.path.basename(file).split('.')[0]
os.makedirs(os.path.join(f"{name}_rknn_model", dirn), exist_ok=True) # 创建rknn模型目录
# TODO RKNN默认float16,所以half=False,可支持int8,但validate_args会报错,需要修改源码不检查
kwargs.update(half=False, int8=True, name="rk3588", source="./images.txt")
print("export format :{}, kwargs:{}".format(format, kwargs))
file = model.export(format=format, simplify=True, opset=15, **kwargs)
print("export file :{}".format(file))
return file
def parse_opt():
# weights = "data/model/pretrained/yolov8n.pt"
weights = "data/model/pretrained/yolo11n.pt"
# weights = "data/model/pretrained/yolo26n.pt"
parser = argparse.ArgumentParser()
parser.add_argument('–weights', type=str, default=weights, help='model file')
parser.add_argument('–imgsz', type=int, default=416, help='input image size')
parser.add_argument('–format', type=str, default="onnx", help='save result image')
opt = parser.parse_args()
return opt
if __name__ == "__main__":
"""
python libs/export.py –weights "data/model/pretrained/yolo11n.pt" –imgsz 416 –format onnx
"""
opt = parse_opt()
export_model(opt.weights, format=opt.format, imgsz=opt.imgsz)
在终端运行执行命令,转换ONNX和MNN模型
# TODO 转换为onnx模型
python libs/export.py –weights "data/model/pretrained/yolo11n.pt" –imgsz 416 –format onnx
# TODO 转换为mnn模型
python libs/export.py –weights "data/model/pretrained/yolo11n.pt" –imgsz 416 –format mnn
4.人脸检测和行人检测模型Android部署
(1) Android端上部署模型
项目实现了Android版本的人脸检测和行人检测Demo,部署框架采用MNN,支持多线程CPU和GPU加速推理,在普通手机上可以实时处理。Android源码核心算法部分均采用C++实现,上层通过JNI接口调用
package com.cv.dl.model;
import android.graphics.Bitmap;
public class Detector {
static {
System.loadLibrary("cvdl-lib");
}
/***
* 初始化检测模型
* @param root:模型文件的根目录,放在assets文件夹下
* @param det_model: 检测模型
* @param rec_model: 识别模型(可选)
* @param model_type:模型类型
* @param num_thread:开启线程数
* @param useGPU:是否开启GPU进行加速
*/
public static native void init(String root, String det_model, String rec_model, int model_type, int num_thread, boolean useGPU);
/***
* 进行检测(用于静态图)
* @param bitmap 图像(bitmap),ARGB_8888格式
* @param score_thresh:置信度阈值
* @param iou_thresh: IOU阈值
* @return
*/
public static native FrameInfo[] detect(Bitmap bitmap, float score_thresh, float iou_thresh);
}
如果你想在这个Android Demo部署你自己训练的YOLO模型,你可将训练好的Pytorch模型转换成TNN模型,然后把TNN模型代替你模型即可。
(2) 一些异常错误解决方法
项目开发常见的问题,请参考:Android项目常见问题解决办法
5. 人脸检测和行人检测效果
【Android APP体验】https://download.csdn.net/download/guyuealian/93441570
APP在普通Android手机上可以达到实时的人脸检测和行人检测效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。

6.项目源码下载
【Android APP体验】https://download.csdn.net/download/guyuealian/93441570
如需下载项目源码,请关注【AI吃大瓜】,回复【人脸检测和人体检测】即可下载
Android项目源码内容包含:







