人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)

人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)

目录

[人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)](#人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测))

[1. 前言](#1. 前言)

[2. 人脸检测和行人检测数据集说明](#2. 人脸检测和行人检测数据集说明)

[3. 人脸检测和人体检测检测模型](#3. 人脸检测和人体检测检测模型)

(1)模型训练

(2)将Pytorch模型转换ONNX和MNN模型

4.人脸检测和行人检测模型Android部署​​

[(1) Android端上部署模型](#(1) Android端上部署模型)

[(2) 一些异常错误解决方法](#(2) 一些异常错误解决方法)

[5. 人脸检测和行人检测效果](#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


更多项目《人脸检测和行人检测》系列文章请参考:

  1. 人脸检测和人体检测(行人检测)1:人脸检测和人体检测数据集(含下载链接)
  2. 人脸检测和行人检测2:YOLOv8 YOLO11 YOLO26 实现人脸检测和行人检测(含数据集和训练代码) https://blog.csdn.net/guyuealian/article/details/164620332
  3. 人脸检测和行人检测3:C/C++实现YOLOv8 YOLO11 YOLO26 人脸检测和人体检测(含源码,可实时检测) https://blog.csdn.net/guyuealian/article/details/164629582
  4. 人脸检测和行人检测4:Android实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测) 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

python 复制代码
# -*- 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模型

bash 复制代码
# 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接口调用

java 复制代码
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项目源码内容包含:

  1. 提供YOLOv8n / YOLO11n / YOLO26n版本的人脸检测和人体检测模型(MNN),
  2. Android Demo源码支持CPU和GPU运行,CPU(4线程)YOLO26n 约40ms左右,GPU OpenCL约20ms左右
  3. Android Demo支持图片,视频,摄像头测试
  4. OpenCV+base-utils+MNN所有依赖库都已经配置好,可直接build构建APP运行
相关推荐
与海boy2 小时前
Prompt模版
android·prompt
FlightYe2 小时前
音视频修炼之编码器(一):AVC、HEVC编码器内部
android·linux·c++·音视频
智购科技无人售货机工厂3 小时前
2026自动售货机AI智能体架构:从47个小模型到33.7亿Token的工程实践~YH
android·人工智能·驱动开发·单片机·pandas
AI吃大瓜3 小时前
人脸检测和行人检测3:C/C++实现YOLOv8 YOLO11 YOLO26人脸检测和人体检测(含源码,可实时检测)
c++·yolov8·人脸检测·人体检测·yolo11·yolo26
嵩风抚4 小时前
一款HK银行APP的业务+技术
android·flutter·react native·html5
00后程序员张6 小时前
怎么用 Egret(白鹭引擎)打包 iOS 应用并上架 App Store?
android·ios·小程序·https·uni-app·iphone·webview
mmsx6 小时前
MapLibre 实战 09|Bug 单写着"地图被风刮走了":一个瓦片源工厂,是三个线上事故换来的
android·前端·开源
一技安身6 小时前
【信创】统信UOS 银河麒麟离线部署Python3.11完整方案
android·java·python3.11
墨狂之逸才7 小时前
Android WebView 初始缩放:什么时候该设置 100%,什么时候不要设置
android