rust-onnx-infer

csd
csd
昨天发布 /正在检测是否收录...
广告 广告 广告 广告 广告 广告 广告 广告 广告 广告

项目介绍

Production-grade ONNX Runtime inference in pure Rust — from YOLO detection and SAM segmentation to Grounding DINO, BiRefNet matting, ArcFace face recognition and RoMaV2 matching. Every engine behind one unified sync/async API, compiled into a single self-contained binary.

项目详情

rust-onnx-infer

一个 crate,40+ 视觉引擎,零原生依赖。

基于 ONNX Runtime 的生产级纯 Rust 推理库 —— 从 YOLO 检测、SAM 分割到 Grounding DINO
开放词表、BiRefNet 抠图、ArcFace 人脸识别、RoMaV2 特征匹配,40+ 引擎共享同一套
同步/异步 API,编译产物为单个自包含可执行文件。

crates.io
docs.rs
License: MIT OR Apache-2.0
Rust

English | 简体中文


亮点

  • 静态链接 ONNX Runtime —— 基于 ort + 预编译静态库,产物为完全自包含的可执行文件,
    无需 LD_LIBRARY_PATH、无需环境配置、无运行时下载。
  • 纯 Rust 图像处理栈 —— image + fast_image_resize + 内置颜色空间/形态学/阈值等原语,
    无 OpenCV、无 C++ 工具链、无跨编译负担。
  • 一套 API 打通所有引擎 —— 同步 predict / predict_batch + tokio 原生
    predict_async / predict_batch_async,40+ 引擎接口完全一致。
  • 类别标签零配置 —— 自动从 ONNX 元数据解析类别名(YOLO names / labels /
    categories,或逗号分隔格式)。
  • 内置 SAHI 切片推理 —— 大图小目标场景提升召回,支持 GREEDYNMM / NMM / NMS 合并
    与 IoU / IOS 度量。
  • GPU 加速 + 优雅回退 —— 执行提供器由引入方按目标平台通过 feature 启用:macOS 加
    coreml(Apple Silicon 可走 ANE/NPU)、NVIDIA 加 cuda,另有 tensorrt / directml /
    openvino / rocm;未启用对应 feature 时该设备类型自动回退 CPU。

安装

cargo add rust-onnx-infer

或在 Cargo.toml 中添加:

[dependencies]
rust-onnx-infer = "0.1"

快速上手

use rust_onnx_infer::{core::factory::create_detection_engine, DeviceType, Image};

let image = Image::load("input.jpg")?;
let engine = create_detection_engine("yolo11n.onnx", DeviceType::Cpu, 0.5, 0.45)?;
let detections = engine.predict(&image)?;
for d in &detections {
println!("{d}");
}

异步只需一行(tokio):

let out = engine.predict_async(&img).await?;

运行完整示例:

cargo run --example onnx_inference_example

支持的模型

类别说明
图像分类YOLO-CLS(pixel/255)、ImageNet 系(ResNet/MobileNet/EfficientNet/ViT,mean/std 归一化)、自定义归一化
目标检测YOLOv5/v8/v9/v10/v11/v26(自动识别 End2End 与传统布局)、RT-DETR、DETR、RF-DETR
实例分割YOLO-Seg(传统 + End2End)、RF-DETR-Seg、YOLOE(运行时视觉提示 / 运行时文本提示 / 烘焙提示)
交互式分割SAM、SAM2(单文件合并 ONNX)
开放词表Grounding DINO(BERT 分词)、Grounded-SAM(DINO + SAM2 流水线)、DART v2(SAM3 骨干,文本/视觉概念提示,掩码输出)
显著性抠图BiRefNet(soft alpha 输出)
超分 / 增强Real-ESRGAN(2x/4x 重叠分块)、去噪(DnCNN)、低光增强(Zero-DCE)、去雾(DehazeFormer)、多步增强流水线
特征匹配LightGlue(含批量)、DeDoDe-G、LoMa-R、RoMaV2(密集对应场)
姿态估计YOLOv8/11/26-Pose(COCO 17 点,传统+End2End)、RTMO 实时姿态(一阶段 SimCC)
人脸YuNet 检测(5 地标)、SFace/ArcFace 识别(512/128 维)、年龄性别、8 类表情、106 精细关键点、活体检测(CDCN 分割式)
文字识别PaddleOCR v4/v5 det+rec 流水线(DBNet 检测 + SVTR 识别 + CTC 解码,中英文)
深度估计Depth Anything V2 / MiDaS(相对深度图,原图分辨率输出)
风格迁移fast-neural-style(candy/mosaic 等,任意尺寸,动/静态自适应)
行人重识别OSNet-x1.0(512 维 embedding + 图库检索)
表格识别SLANet-plus(结构 token + 单元框,HTML 输出,配合 OCR 回填文本)
旋转框检测YOLOv8/11-OBB(传统)+ YOLO26-OBB(End2End),旋转 IoU NMS,DOTA 15 类
语义分割SegFormer-B0(ADE20K 150 类),类别直方图 + 调色板叠加
人体解析SegFormer-B2 人衣 18 类(帽/发/上衣/裤/鞋/四肢部件占比)
人像分割PP-HumanSeg / MODNet(实时 alpha 抠人,BGRA 输出)
去模糊NafNet(512 对齐输入,输出同尺寸)
图像质量QualityAssessor 纯算法(清晰度/亮度/对比度/噪声)+ FIQA 深度 IQA 挂载(352 输入)
二维码检测+解码WeChat QR Detector(SSD 先验)+ rqrr 内容解码
动作识别ST-GCN 骨架动作分类(COCO17 帧序列输入,配合姿态引擎)
姿态规则零模型几何规则(躺卧/站立/举手判别)
手势分类手部 21 点纯几何规则(握拳/手掌/胜利/点赞等)
车牌mnet 检测(四角透视矫正)+ LPRNet 识别(中国单行/绿牌)
人脸精细关键点insightface 2d106det(106 点,YuNet 串联)
手部MediaPipe Palm 检测(≤4 手)+ RTMPose-hand 21 关键点
全身关键点RTMPose-m WholeBody 133 点(body17+foot6+face68+hand42)

