مكتبة OpenCV بالبايثون وكيفية اختبار وجود عناصر معينة

مكتبة OpenCV بالبايثون وكيفية اختبار وجود عناصر معينة

أحد أهداف بايثونات التي يسعى فريقها لتحقيقه هو إبراز مكانة البايثون كلغة برمجة مُعتدٌ بها ومعتمدة في المكتبات والأطر البرمجية. مكتبة OpenCV من أشهر المكتبات المُختصة والقوية في مجال معالجة الصور والفيديو، وتتنوع المجالات التي يمكن ان نستفيد فيها من مكتبة OpenCV وخاصة في المجالات الطبية، والصناعية والذكاء الاصطناعي وتعليم الألة.

تتكون OpenCV من عدة خوارزميات وشيفرات برمجية تم جمعها في إطار واحد. الهدف الرئيسي لهذا الاطار هو تقديم حلول في الرؤية الحاسوبية Computer Vision. لن أطيل الشرح بذكر تاريخ المكتبة وما تتميز به هذه المكتبة او ما تقدمه، ولكن يُمكنك عزيزي القارئ أن تحصل على فكرة أشمل وأوسع من خلال موقع ويكيبيديا في هذا الرابط

https://en.wikipedia.org/wiki/OpenCV

مكتبة OpenCV والبايثون

الاصدارات الاخيرة من OpenCV أصبحت تدعم لغة البايثون. طُورت مكتبة OpenCV بإستخدام لغة ال C++ (الإصدار الأول منها مبني بإستخدام لغة C). بالنسبة لسرعة التنفيذ، تعتبر لغتي C و C++ أسرع من البايثون، وعليه فإن إعادة بناء مكتبة OpenCV بلغة البايثون سيكون عملًا غير مفيدًا في مجال معالجة الصور والفيديو الذي يتطلب سرعة في التنفيذ.

تقدم مكتبة OpenCV ما يسمى Python Wrappers والتي تمكنك من إستخدام المكتبة داخل كود لغة البايثون على شكل حزم ودوال بايثونية، وتعتبر هذه Wrappers واجهات تستدعي دوال المكتبة المبنية بلغتي C و C++، مما يعني بناء التطبيق بلغة البايثون (عنصر السهولة والكود القليل) والتنفيذ بلغة المكتبة الأصلية (عنصر السرعة).

مكتبة OpenCV – مثال بسيط

الأمثلة التي من يُمكن تقديمها هنا كثيرة، ولكن من التمارين التي إستمتعت في تنفيذها أثناء دراستي المتواضعة لمكتبة OpenCV والبايثون هو مثال Object Detection. في موضوع Object Detection يأتي في المقدمة مثال اختبار وجود الوجوه في الصورة او الفيديو، حيث عند تثبيت المكتبة، تجد مجلد تمارين واختبارات يحتوي العديد من التمارين، منها هذا المثال. ولكن أثناء تجهيزي لهذا المقال، قلت لنفسي لماذا الوجوه؟ ألا نستطيع تطبيق المثال بحيث يختبر البرنامج وجود Object اخر؟

العقال والشماغ!

إختصارًا حتى لا أطيل عليكم، شيفرة البايثون التالية تستخدم خوارزمية Haar Clasification في اختبار وجود شماغ + عقال في الفيديو أم لا ( بإفتراض وجود شخص تلبسها بالطبع).

import numpy as np
import cv2

iqal_cascade = cv2.CascadeClassifier('iqal.xml')

cap = cv2.VideoCapture('a.mp4')

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    iqals = iqal_cascade.detectMultiScale(gray, 1.3, 5)   
    for (x,y,w,h) in iqals:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()
detect_iqal.py

حتى تستطيع تشغيل الشيفرة تحتاج لتثبيت مكتبة OpenCV ولملف Haar Classification xml الخاص بعنصر العقال، ويُمكنك الحصول عليه من الرابط هنا.

ملاحظات هامة

1- دقة ملف Haar Classification ليست كبيرة، حيث إستخدامنا 26 صورة لأشخاص يلبسون شماغ وعقال لبناء الملف.

2- أثناء تجهيز ملف ال xml الخاص بخوارزمية Haar، تم أخذ مقاطع صور صغيرة بحيث تشمل جزء أمامي صغير من العقال والشماغ، لذلك أثناء الإختبار فإن المربعات الزرقاء تظهر صغيرة.

3- للحصول على دقة عالية، يتطلب ذلك صور كثيرة قد تصل لعدة آلاف منها، ووقت زمني طويل لتعليم الخوارزمية قد يصل لعدة أيام.

لماذا العقال+الشماغ ؟

لا يوجد هناك سبب لاختيار ذلك، الفكرة كانت عشوائية طُبقت بشكل سريع ونتائجها مقبولة نوعا ما. من المهم ان نعرف انه يُمكننا بناء وتجهيز ملف xml خاص باي عنصر نريد اختبار وجوده في الصورة او الفيديو، وهذا الامر متاح ومشروحٌ عنه بكثرة في الانترنت.

أين البايثونية في الموضوع؟

أولًا: حاولنا أن نبرز في هذا المقال سهولة إستخدام مكتبة قوية  لمعالجة الصور مثل OpenCV في شيفرات وتطبيقات لغة البايثون، مع تقديم مثال بسيط عن الأمر.

ثانيا: من ناحية بايثونية، الشيفرة المستخدمة في المثال تحتوي على 20 سطر برمجي، منها 4 فارغات للترتيب، وهذا يدلل على أحد أهم الميزات التي تتمتع بها بايثون وهي: كود أقل مقارنة بلغات برمجة أخرى.

أشكر الأخ محمد لموافقته على إستخدام أحد مقاطعه في مثال المقال.

 

 

One thought

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *