تا ۳۵٪ تخفیف همدلی برای تمام دوره ها
روز
ساعت
دقیقه
ثانیه

راهنمای جامع ردیابی اشیا (Object Tracking) در بینایی کامپیوتر

Object Tracking
آنچه می خوانید:

در دنیای امروز که هوش مصنوعی و بینایی کامپیوتر (Computer Vision) با سرعت عجیبی در حال پیشرفت هستند، توانایی سیستم‌ها در درک حرکت، اهمیت دوچندانی پیدا کرده است. ردیابی اشیا یا Object Tracking یکی از ارکان اصلی این حوزه است که به ما اجازه می‌دهد نه تنها یک شی را در تصویر شناسایی کنیم، بلکه مسیر حرکت و رفتار آن را در طول زمان و در فریم‌های مختلف یک ویدیو دنبال کنیم. از خودروهای خودران گرفته تا سیستم‌های امنیتی هوشمند و تحلیل بازی‌های ورزشی، همگی به این تکنولوژی وابسته هستند. در این مطلب از بخش آموزش هوش مصنوعی، به بررسی عمیق مفهوم ردیابی اشیا، تفاوت آن با تشخیص اشیا و پیاده‌سازی عملی آن خواهیم پرداخت.

ردیابی اشیا (Object Tracking) چیست؟

ردیابی اشیا در حوزه بینایی کامپیوتر، به فرآیند شناسایی و دنبال کردن یک یا چند شی خاص در مجموعه‌ای از فریم‌های متوالی یک ویدیو گفته می‌شود. این تکنولوژی نقشی حیاتی در کاربردهای متعددی ایفا می‌کند؛ از نظارت تصویری و کنترل ترافیک گرفته تا واقعیت افزوده (AR) و تحلیل‌های ورزشی. ریشه و پیدایش ردیابی اشیا به زمانی بازمی‌گردد که الگوریتم‌ها بسیار ابتدایی بودند و اغلب در تشخیص ساده‌ترین حرکات در محیط‌های کنترل‌شده و محدود دچار مشکل می‌شدند. اما امروزه با ظهور هوش مصنوعی(AI)، این فرآیند به بلوغ رسیده و دقت بسیار بالایی در محیط‌های پیچیده پیدا کرده است.

Object-Tracking-in-computer-vision

تفاوت تشخیص اشیا (Object Detection) و ردیابی اشیا (Object Tracking)

در حوزه بینایی کامپیوتر، مفاهیم «تشخیص اشیا» و «ردیابی اشیا» بسیار به هم نزدیک هستند و اغلب توسط افراد مبتدی به اشتباه به جای یکدیگر به کار می‌روند؛ با این حال، این دو فناوری اهداف کاملاً متفاوتی را دنبال می‌کنند و مکانیسم‌های متمایزی دارند.

تشخیص اشیا (Object Detection) چیست؟

تشخیص اشیا فرآیندی است که در آن، الگوریتم به بررسی یک تک‌فریم (Single Frame) یا تصویر ثابت می‌پردازد تا اشیا موجود در آن را شناسایی کرده و آن‌ها را در کلاس‌های تعریف‌شده (مانند انسان، خودرو، سگ و…) دسته‌بندی کند. به عبارت ساده‌تر، تشخیص اشیا به دو سوال اساسی پاسخ می‌دهد:

  1. چه چیزی در تصویر وجود دارد؟ (دسته‌بندی یا Classification)
  2. این شی کجای تصویر قرار دارد؟ (مکان‌یابی یا Localization به کمک رسم Bounding Box یا جعبه‌های محصورکننده)

این فناوری پایه و اساس بسیاری از برنامه‌های کاربردی مانند تشخیص چهره در عکس‌های تلفن همراه یا شناسایی خودروها در تصاویر ماهواره‌ای است. تشخیص اشیا به عنوان اولین و حیاتی‌ترین گام در بسیاری از پروژه‌های بینایی کامپیوتر شناخته می‌شود.

ردیابی اشیا (Object Tracking) چیست؟

در مقابل، ردیابی اشیا فراتر از شناسایی ساده در یک قاب تصویر عمل می‌کند. زمانی که یک شی توسط الگوریتم‌های تشخیص شناسایی شد، سیستم ردیابی وظیفه دارد حرکت آن را در فریم‌های متوالی و پشت‌سرهم یک ویدیو مانیتور کند. ردیابی اشیا بر مؤلفه زمانی (Temporal Component) بینایی متمرکز است. این فناوری نه تنها مشخص می‌کند شی چیست و کجاست، بلکه مسیر حرکت (Trajectory)، سرعت و جهت حرکت آن را در طول زمان دنبال می‌کند.

این ویژگی در سناریوهایی مانند سیستم‌های هوشمند مدیریت ترافیک بسیار حیاتی است؛ جایی که دانستن سرعت و جهت حرکت هر خودرو به اندازه تشخیص خود خودرو اهمیت دارد. یکی از ویژگی‌های کلیدی ردیابی، حفظ هویت (Identity Maintenance) شی است. یعنی اگر یک خودرو با شناسه (ID: 1) مشخص شد، سیستم تا پایان مسیر آن را با همین شناسه دنبال می‌کند، حتی اگر این خودرو به طور موقت پشت یک درخت یا تابلوی راهنمایی پنهان شود (پدیده Occlusion یا پوشیدگی) و دوباره ظاهر گردد.

جدول مقایسه کلیدی: تشخیص در برابر ردیابی

ویژگی تشخیص اشیا (Object Detection) ردیابی اشیا (Object Tracking)
ورودی اصلی یک تصویر ثابت (Single Frame) فریم‌های متوالی ویدیو (Sequential Frames)
بعد زمانی بعد زمانی را نادیده می‌گیرد و تاریخچه‌ای ندارد. کاملاً وابسته به زمان، فریم‌های قبلی و پیش‌بینی فریم‌های بعدی است.
حفظ هویت (ID) به اشیا شناسه منحصربه‌فرد اختصاص نمی‌دهد. برای هر شی یک ID یکتا تعریف کرده و آن را حفظ می‌کند.
رفتار در زمان پوشیدگی (Occlusion) اگر شی مخفی شود، آن را گم می‌کند و در صورت ظهور مجدد، آن را شی جدیدی فرض می‌کند. قادر است شی را حتی پس از ناپدید شدن موقت، دوباره با همان هویت قبلی شناسایی کند.

هم‌افزایی و همکاری دو فناوری

در عمل و در سیستم‌های دنیای واقعی، این دو تکنولوژی رقیب یکدیگر نیستند، بلکه مکمل هم هستند. ابتدا یک الگوریتم تشخیص شی (مانند YOLO)، اشیا درون قاب را شناسایی می‌کند و سپس الگوریتم ردیابی (مانند DeepSORT) وارد عمل شده و حرکت این اشیا شناسایی‌شده را در طول زمان و در فریم‌های بعدی دنبال می‌کند. ترکیب این دو، سیستم‌های بینایی کامپیوتر بسیار قدرتمند و بلادرنگی (Real-time) را ایجاد می‌کند که قادر به درک پویای جهان اطراف هستند.

انواع Object Tracking

ردیابی اشیا در بینایی کامپیوتر را می‌توان بر اساس نوع داده ورودی و سناریوی استفاده، به دو دسته اصلی تقسیم کرد: ردیابی اشیا در تصویر و ردیابی اشیا در ویدیو. هر کدام از این دو رویکرد، اهداف، پیچیدگی‌ها و کاربردهای خاص خود را دارند و شناخت تفاوت آن‌ها برای طراحی یک سیستم دقیق و کارآمد ضروری است.

ردیابی اشیا در تصویر (Image Object Tracking)

ردیابی اشیا در تصویر که در متن اصلی به آن single-frame tracking نیز اشاره شده، به شناسایی و دنبال‌کردن شی در یک تصویر ثابت مربوط می‌شود. البته از نظر فنی، وقتی فقط یک فریم در اختیار داریم، مفهوم «دنبال کردن در طول زمان» وجود ندارد؛ بنابراین این نوع ردیابی بیشتر به مشخص‌کردن موقعیت، جهت‌گیری و ارتباط شی با محیط در یک صحنه ایستا اشاره دارد.

این نوع کاربرد زمانی اهمیت پیدا می‌کند که بخواهیم در یک عکس یا فریم منفرد، یک شی خاص را دقیقاً تشخیص دهیم و اطلاعاتی را روی آن سوار کنیم. برای مثال، در واقعیت افزوده (AR) می‌توان با استفاده از ردیابی شی در تصویر، عناصر دیجیتال، متن، مدل سه‌بعدی یا گرافیک را روی یک شی واقعی در همان تصویر قرار داد. در چنین حالتی، دقت در هم‌ترازسازی (Alignment) و جای‌گذاری درست عناصر مجازی روی شی فیزیکی بسیار مهم است؛ زیرا کوچک‌ترین خطا می‌تواند تجربه کاربری را ضعیف کند.

به بیان ساده، اگر هدف شما تحلیل یک صحنه ثابت و یافتن جایگاه دقیق یک شی در همان قاب باشد، ردیابی در تصویر می‌تواند انتخاب مناسبی باشد.

ردیابی اشیا در ویدیو (Video Object Tracking)

ردیابی اشیا در ویدیو شکل پیشرفته‌تر و پویاتری از این فناوری است. در اینجا سیستم باید شی را نه در یک عکس، بلکه در چندین فریم متوالی شناسایی و دنبال کند. به همین دلیل، این نوع ردیابی با عنصر زمان، تغییر موقعیت، حرکت و تحول ظاهری شی سروکار دارد.

در ردیابی ویدیویی، سیستم باید بتواند تشخیص دهد که شی موردنظر در فریم فعلی همان شی ای است که در فریم قبلی دیده شده است. این کار در ظاهر ساده به نظر می‌رسد، اما در عمل به دلیل چالش‌هایی مانند موارد زیر پیچیده می‌شود:

  • تاری حرکت (Motion Blur) در زمان جابه‌جایی سریع اشیا
  • تغییر شرایط نور در طول ویدیو
  • پوشیدگی یا Occlusion زمانی که شی موقتاً پشت شی دیگری پنهان می‌شود
  • تغییر زاویه دید یا مقیاس شی
  • ورود و خروج اشیا از کادر تصویر

به همین دلیل، ردیابی در ویدیو معمولاً از ترکیب الگوریتم‌های تشخیص، پیش‌بینی حرکت، مدل‌سازی ظاهر و مدیریت شناسه‌ها استفاده می‌کند تا بتواند اشیا را به‌صورت مداوم دنبال کند.

کاربردهای مهم ردیابی ویدیویی

ردیابی اشیا در ویدیو در بسیاری از سیستم‌های بلادرنگ و تحلیلی نقش کلیدی دارد. برای مثال:

  • در سیستم‌های نظارت تصویری برای دنبال‌کردن افراد یا خودروها
  • در فروشگاه‌های خرده‌فروشی برای تحلیل رفتار مشتریان
  • در مدیریت ترافیک شهری برای بررسی جریان خودروها و نقاط پرترافیک
  • در تحلیل مسابقات ورزشی برای دنبال‌کردن بازیکنان یا توپ
  • در خودروهای خودران برای فهم محیط و پیش‌بینی حرکت موانع

ادغام ردیابی اشیا با فناوری‌های دیگر

یکی از نکات مهم این فناوری قابلیت ترکیب با فناوری های دیگر است که بسیار قدرتمند ظاهر میشود.

ادغام با اینترنت اشیا (IoT)

