فهرست مطالب:
- مرحله 1: رسم مستطیل روی شیء شناخته شده
- مرحله 2: مسیری را که شی در آن حرکت کرده است ، مشخص کنید
- مرحله 3: ادغام هر دو کد
تصویری: ردیابی شیء Opencv: 3 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:53
تشخیص اجسام متحرک روشی است که در بینایی رایانه و پردازش تصویر استفاده می شود. چندین فریم متوالی از یک ویدیو با روش های مختلف مقایسه می شود تا مشخص شود آیا هر جسم متحرک شناسایی شده است یا خیر.
تشخیص اجسام متحرک برای طیف وسیعی از برنامه ها مانند نظارت تصویری ، تشخیص فعالیت ، نظارت بر وضعیت جاده ها ، ایمنی فرودگاه ، نظارت بر حفاظت در امتداد مرز دریایی و غیره استفاده شده است.
تشخیص جسم متحرک برای تشخیص حرکت فیزیکی یک جسم در یک مکان یا منطقه معین است. [2] با عمل تقسیم بندی بین اجسام متحرک و منطقه یا ناحیه ثابت ، حرکت اجسام متحرک را می توان ردیابی کرد و بنابراین بعداً تجزیه و تحلیل شد. برای دستیابی به این هدف ، در نظر بگیرید که یک ویدئو ساختاری است که بر فریم های واحد ساخته شده است ، تشخیص شی متحرک برای یافتن هدف (های) متحرک پیش زمینه ، در هر فریم ویدئویی یا تنها زمانی است که هدف متحرک اولین ظاهر را در ویدئو نشان می دهد.
من قصد دارم از ترکیب Opnecv و Python برای تشخیص و ردیابی اشیاء بر اساس رنگ استفاده کنم
مرحله 1: رسم مستطیل روی شیء شناخته شده
اگر رایانه شما پایتون یا opencv ندارد لطفاً این دستورالعمل زیر را دنبال کنید
اینجا کد پایتون است:
cv2import numpy را به عنوان np وارد کنید
cap = cv2. VideoCapture (0)
در حالی که True:
_ ، frame = cap.read () hsv = cv2.cvtColor (قاب ، cv2. COLOR_BGR2HSV)
lower_yellow = np.array ([20 ، 110 ، 110])
upper_yellow = np.array ([40 ، 255 ، 255])
ماسک_زرد = cv2.inRange (hsv ، زرد_پایین ، زرد_بالا)
(_ ، خطوط ، _) = cv2.findContours (ماسک_زرد ، cv2. RETR_TREE ، cv2. CHAIN_APPROX_SIMPLE)
برای کانتور در خطوط:
منطقه = cv2.contourArea (کانتور)
اگر (مساحت> 800):
x ، y ، w ، h = cv2.boundingRect (contour) frame = cv2. rectangle (frame، (x، y)، (x+w، y+h)، (0، 0، 255)، 10)
cv2.imshow ("ردیابی" ، قاب)
k = cv2.waitKey (5) و 0XFF
اگر k == 27: شکستن
cv2.destroyAllWindows ()
cap.release ()
مرحله 2: مسیری را که شی در آن حرکت کرده است ، مشخص کنید
برای ردیابی مسیر:
برای i در محدوده (1 ، len (center_points)): b = random.randint (230 ، 255) g = random.randint (100، 255) r = random.randint (100، 255) if math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (قاب ، نقاط_مرکز [i - 1] ، نقاط مرکز ، (b ، g ، r) ، 4)
مرحله 3: ادغام هر دو کد
من قصد دارم هر دو کد را ادغام کنم
import cv2import numpy به عنوان np واردات تصادفی از مجموعه واردات deque
cap = cv2. فیلم برداری (1)
# برای پیگیری تمام نقاطی که شیء از آنها بازدید کرده است center_points = deque ()
در حالی که True:
# قاب را بخوانید و ورق بزنید _ ، frame = cap.read () frame = cv2.flip (قاب ، 1)
# قاب را کمی تار کنید
blur_frame = cv2. GaussianBlur (قاب ، (7 ، 7) ، 0)
# تبدیل از فرمت رنگی BGR به HSV
hsv = cv2.cvtColor (blur_frame ، cv2. COLOR_BGR2HSV)
# محدوده پایین و بالا رنگ hsv را برای تشخیص تعریف کنید. آبی اینجا
lower_blue = np.array ([100، 50، 50]) above_blue = np.array ([140، 255، 255]) mask = cv2.inRange (hsv ، آبی زیرین ، آبی بالا)
# هسته بیضوی درست کنید
هسته = cv2.getStructuringElement (cv2. MORPH_ELLIPSE ، (15 ، 15))
# مورف باز (فرسایش به دنبال اتساع)
mask = cv2.morphologyEx (mask، cv2. MORPH_OPEN ، هسته)
# همه خطوط را پیدا کنید
خطوط ، سلسله مراتب = cv2.findContours (mask.copy () ، cv2. RETR_LIST ، cv2. CHAIN_APPROX_SIMPLE) [-2:]
اگر len (خطوط)> 0:
# بزرگترین کانتور را بیابید
# مرکز کانتور را بیابید و دایره پر شده را بکشید
لحظات = cv2.moments (بزرگترین_کنترل) centre_of_contour = (int (لحظات ['m10'] / لحظات ['m00']) ، int (لحظات ['m01'] / لحظه ها ['m00'])) cv2.circle (قاب ، centre_contour ، 5 ، (0 ، 0 ، 255) ، -1)
# کانتور را با دایره محدود کنید
بیضی = cv2.fit
# مرکز کانتور را ذخیره کنید تا خط ردیابی آن را ترسیم کنیم
center_points.appendleft (centre_of_contour)
# از نقاط مرکزی کانتور خط بکشید
برای i در محدوده (1 ، len (center_points)): b = random.randint (230 ، 255) g = random.randint (100، 255) r = random.randint (100، 255) if math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (قاب ، نقاط_مرکز [i - 1] ، نقاط مرکز ، (b ، g ، r) ، 4)
cv2.imshow ('اصلی' ، قاب)
cv2.imshow ("ماسک" ، ماسک)
k = cv2.waitKey (5) و 0xFF
اگر k == 27: شکستن
cv2.destroyAllWindows ()
cap.release ()
توصیه شده:
ربات هوشمند DIY ردیابی ماشین ردیابی ماشین ردیابی خودرو حساس به نور: 7 مرحله
دستگاه DIY Robot Smart Tracking Car Tracking Car Photosensitive: طراحی شده توسط SINONING ROBOT شما می توانید از ربات ردیابی ماشین خرید کنید بچرخید تا
رزبری پای - مریخ نورد خودکار با ردیابی شیء OpenCV: 7 مرحله (همراه با تصاویر)
رزبری پای - مریخ نورد خودکار با ردیابی شی OpenCV: دارای رزبری پای 3 ، تشخیص شیء CV باز ، سنسورهای اولتراسونیک و موتورهای DC دنده ای. این مریخ نورد می تواند هر جسمی را که برای آن آموزش دیده است ردیابی کرده و در هر زمینی حرکت کند
ChatterBox - مترجم شیء: 6 مرحله
ChatterBox - مترجم شی: وسیله ای است که باعث می شود هر شیء صحبت کند! با احتیاط از آن استفاده کنید
دسته های چاپ سه بعدی برای هر شیء: 10 مرحله (همراه با تصاویر)
دسته های پرینت سه بعدی برای هر شیء: اگر مانند من هستید ، ساخت وسایل را دوست دارید ، اما وقتی با پروژه هایی که نیاز به مهارت بالایی دارند ، روبرو می شوید. گاهی اوقات ، به ویژه اگر کارهای کوچک و مبهمی انجام می دادم ، در ادامه کار مشکل دارم
آموزش تشخیص شیء ربات چهارپاره جتسون نانو: 4 مرحله
Jeton Nano Quotruped Robot Object Detection: Nvidia Jetson Nano یک کیت توسعه دهنده است که از SoM (System on Module) و یک برد حامل مرجع تشکیل شده است. این برنامه در درجه اول برای ایجاد سیستم های جاسازی شده که نیاز به قدرت پردازشی بالا برای یادگیری ماشین ، بینایی ماشین و فیلم دارد ، هدف قرار می گیرد