模块结构

模块内容
core引擎接口 / 基础引擎 / 会话工厂 / 运行配置 / 引擎工厂 / 异步批处理优化器
engines各模型引擎实现
sahi切片推理:Slicer / Postprocess / Adapters / SlicedPredictor
utilMattingUtils(抠图结果合成)
modelDetection / Segmentation / ClassificationResult / MatchResult / MattingResult 等结果类型
imagingImage / resize / cvtColor / threshold / morphologyEx / boundingRect / FloatMask 等图像原语

构建说明

  • 首次构建时 ort 会自动下载 ONNX Runtime 预编译静态库(需网络),之后离线可重复构建。
  • 项目内 .cargo/config.toml 清空了 PKG_CONFIG_PATH / PKG_CONFIG_LIBDIR:防止 ort-sys
    通过 pkg-config 找到系统的 onnxruntime 动态库,确保静态链接、产物自包含。
  • 加速后端(Execution Provider):默认 CPU,按需启用(透传至 ort 同名 feature):
    features = ["coreml"](Apple Silicon 可走 ANE/NPU)、features = ["cuda"](NVIDIA),
    以及 tensorrt / directml / openvino / rocm。启用后 DeviceType 枚举与工厂入口
    即已就绪;未启用 feature 时选择该设备类型会回退 CPU 并给出警告。
    注意:同时启用多个无单一预编译二进制覆盖的 EP(如 cuda + coreml)时 ort 会在
    链接期报错,可另加 lax-feature-matching 回退最接近的二进制。
  • 二进制获取方式同样由引入方决定:默认 download-binaries(自动下载静态库);改为
    default-features = false 并启用 load-dynamic 可在运行时动态加载 onnxruntime 库。
  • 所有模型的 NMS/CTC 解码/坐标还原等后处理在 CPU 纯 Rust 执行,EP 只加速模型前向。
  • 产物为自包含二进制,运行时仅依赖 macOS 系统自带框架,无 OpenCV / ONNX Runtime
    动态库依赖(可用 otool -L target/release/examples/onnx_inference_example 验证)。

模型目录(models/)

所有引擎所需模型按引擎名子目录组织(testmodels/ 仅为测试散件):

子目录内容
classification/ConvNeXt-tiny
detection/yolov8n / yolo26n / rtdetr-l / rfdetr_base
segmentation/yolov8n-seg / yolo26n-seg / rfdetr_seg_small
yoloe/11s/26n 文本烘焙版、rt 编码器+检测器、文本编码器(text_encoder/tpe_head/clip_tokenizer)
sam/ sam2/mobile_sam、sam2_fused
grounding_dino/dinor50 tiny + BERT tokenizer
pose/ pose_rt/yolov8n-pose、yolo26n-pose、rtmo_s
face_detection/ face_recognition/ face_attribute/ face_liveness/ face_landmark106/yunet、sface、age_gender+emotion、CDCN 活体、2d106det
hand/ wholebody/palm 检测 + rtmpose-hand 21 点、rtmpose-wholebody 133 点
obb/yolov8n-obb / yolo26n-obb
semantic_segmentation/ human_parsing/ portrait_matting/segformer b0/b2、pp_humanseg
ocr/PP-OCRv4/v5 det+rec+字典
table_recognition/ reid/slanet-plus、osnet_x1_0
deblur/ depth/ style_transfer/ image_quality/ qr_detector/nafnet、depth_anything_v2、candy/mosaic、FIQA、wechat_qr
birefnet/ real_esrgan/ image_enhance/ lightglue/ dedode/ lomar/ roma_v2/对应模型
dart/DART v2 全套(骨干 1.8GB,SAM License)
test_images/各引擎共用测试图

测试

测试无需任何标志:cargo test 自动运行全部用例,模型/测试资产缺失的用例自动 SKIP
(控制台打印缺失清单);设 MODEL_TESTS=1 可强制缺失即失败(CI 用)。

模型路径默认搜索 models/ 与 testmodels/ 两棵树,也可用 MODEL_DIR=models/、
TESTMODELS_DIR=models/、DART_MODELS_DIR=models/dart 指定。

已知限制

  • 手部 21 点定位的 MediaPipe 官方模型仅 tflite 格式,库内使用 RTMPose-hand 替代(已完整支持)
  • OBB 的 SAHI 合并以轴对齐近似(官方 sahi 不支持旋转框),精确角度场景请关闭 SAHI
  • DART 引擎内存约 3.5GB,CPU 单类推理约 45s(推荐 GPU EP)

许可证

基于 MIT License 或 Apache License 2.0 双协议开源,
使用者可任选其一。

⬇️ 下载地址

喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
OωO
取消
广告