Link to this sectionاستدلال Ultralytics للغة Rust#
Ultralytics Inference هي مكتبة استدلال عالية الأداء لـ YOLO وأداة سطر أوامر مكتوبة بلغة Rust. تقوم بتشغيل نماذج ONNX المُصدّرة عبر ONNX Runtime لتقديم تنبؤات سريعة وآمنة للذاكرة على الصور، ومقاطع الفيديو، وكاميرات الويب، والتدفقات، دون الحاجة إلى بيئة تشغيل Python وقت الاستدلال.
يأتي المشروع كحزمة واحدة، ultralytics-inference، يمكنك استخدامها بطريقتين: كـ CLI للتنبؤات السريعة ووظائف المعالجة المجمعة، أو كـ مكتبة مدمجة مباشرة في تطبيق Rust الخاص بك. وهي تدعم جميع مهام Ultralytics ومجموعة واسعة من بيئات الأجهزة من خلال واجهة جهاز موحدة.
Link to this sectionلماذا الاستدلال باستخدام Rust؟#
- سرعة أصلية وبصمة صغيرة. يتم تجميعه في ثنائي أصلي بدون مترجم، وهو مثالي للخوادم، والحاويات، وأجهزة الحافة.
- سلامة الذاكرة. يزيل نموذج الملكية في Rust فئات كاملة من أخطاء وقت التشغيل دون الحاجة إلى جامع قمامة.
- جميع مهام YOLO. الاكتشاف، والتقسيم، وتحديد النقاط، وOBB، والتصنيف، والتقسيم الدلالي من واجهة برمجة تطبيقات واحدة.
- دعم واسع للأجهزة. وحدة المعالجة المركزية (CPU) بالإضافة إلى موفري التنفيذ CUDA، وTensorRT، وCoreML، وOpenVINO، وDirectML، وROCm، وXNNPACK المحددين وقت البناء.
- المعالجة المسبقة على جانب وحدة معالجة الرسومات. يوفر نواة CUDA مدمجة اختيارية للحفاظ على التحجيم (letterbox)، والتطبيع، وتحويل التخطيط على الجهاز لمسار إدخال بدون نسخ (zero-copy).
- التنزيل التلقائي. يتم تنزيل أسماء نماذج YOLO المعروفة وأصول العينات تلقائيًا عند الاستخدام الأول.
تغطي هذه الصفحة حزمة Rust المستقلة. لسير عمل Python (التدريب، والتحقق، والتصدير، والتنبؤ) راجع دليل البدء السريع الرئيسي ووضع التنبؤ. قم بتصدير أي نموذج Ultralytics إلى ONNX باستخدام تكامل ONNX، ثم قم بتشغيله هنا.
Link to this sectionالتثبيت#
مطلوب Rust 1.89 أو أحدث. تتطلب ميزة الفيديو بالإضافة إلى ذلك تثبيت FFmpeg 7+ على النظام.
# Install the command-line tool from crates.io
cargo install ultralytics-inference
# Or with GPU support compiled in
cargo install ultralytics-inference --features cuda,tensorrtيتم وضع الملف الثنائي في ~/.cargo/bin/ultralytics-inference (على Linux وmacOS) أو %USERPROFILE%\.cargo\bin\ على Windows.
Link to this sectionالبدء السريع لـ CLI#
يوفر CLI أمراً فرعياً predict. بدون وسائط، يقوم بتنزيل نموذج اكتشاف صغير (nano) وصور عينة، ويقوم بتشغيل الاستدلال، ويحفظ النتائج المعلمة في runs/detect/predict.
# Detect on the built-in samples (downloads model and images)
ultralytics-inference predict
# Detect on your own image
ultralytics-inference predict --model yolo26n.onnx --source image.jpg
# Segmentation (auto-downloads yolo26n-seg.onnx)
ultralytics-inference predict --task segment --source image.jpg
# Pose on a video, shown live in a window
ultralytics-inference predict --task pose --source video.mp4 --show
# Tune thresholds and filter to specific classes
ultralytics-inference predict --source image.jpg --conf 0.5 --iou 0.45 --classes "0,1,2"
# Run a whole folder on the GPU in half precision
ultralytics-inference predict --source images/ --device cuda:0 --halfالأعلام الشائعة:
| العلم | الافتراضي | الوصف |
|---|---|---|
--model, -m | yolo26n.onnx | مسار إلى نموذج ONNX؛ يتم تنزيل اسم YOLO معروف تلقائيًا. |
--task | detect | واحد من detect, segment, pose, obb, classify, semantic. |
--source, -s | عينة | صورة، دليل، نمط glob، فيديو، مؤشر كاميرا ويب، أو رابط URL. |
--conf | 0.25 | عتبة الثقة. |
--iou | 0.7 | عتبة IoU لقمع غير الحد الأقصى (NMS). |
--imgsz | بيانات تعريف النموذج | حجم صورة الاستدلال. |
--device | cpu | جهاز التنفيذ، على سبيل المثال cuda:0, coreml, tensorrt:0. |
--half | false | استدلال بدقة نصفية FP16. |
--save | true | حفظ النتائج المعلمة في runs/<task>/predict. |
--show | false | عرض النتائج في نافذة. |
--classes | الكل | تصفية الاكتشافات حسب معرفات الفئات، على سبيل المثال "0,1,2". |
Link to this sectionالبدء السريع للمكتبة#
تحميل نموذج وتشغيل تنبؤ. تُقرأ بيانات تعريف النموذج مثل أسماء الفئات، ونوع المهمة، وحجم الصورة تلقائيًا من ملف ONNX.
use ultralytics_inference::YOLOModel;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Metadata (classes, task, imgsz) is parsed from the model.
let mut model = YOLOModel::load("yolo26n.onnx")?;
let results = model.predict("image.jpg")?;
for result in &results {
if let Some(boxes) = &result.boxes {
for i in 0..boxes.len() {
let class_id = boxes.cls()[i] as usize;
let conf = boxes.conf()[i];
let name = result.names.get(&class_id).map_or("unknown", |s| s.as_str());
println!("{name} {conf:.2}");
}
}
}
Ok(())
}استخدم InferenceConfig للتحكم في العتبات، وحجم الصورة، والدقة، والجهاز باستخدام واجهة برمجة تطبيقات الباني (builder API):
use ultralytics_inference::{Device, InferenceConfig, YOLOModel};
let config = InferenceConfig::new()
.with_confidence(0.5)
.with_iou(0.45)
.with_imgsz(640, 640)
.with_device(Device::Cuda(0))
.with_half(true);
let mut model = YOLOModel::load_with_config("yolo26n.onnx", config)?;
let results = model.predict("image.jpg")?;تملأ كل مهمة حقلاً مختلفاً في Results. كل علامة تبويب أدناه هي برنامج كامل وقابل للتشغيل؛ يتم تنزيل النموذج ومدخلات العينة تلقائيًا عند التشغيل الأول. استبدل predict_default() بـ predict("image.jpg") للتشغيل على ملفاتك الخاصة.
use ultralytics_inference::YOLOModel;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut model = YOLOModel::load("yolo26n.onnx")?;
let results = model.predict_default()?;
for result in &results {
if let Some(boxes) = &result.boxes {
println!("{} detections", boxes.len());
let xyxy = boxes.xyxy(); // rows of [x1, y1, x2, y2]
for i in 0..boxes.len() {
let class_id = boxes.cls()[i] as usize;
let name = result.names.get(&class_id).map_or("unknown", |s| s.as_str());
println!(" {name} {:.2} {:?}", boxes.conf()[i], xyxy.row(i).to_vec());
}
}
}
Ok(())
}Link to this sectionالمهام المدعومة#
يتم دعم جميع مهام Ultralytics. عند حذف --model، يتم تنزيل نموذج nano المطابق للمهمة المختارة تلقائيًا.
| المهمة | --task | المخرجات | النموذج الافتراضي |
|---|---|---|---|
| اكتشاف | detect | صناديق التحديد والفئات | yolo26n.onnx |
| تقسيم الحالات | segment | صناديق بالإضافة إلى أقنعة لكل حالة | yolo26n-seg.onnx |
| وضعية | pose | صناديق بالإضافة إلى النقاط الرئيسية | yolo26n-pose.onnx |
| صناديق موجهة | obb | صناديق تحديد مستديرة | yolo26n-obb.onnx |
| التصنيف | classify | احتمالات الفئات | yolo26n-cls.onnx |
| التقسيم الدلالي | semantic | خريطة فئات لكل بكسل | yolo26n-sem.onnx |
Link to this sectionتوافق النموذج#
يمكن تحميل أي نموذج Ultralytics مُصدّر إلى ONNX من ملف محلي. يتوفر التنزيل التلقائي لأسماء نماذج YOLO26، وYOLO11، وYOLOv8 القياسية بأحجام n وs وm وl وx:
| عائلة النموذج | المتغيرات القابلة للتنزيل تلقائيًا |
|---|---|
| YOLO26 | yolo26{n,s,m,l,x}.onnx, -seg, -pose, -obb, -cls, و-sem |
| YOLO11 | yolo11{n,s,m,l,x}.onnx, -seg, -pose, -obb, و-cls |
| YOLOv8 | yolov8{n,s,m,l,x}.onnx, -seg, -pose, -obb, و-cls |
التقسيم الدلالي (-sem) خاص بـ YOLO26 فقط.
Link to this sectionمصادر الإدخال#
يقبل الوسيط --source (ونوع Source في المكتبة) أنواعاً عديدة من المدخلات، يتم اكتشافها تلقائيًا من النص:
| المصدر | مثال | ملاحظات |
|---|---|---|
| الصورة | image.jpg | ملف واحد. |
| الدليل | images/ | جميع الصور في المجلد. |
| Glob | images/*.jpg | نمط على غرار الصدفة (shell). |
| الفيديو | video.mp4 | يتطلب ميزة video. |
| كاميرا الويب | 0 | يتطلب ميزة video. |
| بث | rtsp://... | يتطلب ميزة video. |
| URL | https://example.com/image.jpg | تنزيل صورة عن بُعد. |
Link to this sectionالأجهزة وموفرو التنفيذ#
يعمل الاستدلال على وحدة المعالجة المركزية (CPU) افتراضياً. يتم تجميع بيئات وحدة معالجة الرسومات والمسرعات كـ ميزات Cargo ويتم اختيارها وقت التشغيل باستخدام --device (CLI) أو Device (المكتبة).
| سلسلة الجهاز | متغير Device | ميزة البناء | الأجهزة |
|---|---|---|---|
cpu | Device::Cpu | مدمج | أي وحدة معالجة مركزية (CPU) |
cuda:0 | Device::Cuda(0) | cuda | وحدة معالجة رسومات (GPU) من NVIDIA |
tensorrt:0 | Device::TensorRt(0) | tensorrt | وحدة معالجة رسومات (GPU) من NVIDIA، مُحسَّنة |
coreml | Device::CoreMl | coreml | Apple Silicon / macOS |
openvino | Device::OpenVino | openvino | وحدة معالجة مركزية من Intel / iGPU |
directml:0 | Device::DirectMl(0) | directml | وحدة معالجة رسومات (GPU) لنظام Windows |
rocm:0 | Device::Rocm(0) | rocm | وحدة معالجة رسومات (GPU) من AMD |
xnnpack | Device::Xnnpack | xnnpack | وحدة معالجة مركزية (CPU) مُحسَّنة |
# Build the CLI with the providers you need
cargo install ultralytics-inference --features cuda,tensorrtLink to this sectionتسريع GPU ومعالجة CUDA الأولية#
على أجهزة NVIDIA، تعمل ميزة cuda على تمكين مزود تنفيذ CUDA، وتضيف tensorrt مزود TensorRT لمزيد من التحسين. ولتحقيق أقل زمن استجابة ممكن، تقوم ميزة cuda-preprocess بنقل المعالجة الأولية إلى وحدة معالجة الرسومات (GPU).
تقوم cuda-preprocess بتنفيذ تغيير حجم الإطار (letterbox)، والتطبيع، وتحويل التخطيط من HWC إلى CHW كعملية CUDA مدمجة واحدة (fused kernel)، ثم تغذي النتيجة إلى النموذج كمصفوفة جهاز (tensor) بدون نسخ. هذا يزيل تكلفة المعالجة الأولية على وحدة المعالجة المركزية (CPU) لكل صورة، وكذلك تكلفة النسخ من المضيف إلى الجهاز، وهو أمر بالغ الأهمية للدفعات ذات الإنتاجية العالية والبث المباشر.
# Build with fused GPU preprocessing (implies cuda + tensorrt)
cargo build --release --features cuda-preprocessيتم استخدام المسار السريع تلقائيًا، دون أي تغيير في API، عند استيفاء جميع الشروط التالية: تجميع الميزة، الجهاز هو CUDA أو TensorRT، المهمة هي detect أو segment أو pose أو OBB أو semantic segmentation، والنموذج يستخدم مدخلات FP32. يتم تمكين هذه الميزة افتراضيًا ويمكن إيقاف تشغيلها لكل نموذج:
use ultralytics_inference::{Device, InferenceConfig};
let config = InferenceConfig::new()
.with_device(Device::TensorRt(0))
.with_cuda_preprocess(false); // force CPU preprocessingتتطلب cuda-preprocess مجموعة أدوات CUDA مطابقة في وقت البناء وتستخدم NVRTC في وقت التشغيل لعملية المعالجة المدمجة. راجع دليل تسريع CUDA و TensorRT للحصول على متطلبات الإصدار واستكشاف الأخطاء وإصلاحها.
Link to this sectionميزات Cargo#
يتم تمكين الميزات في وقت البناء. تغطي الإعدادات الافتراضية التعليقات التوضيحية والعرض المباشر.
| الميزة | الافتراضي | الغرض |
|---|---|---|
annotate | نعم | رسم الصناديق والأقنعة والنقاط الرئيسية والتصنيفات؛ مطلوبة لـ --save. |
visualize | نعم | عرض نافذة في الوقت الفعلي لـ --show. |
video | لا | قراءة وكتابة ملفات الفيديو (يتطلب FFmpeg 7+). |
cuda | لا | مزود تنفيذ NVIDIA CUDA. |
tensorrt | لا | مزود تنفيذ NVIDIA TensorRT. |
cuda-preprocess | لا | معالجة أولية مدمجة على GPU مع مدخلات بدون نسخ (يتضمن cuda و tensorrt). |
coreml | لا | مزود تنفيذ Apple CoreML. |
openvino | لا | مزود تنفيذ Intel OpenVINO. |
rocm | لا | مزود تنفيذ AMD ROCm. |
directml | لا | مزود تنفيذ Windows DirectML. |
تجمع مجموعات الميزات الملائمة المزودين ذوي الصلة: nvidia (cuda, tensorrt)، و amd (rocm, migraphx)، و intel (openvino, onednn)، و mobile (nnapi, coreml, qnn)، و all (annotate, visualize, video). تتوفر أيضًا مزودات إضافية مثل nnapi و qnn و xnnpack و webgpu وغيرها.
قم بتمكين الميزات عند تثبيت CLI أو إضافة المكتبة:
cargo install ultralytics-inference --features video
cargo install ultralytics-inference --features cuda,tensorrt[dependencies]
ultralytics-inference = { version = "0.0.18", features = ["video"] }Link to this sectionالمخرجات والحفظ#
افتراضيًا، يتم تدوين التنبؤات وحفظها في دليل تشغيل يتزايد تلقائيًا:
runs/
└── detect/
└── predict/ # then predict2, predict3, ...
└── image.jpg # annotated resultيتطابق المجلد الفرعي مع المهمة (runs/segment/, runs/pose/, وهكذا). بالنسبة لمصادر الفيديو، يتم كتابة مخرجات التعليقات التوضيحية كملف فيديو؛ استخدم --save-frames لكتابة الإطارات الفردية بدلاً من ذلك. بالنسبة لمهمة semantic، تكتب --save-json ملفات PNG لخريطة الفئة لكل بكسل تحت مجلد فرعي results/. تتطلب كتابة الصور والفيديو المشروحة ميزة annotate؛ بينما لا يتطلب تصدير PNG لخريطة الفئة الدلالية ذلك. تتطلب مدخلات ومخرجات الفيديو ميزة video.
Link to this sectionالأسئلة الشائعة#
Link to this sectionهل أحتاج إلى تثبيت Python؟#
لا. تعمل المكتبة (crate) على تشغيل نماذج ONNX المُصدرة مباشرة من خلال ONNX Runtime. Python ضرورية فقط إذا كنت تدرب أو تُصدر النماذج باستخدام حزمة Ultralytics مسبقًا.
Link to this sectionما هي النماذج التي يمكنني تشغيلها؟#
أي نموذج Ultralytics YOLO مُصدر إلى ONNX، بما في ذلك YOLO26، و YOLO11، و YOLOv8. يتم تنزيل أسماء النماذج المعروفة تلقائيًا؛ يمكنك أيضًا توجيه --model إلى أي ملف .onnx محلي.
Link to this sectionكيف أحصل على ملف نموذج؟#
قم بالتصدير من حزمة Python، على سبيل المثال باستخدام تكامل ONNX، أو اسمح لـ CLI بتنزيل نموذج نانو قياسي للمهمة المختارة عند التشغيل الأول.
Link to this sectionهل يتم دعم الفيديو؟#
نعم، مع تمكين ميزة video وتثبيت FFmpeg 7+ على النظام. يغطي هذا ملفات الفيديو، وكاميرات الويب، وبث RTSP/RTMP/HTTP.
Link to this sectionماذا تفعل ميزتا annotate و visualize؟#
كلاهما ممكّن افتراضيًا. ترسم annotate الصناديق والأقنعة والنقاط الرئيسية وتصنيفات الفئات على الصورة وهي مطلوبة لـ --save لكتابة النتائج المشروحة. تفتح visualize نافذة مباشرة لـ --show. للحصول على نسخة أصغر وبدون واجهة (headless) تُرجع النتائج برمجيًا فقط، قم بتعطيلهما باستخدام cargo build --no-default-features (أضف الميزات الفردية مرة أخرى حسب الحاجة).
Link to this sectionأين أجد مرجع API الكامل؟#
هذه الصفحة عبارة عن نظرة عامة عالية المستوى. المرجع الكامل لـ API، نوعًا بنوع، لكل هيكل (struct) عام، وطريقة، وخيار تكوين، منشور على docs.rs، ويتم إنشاؤه مباشرة من المصدر.