در اینترنت اشیا (IoT)، ردیابی اشیا به‌ویژه در سیستم‌های امنیتی خانه هوشمند کاربرد زیادی پیدا کرده است. وقتی دوربین‌ها و حسگرها با قابلیت ردیابی ترکیب می‌شوند، سیستم می‌تواند حرکات غیرعادی را تشخیص دهد، افراد آشنا را از افراد ناشناس تفکیک کند و نظارت دقیق‌تری ارائه دهد. این موضوع هم امنیت لحظه‌ای را افزایش می‌دهد و هم در تحلیل رخدادهای گذشته کمک‌کننده است.

ادغام با هوش مصنوعی و یادگیری ماشین

در حوزه هوش مصنوعی (AI) و یادگیری ماشین (ML)، ردیابی اشیا نقش مهمی در تولید داده‌های رفتاری و تغذیه مدل‌های تحلیلی دارد. برای مثال در فروشگاه‌ها، دوربین‌های مجهز به هوش مصنوعی می‌توانند مسیر حرکت مشتریان، زمان توقف مقابل قفسه‌ها و نحوه تعامل آن‌ها با محصولات را ثبت کنند. این داده‌ها سپس وارد مدل‌های یادگیری ماشین می‌شوند تا تصمیم‌هایی مانند بهینه‌سازی چیدمان فروشگاه، بهبود جانمایی محصولات و حتی مدیریت موجودی کالا با دقت بیشتری انجام شود.

ادغام با کلان‌داده (Big Data)

در دنیای کلان‌داده (Big Data)، ردیابی اشیا ابزار مهمی برای تحلیل حجم عظیمی از داده‌های ویدیویی محسوب می‌شود. برای نمونه، در برنامه‌ریزی شهری و مدیریت ترافیک می‌توان ساعت‌ها ویدیو را پردازش کرد تا الگوهای ترافیکی، نقاط پرتراکم و محل‌های پرتکرار تصادف شناسایی شوند. نتیجه این تحلیل‌ها می‌تواند مستقیماً در سیاست‌گذاری شهری، طراحی زیرساخت و تخصیص بهینه منابع استفاده شود.

Object-Tracking-types

برای یادگیری ردیابی اشیا چه مهارت‌هایی لازم است؟

اگر می‌خواهید ردیابی اشیا را به‌صورت حرفه‌ای یاد بگیرید، باید فراتر از شناخت مفهومی Object Tracking حرکت کنید. در عمل، پیاده‌سازی این سیستم‌ها به مجموعه‌ای از مهارت‌های مکمل نیاز دارد؛ از جمله برنامه‌نویسی با پایتون، کار با OpenCV، درک مبانی بینایی کامپیوتر، آشنایی با مدل‌های تشخیص اشیا مانند YOLO و یادگیری روش‌های ردیابی مانند SORT و DeepSORT. علاوه بر این، توانایی کار با ویدیو، پردازش فریم‌ها و تحلیل خروجی مدل‌ها نیز نقش مهمی در اجرای پروژه‌های واقعی دارد.

 

پیاده‌سازی Object Tracking با YOLOv8 و DeepSORT

در این بخش، به‌صورت گام‌به‌گام یاد می‌گیریم که چگونه یک سیستم ردیابی اشیا در ویدیو را با استفاده از YOLOv8 برای تشخیص اشیا و DeepSORT برای دنبال‌کردن اشیا در فریم‌های متوالی پیاده‌سازی کنیم.

این ترکیب یکی از رایج‌ترین و کاربردی‌ترین روش‌ها در پروژه‌های بینایی کامپیوتر است، زیرا:

  • YOLOv8 اشیا را با سرعت و دقت مناسب شناسایی می‌کند.
  • DeepSORT هویت اشیا را بین فریم‌ها حفظ می‌کند.
  • نتیجه نهایی، یک سیستم Object Detection + Object Tracking است که برای کاربردهای بلادرنگ بسیار مناسب است.

پیاده‌سازی مرحله‌به‌مرحله

در ادامه، یک راهنمای مرحله‌به‌مرحله برای اجرای Object Tracking با YOLOv8 و DeepSORT ارائه می‌شود.

گام 1: نصب کتابخانه‌های موردنیاز

