بدأنا بتعلم أساسيات OpenCV ثم قمنا ببعض عمليات معالجة الصور الأساسية والتلاعب بالصور متبوعة بتجزئة الصور والعديد من العمليات الأخرى باستخدام لغة OpenCV و python. هنا ، في هذا القسم ، سنقوم ببعض تقنيات اكتشاف الكائنات البسيطة باستخدام مطابقة القالب. سنجد كائنًا في صورة ثم نصف ميزاته. الميزات هي السمات الشائعة للصورة مثل الزوايا والحواف وما إلى ذلك. سنلقي أيضًا نظرة على بعض خوارزميات اكتشاف الكائنات الشائعة والشائعة مثل SIFT و SURF و FAST و BREIF و ORB.
كما قيل في البرامج التعليمية السابقة ، OpenCV هي مكتبة رؤية مفتوحة المصدر تحتوي على واجهات C ++ و Python و Java وتدعم أنظمة التشغيل Windows و Linux و Mac OS و iOS و Android. لذلك يمكن تثبيته بسهولة في Raspberry Pi مع بيئة Python و Linux. ويمكن استخدام Raspberry Pi مع OpenCV والكاميرا المرفقة لإنشاء العديد من تطبيقات معالجة الصور في الوقت الفعلي مثل اكتشاف الوجه وقفل الوجه وتتبع الكائن واكتشاف لوحة أرقام السيارة ونظام أمن المنزل وما إلى ذلك.
يشكل اكتشاف الأشياء والتعرف عليها أهم حالة استخدام لرؤية الكمبيوتر ، حيث يتم استخدامها للقيام بأشياء قوية مثل
- مشاهد وضع العلامات
- الملاحة الروبوت
- سيارات ذاتية القيادة
- التعرف على الجسم (Microsoft Kinect)
- كشف المرض والسرطان
- التعرف على الوجه
- التعرف على خط اليد
- التعرف على الأشياء في صور الأقمار الصناعية
اكتشاف الكائن مقابل التعرف
التعرف على الكائن هو المستوى الثاني لاكتشاف الكائن حيث يتمكن الكمبيوتر من التعرف على كائن من كائنات متعددة في صورة وقد يكون قادرًا على التعرف عليه.
الآن ، سنقوم ببعض وظائف معالجة الصور للعثور على كائن من صورة.
البحث عن كائن من صورة
سنستخدم هنا مطابقة القالب للعثور على حرف / كائن في صورة ما ، واستخدام وظيفة cv2.matchTemplate () الخاصة بـ OpenCV للعثور على هذا الكائن
استيراد cv2 استيراد numpy كـ np
تحميل صورة الإدخال وتحويلها إلى الرمادي
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('أشخاص' ، صورة) cv2.waitKey (0) رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
قم بتحميل صورة النموذج
template = cv2.imread ('waldo.jpg'، 0) # نتيجة مطابقة القالب للكائن فوق نتيجة الصورة = cv2.matchTemplate (رمادي ، نموذج ، cv2.TM_CCOEFF) sin_val ، max_val ، min_loc ، max_loc = cv2.minMaxLoc (نتيجة)
إنشاء المربع المحيط
top_left = max_loc # زيادة حجم المستطيل المحيط بمقدار 50 بكسل bottom_right = (top_left + 50، top_left + 50) cv2.rectangle (image، top_left، bottom_right، (0،255،0)، 5) cv2.imshow ('كائن موجود' ، image) cv2.waitKey (0) cv2.destroyAllWindows ()
في cv2.matchTemplate (رمادي ، نموذج ، cv2.TM_CCOEFF) ، أدخل الصورة ذات المقياس الرمادي للعثور على الكائن والقالب. ثم طبق طريقة مطابقة القالب للعثور على الكائنات من الصورة ، هنا يتم استخدام cv2.TM_CCOEFF .
تقوم الوظيفة بأكملها بإرجاع مصفوفة تم إدخالها في النتيجة ، والتي تكون نتيجة إجراء مطابقة القالب.
ثم نستخدم cv2.minMaxLoc (نتيجة) ، والتي تعطي الإحداثيات أو المربع المحيط حيث تم العثور على الكائن في الصورة ، وعندما نحصل على هذه الإحداثيات ، ارسم مستطيلاً فوقه ، وقم بتمديد أبعاد المربع قليلاً بحيث يمكن بسهولة احتواء الكائن داخل المستطيل.
هناك العديد من الطرق لإجراء مطابقة القالب وفي هذه الحالة نستخدم cv2.TM_CCOEFF الذي يرمز إلى معامل الارتباط.
هنا نقاط المفاتيح هي إحداثيات (X ، Y) مستخرجة باستخدام كاشف الغربلة ورسمت فوق الصورة باستخدام وظيفة رسم مفتاح cv2.
الأمواج
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('paris.jpg') رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
قم بإنشاء كائن SURF Feature Detector ، هنا قمنا بتعيين حد hessian على 500
surf = cv2.xfeatures2d.SURF_create (500) keypoints، descriptors = surf.detectAndCompute (رمادي ، بلا) print ("عدد نقاط المفاتيح المكتشفة:" ، len (keypoints))
ارسم نقاطًا رئيسية غنية على الصورة المدخلة
image = cv2.drawKeypoints (صورة ، نقاط رئيسية ، بلا ، أعلام = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF'، image) cv2.waitKey () cv2.destroyAllWindows ()
إخراج وحدة التحكم:
بسرعة
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('paris.jpg') رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
قم بإنشاء كائن FAST Detector
fast = cv2.FastFeatureDetector_create () # الحصول على نقاط رئيسية ، افتراضيًا يكون عدم الحد الأقصى للقمع قيد التشغيل # لإيقاف تعيين fast.setBool ('nonmaxSuppression'، False) keypoints = fast.detect (رمادي ، بلا) print ("عدد نقاط المفاتيح تم الاكتشاف: "، len (نقاط رئيسية))
ارسم نقاط مفاتيح غنية على صورة الإدخال
image = cv2.drawKeypoints (صورة ، نقاط مفاتيح ، بلا ، أعلام = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST'، image) cv2.waitKey () cv2.destroyAllWindows ()
إخراج وحدة التحكم:
نبذة
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('paris.jpg') رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
إنشاء كائن كاشف سريع
موجز = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
إنشاء كائن مستخرج موجز
#brief = cv2.DescriptorExtractor_create ("BRIEF") # تحديد النقاط الرئيسية keypoints = fast.detect (رمادي ، بلا)
الحصول على واصفات ونقاط أساسية نهائية جديدة باستخدام موجز
keypoints، descriptors = brief.compute (gray، keypoints) print ("Number of keypoints Detected:"، len (keypoints))
ارسم نقاط مفاتيح غنية على صورة الإدخال
image = cv2.drawKeypoints (صورة ، نقاط مفاتيح ، بلا ، أعلام = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF'، image) cv2.waitKey () cv2.destroyAllWindows ()
إخراج وحدة التحكم:
محجر العين
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('paris.jpg') رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
إنشاء كائن ORB ، يمكننا تحديد عدد النقاط الرئيسية التي نرغب فيها
orb = cv2.ORB_create () # تحديد النقاط الرئيسية keypoints = orb.detect (رمادي ، بلا)
احصل على الواصفات
keypoints، descriptors = orb.compute (الرمادي ، نقاط المفاتيح) print ("Number of keypoints Detected:"، len (keypoints))
ارسم نقاط مفاتيح غنية على صورة الإدخال
image = cv2.drawKeypoints (صورة ، نقاط مفاتيح ، بلا ، أعلام = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB'، image) cv2.waitKey () cv2.destroyAllWindows ()
إخراج وحدة التحكم:
يمكننا تحديد عدد نقاط المفاتيح التي يبلغ حدها الأقصى 5000 ، ولكن القيمة الافتراضية هي 500 ، أي أن ORB سيكتشف تلقائيًا أفضل 500 نقطة رئيسية إذا لم يتم تحديدها لأي قيمة من نقاط المفاتيح.
هذه هي الطريقة التي يتم بها اكتشاف الكائنات في OpenCV ، ويمكن أيضًا تشغيل نفس البرامج في OpenCV المثبت Raspberry Pi ويمكن استخدامها كجهاز محمول مثل الهواتف الذكية التي تحتوي على Google Lens.
تمت إحالة هذه المقالة من Master Computer Vision ™ OpenCV4 في Python مع دورة التعلم العميق على Udemy ، التي أنشأها راجيف راتان ، واشترك فيها لمعرفة المزيد عن رؤية الكمبيوتر وبايثون.