Skip to content

x-yolo-s YOLO目标检测(单独付费)

通用 YOLO 目标检测。内置轻量 YOLOv8n(COCO80),支持静态图片检测、相机实时弹层、外部模型 zip 导入。换模型或标签即可扩展到垂直场景。检测全程在设备本地完成。

兼容性

HarmonyIOSAndroidWEB小程序
支持支持支持不支持不支持

调用

ts
import { loadModel, detect, openCamera, importModel } from "@/uni_modules/x-yolo-s"

loadModel({
  success: (res) => {
    console.log(res.labelCount, res.modelRoot)
  }
})

detect({
  imagePath: photoPath,
  labelFilter: ["person", "car"],
  success: (res) => {
    console.log(res.detections.length, res.durationMs)
  }
})

openCamera({
  cameraPosition: "back",
  onDetect: (evt) => {
    // trackId 对同一物体跨帧稳定;isNew 只在该目标首次确认时为 true。
    // 按物品计数只统计 isNew 的结果即可防止重复报数。
    evt.detections.forEach((d) => {
      if (d.isNew == true) {
        console.log("新目标", d.trackId, d.label)
      }
    })
  },
  onCapture: (evt) => {
    console.log(evt.imagePath)
  },
  onClose: () => {}
})

相机采集、推理和绘框都在原生弹层内完成,帧不经过 uvue。业务只收检测事件和抓拍路径。

实时弹层布局与其它相机插件一致:顶栏关闭 / 标题 / 闪光,中间预览,底部居中圆形快门(继续 / 停止)。识别到物体时在快门上方弹出信息条,约 2 秒自动消失;onDetect 仍按 detectInterval 持续回调,方便记录。

实时链路为「检测 + 跟踪 + 插值渲染」三段式:C++ 侧多目标跟踪器(IoU 匹配 + 速度外推 + EMA 平滑)给每个物体分配稳定 trackId,短暂丢帧时框滑行不闪烁;原生 overlay 以 60fps 对检测结果插值渲染,框平滑跟随物体,不受检测帧率限制。跟踪与模型无关,换模型不影响 trackId 语义。

推理后端:Android / 鸿蒙默认尝试启用 ORT 内置 XNNPACK EP(ARM 卷积加速,失败自动回退默认 CPU EP),iOS 用默认 CPU EP。实际生效后端见 getRuntimeInfo().epxnnpack / cpu / none)。

类别过滤:detect / openCameralabelFilter: ["person","cup"] 即只检测这些类别。过滤在 C++ 解码层完成(先全类 argmax 定类再按类丢弃,与 Ultralytics classes 参数同语义),非目标类不进 NMS、不占 maxDet 名额、不进跟踪器、不绘框不回调。注意:模型单次推理耗时不变(YOLO 一次前向输出全部类别),收益在后处理更轻、跟踪与计数聚焦目标类、画面与回调干净无干扰。

方法

名称需要说明
loadModel可选 modelRootfiles、阈值加载模型;不传 modelRoot 用内置模型
unloadModel可选回调卸载模型
detectimagePath,可选 labelFilter静态图片检测,返回原图像素坐标框
openCamera可选相机与节流参数打开原生实时检测弹层
importModelzipPath,可选 targetNameoverwrite解压模型 zip,返回可给 loadModel 的目录
setOptions可选阈值运行中改置信度 / IoU / 最大框数
getRuntimeInfo同步返回平台、是否就绪、pipelineReady、推理后端 ep
getState返回 idle / loading / ready / error

参数

loadModel

字段说明默认
modelRoot模型目录;空则释放内置模型内置
files.model检测 onnx 文件名model.onnx
files.labels标签表文件名,缺失回退 COCO80labels.txt
inputSizeletterbox 边长640
confidenceThresh置信度阈值0.25
iouThreshNMS IoU0.45
maxDet单帧最多框,0=不限制100
numThreadsORT 线程数Android/鸿蒙 4,iOS 2

detect

字段说明默认
imagePath本地图片路径;Android 支持 content://必填
labelFilter只检测这些类别,如 ["person","cup"](label 或 classId)全部

openCamera

字段说明默认
cameraPositionfront / backback
torch初始闪光灯false
detectInterval相邻两次推理最小间隔 ms;框由 overlay 60fps 插值跟随,不必拉高检测帧率80
drawBox原生 overlay 绘框true
labelFilter只检测这些类别,如 ["person","cup"]全部
confidenceThresh覆盖当前阈值沿用
onDetect / onCapture / onClose弹层事件

importModel

zip 内需含 model.onnx,可选 labels.txt。解压目录可直接作为 loadModel({ modelRoot })

内置模型

首次使用前把 YOLOv8n 放到插件里。导出必须钉 opset=19:鸿蒙预编译 ORT 是 1.16,官方只保证 ai.onnx 到 opset 19,默认 ultralytics 会出 opset 20 导致 loadModel 1006。

bash
bash uni_modules/x-yolo-s/native-src/scripts/download_model.sh

再按平台编译原生核心:

bash
bash uni_modules/x-yolo-s/native-src/android/build_android.sh
bash uni_modules/x-yolo-s/native-src/ios/build_ios.sh
bash uni_modules/x-yolo-s/native-src/harmony/build_oh.sh

修改 config.json 或原生 so / framework 后需要重新打自定义基座。

最近更新