برای ساخت یک سیستم تشخیص و ردیابی بلادرنگ اشیا ، به چند کتابخانه کلیدی نیاز داریم. در مقاله اصلی تأکید شده که این کتابخانه‌ها نقش بسیار مهمی دارند و ترکیب آن‌ها امکان ساخت یک پایپ‌لاین کامل برای پردازش ویدیو را فراهم می‌کند.

pip install deep-sort-realtime
pip install ultralytics
pip install datetime

گام ۲: ایمپورت کتابخانه‌ها

در این مرحله، کتابخانه‌های موردنیاز ایمپورت می‌شوند. کتابخانه datetime برای مدیریت عملیات مربوط به تاریخ و زمان استفاده می‌شود که به اندازه‌گیری زمان پردازش هر فریم کمک می‌کند. کتابخانه ultralytics برای بارگذاری و استفاده از مدل YOLO به کار می‌رود که وظیفه تشخیص اشیا را بر عهده دارد. کتابخانه cv2 یا OpenCV برای پردازش تصویر و ویدیو استفاده می‌شود و امکان خواندن، نوشتن و نمایش فریم‌های ویدیویی را فراهم می‌کند. کتابخانه deep_sort_realtime رهگیر DeepSORT را برای ردیابی اشیا ارائه می‌دهد که وظیفه آن دنبال‌کردن اشیا تشخیص‌داده‌شده در فریم‌های متوالی است. در نهایت، تابع cv2_imshow از ماژول google.colab.patches برای نمایش تصاویر در محیط Google Colab ایمپورت می‌شود.

import datetime  
from ultralytics import YOLO  
import cv2  
from deep_sort_realtime.deepsort_tracker import DeepSort  
from google.colab.patches import cv2_imshow  

گام ۳: تعریف تابع کمکی

در این مرحله، یک تابع کمکی به نام create_video_writer تعریف می‌شود تا یک شی video writer ساخته شود. این تابع، شی video capture و نام فایل خروجی را به‌عنوان ورودی می‌گیرد، عرض فریم، ارتفاع فریم و FPS (تعداد فریم در ثانیه) را از شی video capture دریافت می‌کند و video writer را با کُدِک MP4V تنظیم می‌کند. این writer object بعداً برای ذخیره فریم‌های پردازش‌شده ویدیو استفاده می‌شود.

