跳到正文
Hacker News· olesha-ai·· 9 天前AI 评分30

Fruit Inspector 0.10.0:用 Nim 在老旧 CPU 上实现 40 FPS 实时 YOLO 跟踪

Show HN: Fruit Inspector – Real-time YOLO tracking at 40 FPS on old CPUs via Nim

AI 导读

Fruit Inspector 0.10.0 发布,这是一个用 Nim 编写、基于 ONNX Runtime 的传送带水果质检工具,在无独显的 Intel i5-11400 上推理循环可达约 100–130 fps,摄像头预览约 30 fps。

正文 · AI 翻译

构建 0.10.0 · Windows x64 · Nim · ONNX Runtime(CPU / OpenVINO / CUDA 通过 settings.json)· 线体工位

Fruit Inspector 是传送带检测:水果在皮带上移动;质量仅在控制区内分级,而非画面中的任意位置。

EdgeInfer:https://github.com/olesha-ai/edgeinfer-eval


图片

demo

processor

speed

测试平台:Intel i5-11400,32 GB RAM,无独立 GPU,USB 摄像头 1920×1080。
ORT CPU EP:推理循环约为 ~100–130 fps(见 speed.jpg)。
摄像头预览约 30 fps —— 这是摄像头限制,而非推理限制。


思路

在产线上,你不会在“苹果恰好出现在画面中的任何位置”对它分级。你是在控制区——皮带上一个固定位置——对它分级。

图像使用 3×3 网格。中心格 (C) 即控制区:

  • 在产线上检测、跟踪并保持稳定 ID(目前最多两个苹果);
  • 焦点——最靠近格 C 的苹果;它离开 C 后——对下一个 ID 保持粘性焦点;新检测不会抢走焦点;
  • Cat (LightGBM)——仅在焦点苹果的中心位于 C 内时运行;
  • 流水线:YOLOX (640) → ROI 精修 (256) → 44 个特征 (fruit_features) → Cat → 屏幕上显示 GOOD / BAD。

工位行为

  • 不沿皮带进行全画面追踪——我们只处理格 C 和一个 ID 队列;
  • 当苹果朝 C 移动时——仅检测和跟踪,不运行 Cat;
  • 在 C 内——收集特征并给出判定;
  • 离开 C——粘性切换到下一个 ID,重复。

trig

在桌面上,苹果一进入 C,Cat 就启动。在真实皮带上这还不是最终方案:水果仍可能移动、滚动、弹跳——画面已在区域内,但物体尚未准备好分级。在工厂现场,时机不同:停止、静止、准备拍摄。

trig 是为此打下的基础。不是按坐标瞄准,而是一个工位信号:物体就绪——对它分级。检测器通过网络发送判定结果(GOOD / BAD 和 ID);trig 显示结果,并将逐步成为产线指令:停止该段 → 通知模型 → 获取等级。归档中已包含作为 LAN 客户端的 trig;完整链路“就绪 → 指令 → Cat”是下一步。


技术栈

  • Nim、ImGui (GLFW)
  • ONNX Runtime——提供程序在 settings.json 中:cpu、openvino、cuda
  • YOLOX-nano + LightGBM(Cat ONNX)
  • fruit_features.dll + features.json 紧邻 Cat
  • 苹果裁剪包:model/apple/det.onnx、cat.onnx、features.json

zip 中包含的内容

  • Fruit_Inspector.exe
  • fruit_features.dll
  • lib/cpu/、lib/openvino/(如包含则还有 lib/cuda/)
  • model/apple/
  • settings.json
  • trig.exe——LAN 客户端(见 trig)
  • licenses/

settings.json

该文件位于 exe 旁边。归档中的值可能来自我的桌面——请使用你自己的值。

引擎:ort_provider、ort_intra_threads、ort_inter_threads、openvino_*(使用 OpenVINO 时)。

模型和摄像头:crop_pack、model、cat_model、camera_index、conf、iou、infer_main_tensor_size、infer_refine_tensor_size。

输出和日志:ip_addr、ip_port、memory_diag_enabled。

手动编辑该文件,或使用 Settings → Apply。


运行

  1. 在本地解压。
  2. 将 lib/、model/、fruit_features.dll 和 settings.json 放在 Fruit_Inspector.exe 旁边。
  3. 设置 camera_index 和 ort_provider。
  4. 如果想在 stdout 上看到 [infer] fps 行,请从 cmd 运行。
  5. UI 中的 START / STOP;Esc 退出前会询问。

许可证

测试、教学、研究、反馈——可以。
本许可证下的商业生产——不可以。
全文:LICENSE.md、licenses/Fruit_Inspector_LICENSE.md。
第三方组件:licenses/THIRD_PARTY.md。请勿从 zip 中删除 licenses/ 文件夹。

商业联系:olesha-ai。

Intel、OpenVINO、Microsoft、Megvii 及其他名称均为其各自所有者的商标。


olesha-ai

来源:Hacker News · github.com