更新记录
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。
许可证
请遵循插件市场发布时声明的授权协议。商用请保留插件版权信息。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 2
赞赏 0
下载 12540767
赞赏 1947
赞赏
京公网安备:11010802035340号