def create_video_writer(video_cap, output_filename):
    # Function to create a video writer object for saving the output video
    frame_width = int(video_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(video_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = int(video_cap.get(cv2.CAP_PROP_FPS))
    fourcc = cv2.VideoWriter_fourcc(*'MP4V')
    writer = cv2.VideoWriter(output_filename, fourcc, fps, (frame_width, frame_height))
    return writer

گام ۴: مقداردهی اولیه پارامترها و آبجکت‌ها

در این مرحله، چند پارامتر و آبجکت مقداردهی اولیه می‌شوند. مقدار CONFIDENCE_THRESHOLD روی 0.8 تنظیم می‌شود تا تشخیص‌هایی که اطمینان پایینی دارند فیلتر شوند. رنگ‌های موردنیاز برای رسم جعبه‌های پیرامونی و متن (به‌ترتیب سبز و سفید) تعریف می‌شوند. شی video capture برای خواندن فایل ویدیویی ورودی مقداردهی می‌شود و با استفاده از تابع کمکی، رvideo writer برای ذخیره ویدیوی خروجی ساخته می‌شود. مدل YOLOv8n برای تشخیص اشیا بارگذاری می‌شود و رهگیر DeepSORT نیز برای حفظ ردیابی اشیا در طول فریم‌ها مقداردهی اولیه می‌گردد.

CONFIDENCE_THRESHOLD = 0.8  # Confidence threshold for detecting objects
GREEN = (0, 255, 0)  # Color for drawing bounding boxes
WHITE = (255, 255, 255)  # Color for drawing text

video_cap = cv2.VideoCapture("/content/video.mp4")  # Initialize the video capture object to read the video
writer = create_video_writer(video_cap, "output.mp4")  # Initialize the video writer object to save the processed video

model = YOLO("yolov8n.pt")  # Load the pre-trained YOLOv8n model
tracker = DeepSort(max_age=50)  # Initialize the DeepSORT tracker

گام ۵: پردازش فریم‌های ویدیو

در این مرحله، یک خط لوله (Pipeline) پردازشی ایجاد می‌کنیم که هر فریم ویدیو را به صورت جداگانه دریافت کرده، تحلیل‌های لازم را روی آن انجام داده و در نهایت خروجی را ذخیره می‌کند. این بخش شامل چهار زیرگام اصلی است:

۵.۱: شروع حلقه پردازش فریم

برای پردازش ویدیو، یک حلقه بی‌نهایت (while True) ایجاد می‌کنیم تا تک‌تک فریم‌ها را تا انتهای ویدیو پردازش کند. در ابتدای هر تکرار، زمان شروع با استفاده از datetime ثبت می‌شود تا بتوانیم سرعت پردازش را اندازه‌گیری کنیم. سپس با استفاده از متد read()، فریم فعلی خوانده می‌شود. اگر متغیر ret مقدار False برگرداند، به معنای پایان ویدیو یا وجود خطا در خواندن است و حلقه متوقف می‌شود.

while True:
    start = datetime.datetime.now()  # ثبت زمان شروع برای اندازه‌گیری عملکرد

    ret, frame = video_cap.read()  # خواندن یک فریم از ویدیو
    if not ret:
        break  # اگر فریمی خوانده نشد (پایان ویدیو)، از حلقه خارج شو

۵.۲: اجرای مدل YOLO برای تشخیص اشیا

در این زیرگام، فریم خوانده شده به مدل YOLOv8 ارسال می‌شود. خروجی مدل شامل لیست تمام اشیا شناسایی شده است. ما یک لیست خالی به نام results می‌سازیم تا داده‌های فیلتر شده را در آن ذخیره کنیم. برای هر شی شناسایی شده، میزان اطمینان (Confidence) بررسی می‌شود؛ اگر این مقدار کمتر از حد آستانه ما (CONFIDENCE_THRESHOLD) باشد، آن تشخیص نادیده گرفته می‌شود. در نهایت، مختصات جعبه پیرامونی (Bounding Box) و شناسه کلاس (Class ID) استخراج شده و به لیست نتایج اضافه می‌گردد.

    detections = model(frame)[0]  # اجرای مدل YOLO روی فریم برای تشخیص اشیا 
    results = []

    for data in detections.boxes.data.tolist():
        confidence = data[4]  # استخراج میزان اطمینان (Confidence) تشخیص
        if float(confidence) < CONFIDENCE_THRESHOLD:
            continue  # نادیده گرفتن تشخیص‌های با اطمینان پایین

        # دریافت مختصات جعبه پیرامونی و شناسه کلاس
        xmin, ymin, xmax, ymax = int(data[0]), int(data[1]), int(data[2]), int(data[3])
        class_id = int(data[5])
        results.append([[xmin, ymin, xmax - xmin, ymax - ymin], confidence, class_id])

۵.۳: به‌روزرسانی رهگیر با تشخیص‌ها

پس از اینکه تشخیص‌ها آماده شد، آن‌ها را به رهگیر DeepSORT می‌دهیم. متد update_tracks وظیفه دارد تشخیص‌های جدید را با اشیایی که در فریم‌های قبلی دیده شده‌اند مطابقت دهد. اگر رهگیر تأیید کند که یک شی واقعاً در حال ردیابی است (is_confirmed)، شناسه منحصر‌به‌فرد (Track ID) و مختصات آن استخراج می‌شود. سپس با استفاده از دستورات OpenCV، مستطیل‌های سبز رنگ دور شی رسم شده و شناسه آن بالای جعبه درج می‌شود.

    tracks = tracker.update_tracks(results, frame=frame)
    for track in tracks:
        if not track.is_confirmed():
            continue  # نادیده گرفتن مسیرهایی که هنوز تایید نشده‌اند

        track_id = track.track_id  # دریافت شناسه ردیابی (Track ID)
        ltrb = track.to_ltrb()  # دریافت مختصات جعبه پیرامونی (Left, Top, Right, Bottom)
        xmin, ymin, xmax, ymax = int(ltrb[0]), int(ltrb[1]), int(ltrb[2]), int(ltrb[3])

        # رسم جعبه پیرامونی و نوشتن شناسه ردیابی روی فریم
        cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), GREEN, 2)
        cv2.rectangle(frame, (xmin, ymin - 20), (xmin + 20, ymin), GREEN, -1)
        cv2.putText(frame, str(track_id), (xmin + 5, ymin - 8), cv2.FONT_HERSHEY_SIMPLEX, 0.5, WHITE, 2)

