更新记录
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 平台需在真机或自定义基座中运行(依赖原生三方库,标准基座不含)
安装
- 将
jon-yolo 目录放入工程的 uni_modules/ 目录下(或从 DCloud 插件市场直接导入)
- 工程
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(继承 UniError,errSubject 为 jon-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)
- 准备 YOLO11n / YOLOv8n 模型并导出为 ONNX 格式(推荐导出时固定输入尺寸,如
640x640)
- 将
.onnx 文件放入工程 static/models/ 目录
- 运行 / 打包时通过
plus.io.convertLocalFileSystemURL() 将相对路径转换为物理绝对路径后传入 initModel
HarmonyOS NEXT(MindSpore Lite)
- 使用 MindSpore Lite 转换工具将 ONNX 模型转为
.ms 格式
- 将
.ms 文件放入鸿蒙资源目录 harmony-configs/entry/src/main/resources/rawfile/models/
- 直接传入相对路径(如
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。
许可证
请遵循插件市场发布时声明的授权协议。商用请保留插件版权信息。