更新记录

1.0.0(2026-08-28)

  • 支持 Android / iOS / HarmonyOS NEXT 三端设备端本地目标检测,图片不出端
  • 基于 ONNX Runtime 1.18.0(Android / iOS)与 MindSpore Lite(HarmonyOS NEXT)推理
  • 兼容 YOLO11n / YOLOv8n 模型(模型文件由使用方提供,非插件内置),支持基于 YOLO11n / YOLOv8n 架构训练的自定义模型
  • 提供 initModel / detect / releaseModel 三个核心 API
  • 支持配置输入尺寸、CPU 线程数、GPU/NNAPI 硬件加速
  • 支持自定义置信度阈值与 NMS IoU 阈值
  • 内置 COCO 80 类标签,未传 labels 时按输出通道数自动匹配
  • 动态解析 YOLO 标准输出张量 [1, 4 + C, N],坐标自动还原至原图尺寸
  • 统一跨平台错误码与错误消息(JonYoloError

平台兼容性

uni-app(3.8.2)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- × × - 7.0 12 5.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

jon-yolo

YOLO 目标检测 UTS 插件,基于 ONNX Runtime(Android / iOS)与 MindSpore Lite(HarmonyOS NEXT)实现设备端本地推理,兼容 YOLO11n / YOLOv8n 模型。模型文件由使用方提供(非插件内置),插件负责加载与推理,无需联网。

特性

  • 三端覆盖:Android、iOS、HarmonyOS NEXT 一套代码调用,均为设备端本地推理,图片不出端
  • 模型外置:插件不内置模型,模型文件由使用方提供,放入工程即可运行
  • 标准 YOLO 输出解析:支持动态输出张量 [1, 4 + C, N] 解析,自动适配 80 类(COCO)及自定义类别
  • 内置后处理:置信度阈值过滤 + 同类目标 NMS(非极大值抑制),坐标自动还原到原图像素尺寸
  • 参数可调:输入尺寸、CPU 线程数、GPU/NNAPI 硬件加速、置信度阈值、IoU 阈值均可配置
  • 统一错误体系:跨平台统一错误码与错误消息(JonYoloError
  • 资源自动管理:重复初始化自动释放旧会话,推理结束自动回收 Bitmap / PixelMap 内存

平台兼容性

平台 最低版本 推理引擎 模型格式
Android Android 7.0(minSdk 24) ONNX Runtime 1.18.0(Maven) .onnx
iOS iOS 12.0 ONNX Runtime 1.18.0(CocoaPods) .onnx
HarmonyOS NEXT HarmonyOS NEXT 5.0(API 12+) MindSpore Lite(系统能力) .ms

Web / 小程序平台不支持本地神经网络推理,调用接口将直接抛出 NOT_INITIALIZED 或由业务侧拦截。

环境要求

  • HBuilderX 3.6.8+(鸿蒙平台需 HBuilderX 4.22+)
  • uni-app Vue3 工程(Vue2 未验证)
  • App 平台需在真机或自定义基座中运行(依赖原生三方库,标准基座不含)

安装

  1. jon-yolo 目录放入工程的 uni_modules/ 目录下(或从 DCloud 插件市场直接导入)
  2. 工程 manifest.json 中勾选需要的 App 模块(默认即可,无需额外配置)

快速开始

import { initModel, detect, releaseModel } from '@/uni_modules/jon-yolo';

// 1. 初始化模型(Android/iOS 传物理绝对路径,鸿蒙传 rawfile 相对路径或沙箱绝对路径)
const success = await initModel({
    modelPath: '/storage/emulated/0/Android/data/.../models/yolo11n.onnx',
    labels: [],        // 不传或传空数组时,80 类模型自动匹配内置 COCO 标签
    inputSize: 640,    // 可选,默认 640
    numThreads: 4,     // 可选,默认 4
    useGpu: false      // 可选,默认 false(Android 下尝试开启 NNAPI 加速)
});

// 2. 执行检测
const result = await detect({
    imagePath: '/storage/emulated/0/.../test.jpg',
    threshold: 0.25,      // 可选,置信度阈值,默认 0.25
    iouThreshold: 0.45    // 可选,NMS IoU 阈值,默认 0.45
});

// result.items 为检测到的目标列表
result.items.forEach((item) => {
    console.log(item.label, item.score, item.box); // 例如 person 0.92 {x1,y1,x2,y2}
});

// 3. 页面/组件销毁时释放模型内存
releaseModel();

API 文档

initModel(options): Promise<boolean>

初始化并加载模型。重复调用会自动释放上一次的模型会话。

参数 类型 必填 默认值 说明
modelPath string - 模型文件路径。Android/iOS 为物理绝对路径;鸿蒙支持 rawfile 相对路径(如 models/yolo11n.ms),插件会自动提取到沙箱缓存
labels string[] [] 自定义类别标签,必须按训练时 data.yaml 的类别顺序(0, 1, 2...)填写。传空数组时:80 类模型自动匹配内置 COCO 标签,其余模型按 class_{id} 兜底
inputSize number 640 模型输入的正方形尺寸,需与导出模型一致
numThreads number 4 推理 CPU 线程数
useGpu boolean false 是否尝试硬件加速(Android 使用 NNAPI,不可用时自动回退 CPU)

成功返回 true;失败抛出 JonYoloError

detect(options): Promise<DetectResult>

对指定图片执行目标检测,必须先 initModel

参数 类型 必填 默认值 说明
imagePath string - 待检测图片的物理绝对路径(file:// 前缀会自动剥离)
threshold number 0.25 置信度阈值,范围 0.0 ~ 1.0
iouThreshold number 0.45 NMS 重叠抑制阈值,范围 0.0 ~ 1.0

DetectResult

字段 类型 说明
items DetectItem[] 检测到的目标列表(已按置信度降序 + NMS 过滤)
inferenceTime number 推理耗时(毫秒),含预处理与后处理
imageWidth number 原图宽度
imageHeight number 原图高度

DetectItem

字段 类型 说明
classId number 类别索引
label string 类别名称
score number 置信度,0.0 ~ 1.0
box DetectBox 目标边界框,基于原图实际像素尺寸

DetectBox

字段 类型 说明
x1 / y1 number 左上角坐标
x2 / y2 number 右下角坐标

releaseModel(): void

释放模型与推理引擎资源,建议在页面 onUnmounted / onHide 中调用。

错误码

统一错误类为 JonYoloError(继承 UniErrorerrSubjectjon-yolo),可通过 err.errCode / err.errMsg 获取详情。

错误码 常量 说明
0 SUCCESS 成功
10001 MODEL_NOT_FOUND 模型文件未找到,请检查路径是否正确
10002 MODEL_INIT_FAILED 模型初始化失败,可能是不支持的模型格式
10003 IMAGE_NOT_FOUND 待检测图片文件不存在
10004 IMAGE_DECODE_FAILED 图片解码失败,请确认文件是否为合法图像格式
10005 INFERENCE_FAILED 神经网络推理过程发生异常
10006 NOT_INITIALIZED 检测引擎尚未初始化,请先调用 initModel
10007 INVALID_PARAM 传入参数非法
10008 INVALID_TENSOR_SHAPE 模型输出张量格式不符合 YOLO 标准(预期维度 [1, 4+C, N]

模型准备

Android / iOS(ONNX)

  1. 准备 YOLO11n / YOLOv8n 模型并导出为 ONNX 格式(推荐导出时固定输入尺寸,如 640x640
  2. .onnx 文件放入工程 static/models/ 目录
  3. 运行 / 打包时通过 plus.io.convertLocalFileSystemURL() 将相对路径转换为物理绝对路径后传入 initModel

HarmonyOS NEXT(MindSpore Lite)

  1. 使用 MindSpore Lite 转换工具将 ONNX 模型转为 .ms 格式
  2. .ms 文件放入鸿蒙资源目录 harmony-configs/entry/src/main/resources/rawfile/models/
  3. 直接传入相对路径(如 models/yolo11n.ms)即可,插件首次加载会自动提取到应用沙箱缓存目录

自定义模型

  • 自定义模型须基于 YOLO11n / YOLOv8n 架构训练并导出,不支持 YOLOv5 等其他 YOLO 架构
  • 按训练时 data.yaml 中的类别顺序填写 labels 数组(索引必须与 classId 对应)
  • 插件按输出通道数 C 自动推导类别数量,支持任意类别数
  • 输出张量需满足 YOLO 标准格式 [1, 4 + C, N](N 为预测框数量,如 8400)

性能建议

  • 本插件面向 YOLO11n / YOLOv8n(nano 尺寸) 模型设计,建议直接使用官方预训练权重或在其基础上训练
  • numThreads 建议 4,高端设备可尝试 8
  • 高帧率场景可降低 inputSize(如 320)或开启 useGpu 加速
  • 推理时图片路径请使用物理绝对路径,避免二次 IO 开销

更新日志

详见 changelog.md

许可证

请遵循插件市场发布时声明的授权协议。商用请保留插件版权信息。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

插件自身不申请额外系统权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据,所有推理均在设备端本地完成

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无广告

暂无用户评论。