جدول المحتويات:
- الخطوة 1: رسم مستطيل على كائن تم التعرف عليه
- الخطوة 2: تتبع المسار الذي تحرك فيه الكائن
- الخطوة 3: دمج كلا الكودتين
فيديو: تتبع كائن Opencv: 3 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
كشف الكائن المتحرك هو تقنية تستخدم في رؤية الكمبيوتر ومعالجة الصور. تتم مقارنة الإطارات المتتالية المتعددة من الفيديو بطرق مختلفة لتحديد ما إذا تم اكتشاف أي جسم متحرك.
تم استخدام اكتشاف الأجسام المتحركة في مجموعة واسعة من التطبيقات مثل المراقبة بالفيديو ، والتعرف على الأنشطة ، ومراقبة حالة الطريق ، وسلامة المطارات ، ومراقبة الحماية على طول الحدود البحرية وما إلى ذلك.
الكشف عن الكائن المتحرك هو التعرف على الحركة المادية لكائن ما في مكان أو منطقة معينة. [2] من خلال تمثيل التجزئة بين الأجسام المتحركة والمنطقة أو المنطقة الثابتة ، يمكن تتبع حركة الأجسام المتحركة وبالتالي يمكن تحليلها لاحقًا. لتحقيق ذلك ، ضع في اعتبارك أن الفيديو عبارة عن هيكل مبني على إطارات فردية ، ويكمن اكتشاف الكائن المتحرك في العثور على الهدف (الأهداف) المتحركة الأمامية ، إما في كل إطار فيديو أو فقط عندما يظهر الهدف المتحرك أول ظهور في الفيديو.
سأستخدم تركيبة Opnecv و Python لاكتشاف وتتبع الكائنات بناءً على اللون
الخطوة 1: رسم مستطيل على كائن تم التعرف عليه
إذا لم يكن جهاز الكمبيوتر الخاص بك يحتوي على python أو opencv ، فيرجى اتباع ما يلي أدناه
ها هو كود الثعبان:
استيراد cv2import numpy كـ np
cap = cv2. VideoCapture (0)
احيانا صحيح:
_، frame = cap.read () hsv = cv2.cvtColor (frame، cv2. COLOR_BGR2HSV)
low_yellow = np.array ([20، 110، 110])
upper_yellow = np.array ([40، 255، 255])
yellow_mask = cv2.inRange (hsv، Lower_yellow، upper_yellow)
(_، contours، _) = cv2.findContours (yellow_mask، 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) إذا كانت math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (frame، center_points [i - 1]، center_points ، (b، g، r)، 4)
الخطوة 3: دمج كلا الكودتين
سأقوم بدمج كل من الكود
استيراد cv2import numpy كما np استيراد عشوائي من مجموعات الاستيراد deque
cap = cv2. VideoCapture (1)
# لتتبع كل نقطة حيث زار الكائن center_points = deque ()
احيانا صحيح:
# قراءة وقلب الإطار _ ، الإطار = غطاء القراءة () الإطار = 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]) upper_blue = np.array ([140، 255، 255]) القناع = cv2.inRange (hsv، Lower_blue، upper_blue)
# اصنع نواة بيضاوية الشكل
kernel = cv2.getStructuringElement (cv2. MORPH_ELLIPSE، (15، 15))
# فتح مورف (تآكل يتبعه تمدد)
mask = cv2.morphologyEx (قناع ، cv2. MORPH_OPEN ، نواة)
# ابحث عن كل الخطوط
ملامح ، تسلسل هرمي = cv2.findContours (mask.copy () ، cv2. RETR_LIST ، cv2. CHAIN_APPROX_SIMPLE) [- 2:]
إذا كان لين (ملامح)> 0:
# اعثر على أكبر محيط أكبر
# ابحث عن مركز الكنتور وارسم دائرة مملوءة
Moments = cv2.moments (large_contour) centre_of_contour = (int (لحظات ['m10'] / لحظات ['m00']) ، int (لحظات ['m01'] / لحظات ['m00'])) cv2.circle (إطار ، centre_of_contour، 5، (0، 0، 255)، -1)
# اربط الكفاف بدائرة
القطع الناقص = cv2.fitEllipse (large_contour) cv2.ellipse (إطار ، قطع ناقص ، (0 ، 255 ، 255) ، 2)
# احفظ مركز الكنتور حتى نرسم خط تتبعه
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) إذا كانت math.sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (frame، center_points [i - 1]، center_points ، (b، g، r)، 4)
cv2.imshow ("أصلي" ، إطار)
cv2.imshow ("قناع" ، قناع)
k = cv2.waitKey (5) & 0xFF
إذا كان k == 27: استراحة
cv2.destroyAllWindows ()
cap.release ()
موصى به:
متابع كائن Pixy2Bot (رمز مؤازر): 4 خطوات
متابع كائن Pixy2Bot (رمز مؤازر): بناء كائن بسيط يتبع الروبوت (بدون آلية تحريك / إمالة) باستخدام Arduino Uno + Motor Shield ، واثنين من الماكينات المستمرة الرخيصة و Pixy2. فيديو: https://youtu.be/lxBLt5DJ5BM
كيفية إنشاء كائن مشي: 9 خطوات
كيفية إنشاء كائن مشي: هنا سوف تتعلم كيفية إنشاء كائن متحرك: الكشافات المطلوبة: الكمبيوتر (سيفعل أي نوع) متصفح الإنترنت (Duh) (أي متصفح ويب آخر غير Internet Explorer أو Safari)
DIY الذكية روبوت تتبع مجموعات السيارات تتبع السيارات حساسة للضوء: 7 خطوات
DIY الذكية روبوت تتبع مجموعات السيارات تتبع السيارات حساس للضوء: التصميم بواسطة SINONING ROBOT يمكنك الشراء من تتبع سيارة الروبوت ، تقارن رقاقة TheoryLM393 بين المقاومين ، عندما يكون هناك جانب واحد من المقاوم الضوئي LED على الأبيض سيتوقف جانب المحرك على الفور ، والجانب الآخر من المحرك تدور ، بحيث
Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: 7 خطوات (بالصور)
Raspberry Pi - Mars Rover المستقل مع تتبع كائن OpenCV: مدعوم من Raspberry Pi 3 ، والتعرف على كائن السيرة الذاتية المفتوح ، وأجهزة الاستشعار بالموجات فوق الصوتية ومحركات التيار المستمر. يمكن لهذه العربة الجوالة أن تتعقب أي جسم يتم تدريبه عليه وتتحرك على أي تضاريس
روبوت تتبع اللون على أساس العجلة متعددة الاتجاهات و OpenCV: 6 خطوات
روبوت تتبع الألوان استنادًا إلى العجلة متعددة الاتجاهات و OpenCV: أستخدم هيكل عجلة متعدد الاتجاهات لتنفيذ تتبع الألوان الخاص بي ، وأستخدم برنامجًا للهاتف المحمول يسمى OpenCVBot. شكرا لمطوري البرمجيات هنا ، شكرا لك. يقوم OpenCV Bot في الواقع باكتشاف أو تتبع أي كائن في الوقت الحقيقي من خلال معالجة الصور