۵.۴: محاسبه FPS و نمایش فریم

در مرحله نهایی هر فریم، زمان پایان ثبت شده و مدت زمان پردازش به میلی‌ثانیه محاسبه و چاپ می‌شود. همچنین تعداد فریم بر ثانیه (FPS) محاسبه شده و با رنگ قرمز روی تصویر نمایش داده می‌شود تا سرعت اجرای سیستم مشخص گردد. در نهایت، فریم پردازش شده نمایش داده شده و در فایل خروجی ذخیره می‌گردد. اگر کاربر کلید ‘q’ را فشار دهد، پردازش متوقف خواهد شد.

    end = datetime.datetime.now()  # ثبت زمان پایان پردازش فریم
    print(f"Time to process 1 frame: {(end - start).total_seconds() * 1000:.0f} milliseconds")
    
    fps = f"FPS: {1 / (end - start).total_seconds():.2f}"  # محاسبه و نمایش FPS
    cv2.putText(frame, fps, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 8)

    # نمایش فریم و ذخیره آن در ویدیوی خروجی
    cv2_imshow(frame)
    writer.write(frame)
    if cv2.waitKey(1) == ord("q"):
        break  # خروج از حلقه در صورت فشردن کلید 'q'

گام ۶: آزادسازی منابع (Step 6: Release Resources)

بعد از پردازش همه فریم‌ها، باید منابعی که در طول اجرای برنامه استفاده شده‌اند آزاد شوند. در این مرحله، شی video capture و شی video writer آزاد می‌شوند تا منابع سیستم خالی شوند. سپس همه پنجره‌های OpenCV بسته می‌شوند تا فرایند پردازش ویدیو به‌صورت کامل و تمیز پایان یابد. این کار باعث می‌شود مدیریت منابع به‌درستی انجام شود و پس از اتمام پردازش، هیچ منبعی باز نماند.

video_cap.release()  # Release the video capture object
writer.release()  # Release the video writer object
cv2.destroyAllWindows()  # Close all OpenCV window

برای یادگیری حرفه‌ای پردازش تصویر و بینایی کامپیوتر از کجا شروع کنیم؟

اگر تا اینجا با مفهوم ردیابی اشیا، تفاوت آن با تشخیص اشیا و پیاده‌سازی آن با YOLOv8 و DeepSORT آشنا شده‌اید، احتمالاً متوجه شده‌اید که ورود حرفه‌ای به این حوزه فقط با چند تکه کد امکان‌پذیر نیست. برای ساخت پروژه‌های واقعی در حوزه پردازش تصویر و بینایی کامپیوتر باید مباحث پایه و کاربردی را به‌صورت مرحله‌به‌مرحله یاد بگیرید؛ از کار با تصویر و ویدیو در OpenCV گرفته تا تشخیص اشیا، ردیابی اشیا، تحلیل ویدیو و پیاده‌سازی پروژه‌های عملی.

اگر می‌خواهید این مسیر را اصولی، پروژه‌محور و متناسب با نیاز بازار کار یاد بگیرید، پیشنهاد می‌کنیم دوره پردازش تصویر و بینایی کامپیوتر را در دیتایاد ببینید. در این آموزش‌ها با مفاهیم پایه، ابزارهای کاربردی و پیاده‌سازی پروژه‌های واقعی آشنا می‌شوید و می‌توانید مهارت خود را برای ورود به پروژه‌های عملی و حرفه‌ای تقویت کنید.

