اكتشف قوة التدفق البصري في الرؤية الحاسوبية. تعرف على كيفية تقدير الحركة، وتحسين تحليل الفيديو، ودفع الابتكارات في الذكاء الاصطناعي.
التدفق البصري هو مفهوم أساسي في الرؤية الحاسوبية الذي يتضمن تقدير الحركة الظاهرية للأجسام والأسطح والحواف في المشهد المرئي. يتم حساب هذه الحركة بناءً على الحركة النسبية بين الراصد (مثل الكاميرا) والمشهد نفسه. تكون نتيجة هذه العملية عبارة عن حقل متجه حيث يمثل كل متجه إزاحة بكسل أو ميزة بين إطارين متتاليين من إطارات الفيديو. من خلال تحليل متجهات الحركة هذه، يمكن للأنظمة الحصول على فهم دقيق ومنخفض المستوى لديناميكيات المشهد، والإجابة على السؤال المهم حول "كيف" تتحرك البكسلات مع مرور الوقت.
يعتمد حساب التدفق البصري عادةً على افتراض "ثبات السطوع". يفترض هذا المبدأ يفترض أن شدة البكسل لنقطة محددة على جسم ما تظل ثابتة بين الإطارات المتتالية، حتى عندما يتحرك. تستخدم الخوارزميات هذا الافتراض track الإزاحة. هناك طريقتان أساسيتان لتحديد هذه مجالات الحركة هذه:
من المهم التمييز بين التدفق البصري و تتبع الأجساملأنهما يخدمان أغراضًا مختلفة ضمن خط أنابيب الرؤية. التدفق البصري عبارة عن عملية منخفضة المستوى تصف الحركة اللحظية للبكسلات دون فهم ما تمثله تلك البكسلات. إنها لا تحافظ بطبيعتها على هوية الكائن بمرور الوقت.
في المقابل، يعد تتبع الكائنات مهمة عالية المستوى تحدد موقع كيانات معينة وتعين لها معرّفًا متسقًا عبر الإطارات. أنماط التتبع المتقدمة، مثل تلك المتوفرة في Ultralytics YOLO11عادةً ما تؤدي بالكشف عن الكائنات أولاً ثم استخدام إشارات الحركة لربط الاكتشافات. بينما قد يستخدم المتعقب التدفق البصري داخليًا للتنبؤ بالموقع, هدف المتعقب هو ثبات الهوية ("أين ذهبت السيارة رقم 4؟")، في حين أن هدف التدفق البصري هو الحركة ("ما مدى سرعة تحرك هذه البيكسلات إلى اليمين؟").
التدفق البصري هو أداة متعددة الاستخدامات تُستخدم في مختلف الصناعات لحل المشاكل المعقدة المتعلقة بالحركة.
يوضِّح مثال Python التالي كيفية حساب التدفق البصري الكثيف باستخدام OpenCV OpenCV. يستخدم هذا المثال خوارزمية فارنباك، وهي طريقة شائعة لتقدير التدفق الكثيف.
import cv2
import numpy as np
# Load two consecutive frames (ensure these files exist)
frame1 = cv2.imread("frame1.jpg")
frame2 = cv2.imread("frame2.jpg")
# Convert frames to grayscale
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY)
next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)
# Calculate dense optical flow using Farneback's algorithm
flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 3, 5, 1.2, 0)
# Compute magnitude and angle of 2D vectors
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
print(f"Flow shape: {flow.shape}") # Output: (Height, Width, 2)
print(f"Max motion magnitude: {np.max(mag):.2f} pixels")
للمستخدمين الذين يتطلعون إلى دمج تحليل الحركة مع اكتشاف الأجسام, نماذج كشفUltralytics يمكن دمجها مع خوارزميات التدفق لإنشاء خطوط أنابيب تحليلات قوية. بينما يوفر التدفق البصري بيانات الحركة الأولية, نماذج ذات مستوى أعلى مثل YOLO11 توفر الفهم الدلالي المطلوب لتفسير تلك الحركة بفعالية. البحث والتطوير المستمر في نماذج مثل YOLO26 إلى زيادة توحيد الفهم المكاني والزماني والزمانية من أجل تحليل أسرع للفيديو من البداية إلى النهاية.