آموزش پردازش تصویر و بینایی ماشین

سوالات متداول در مورد Object Tracking

1) ردیابی اشیا (Object Tracking) چیست؟

ردیابی اشیا فرآیندی در بینایی کامپیوتر است که در آن یک یا چند شی در فریم‌های متوالی ویدیو شناسایی و مسیر حرکت آن‌ها در طول زمان دنبال می‌شود. این فناوری علاوه بر مکان شی، هویت و رفتار حرکتی آن را نیز حفظ می‌کند.

2) تفاوت ردیابی اشیا با تشخیص اشیا چیست؟

تشخیص اشیا فقط مشخص می‌کند چه چیزی در تصویر وجود دارد و کجاست، اما ردیابی اشیا حرکت همان شی را در فریم‌های بعدی دنبال می‌کند و برای آن شناسه یکتا نگه می‌دارد.

3) ردیابی اشیا چه کاربردهایی دارد؟

از مهم‌ترین کاربردهای Object Tracking می‌توان به سیستم‌های نظارتی، خودروهای خودران، تحلیل مسابقات ورزشی، مدیریت ترافیک، فروشگاه‌های هوشمند و پروژه‌های واقعیت افزوده اشاره کرد.

4) آیا برای ردیابی اشیا همیشه به ویدیو نیاز داریم؟

بله، در تعریف اصلی ردیابی اشیا معمولاً با فریم‌های متوالی ویدیو سروکار داریم؛ چون مفهوم tracking وابسته به زمان و دنبال‌کردن حرکت است. در تصویر ثابت بیشتر با تشخیص و مکان‌یابی شی روبه‌رو هستیم تا ردیابی واقعی.

5) چرا YOLOv8 و DeepSORT برای Object Tracking استفاده می‌شوند؟

YOLOv8 وظیفه تشخیص سریع و دقیق اشیا را بر عهده دارد و DeepSORT هویت اشیا را بین فریم‌ها حفظ می‌کند. ترکیب این دو، یک راهکار مناسب برای ردیابی بلادرنگ اشیا ایجاد می‌کند.

6) مهم‌ترین چالش‌های ردیابی اشیا چیست؟

پوشیدگی اشیا، تاری حرکت، تغییر نور، تغییر زاویه دید، تغییر مقیاس و ورود و خروج اشیا از کادر، از مهم‌ترین چالش‌های سیستم‌های Object Tracking هستند.

7) برای یادگیری ردیابی اشیا باید چه مهارت‌هایی داشته باشیم؟

برای یادگیری حرفه‌ای Object Tracking بهتر است با پایتون، OpenCV، مبانی بینایی کامپیوتر، مدل‌های تشخیص اشیا مانند YOLO و الگوریتم‌های ردیابی مانند SORT و DeepSORT آشنا باشید.

8) آیا ردیابی اشیا در بازار کار کاربرد دارد؟

بله، این مهارت در پروژه‌های بینایی کامپیوتر، سیستم‌های نظارتی، تحلیل ویدیو، صنعت حمل‌ونقل هوشمند، خرده‌فروشی و خودروهای خودران کاربرد زیادی دارد و یکی از مهارت‌های مهم در بازار کار AI و Computer Vision محسوب می‌شود.

مقالات هوش مصنوعی
دوره جامع

هوش مصنوعی

دوره جامع نخبگان پایتون
دوره جامع متخصص علم داده
دوره جامع بینایی کامپیوتر و پردازش تصویر
دوره جامع مدل زبانی بزرگ و پردازش زبان طبیعی
قیمت اصلی: ۴۷,۴۰۰,۰۰۰ تومان بود.قیمت فعلی: ۳۰,۸۱۰,۰۰۰ تومان.
مقالات مشابه
نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *