خطوات لتعلم مكتبة OpenCV في الرؤية الحاسوبية

مكتبة OpenCV

مكتبة OpenCV (Open Source Computer Vision) هي مكتبة مجانية ومفتوحة المصدر لرؤية الحاسوب وخوارزميات التعلم الآلي. تم تطويرها في البداية بواسطة Intel في عام 1999. تم إصدارها كمصدر مفتوح في عام 2006. ومنذ ذلك الحين، تمت صيانتها بواسطة مجتمع من المطورين وهي الآن إحدى مكتبات رؤية الحاسوب الأكثر استخدامًا. لمعرفة ما هي الرؤية الحاسوبية يمكنك الانتقال إلى مقال الرؤية الحاسوبية .

لغة OpenCV

OpenCV مبرمجة بلغة C ++ وتوفر مجموعة كبيرة من الأدوات لمعالجة الصور ومقاطع الفيديو، مثل تغيير الحجم والقص وتحويلات مساحة اللون واكتشاف الحواف والمزيد.

تطبيقات الرؤية الحاسوبية

  • المركبات ذاتية القيادة
  • أنظمة الأمان
  • تحليل الصور الطبية
  • التعرف على الوجه
  • التعرف على الأشياء

مميزات مكتبة OpenCV

1.     تسريع الأجهزة: يمكن لـ OpenCV استخدام تسريع الأجهزة لتسريع عمليات معينة ، مثل معالجة الصور والتعلم الآلي ، على الأنظمة التي تدعمها.

2.     دعم عبر الأنظمة الأساسية: OpenCV متعدد الأنظمة الأساسية ويمكن استخدامه على أنظمة التشغيل Windows وLinux و Mac و iOS و Android.

3.     روابط متعددة اللغات: OpenCV مكتوب بلغة C ++ وله روابط لمختلف لغات البرمجة ، مثل Python و Java و C #.

تثبيت مكتبة OpenCV

يمكن تثبيت OpenCV (Open Source Computer Vision) على أنظمة تشغيل وبيئات تطوير مختلفة. فيما يلي الخطوات العامة لتثبيت OpenCV:

يتطلب OpenCV تثبيت بعض مكتبات أخرى على جهاز الحاسوب أو على منصة برمجة مثل منصة أناكوندا. المكتبات الضرورية للتعامل مع مكتبة OpenCV هن:

·        NumPy

·        SciPy

·        Matplotlib (للبايثون)

·        Java Development Kit (للجافا).

بإمكانك تنزيل أحدث إصدار من OpenCV من الموقع الرسمي (https://opencv.org/) أو من مستودع GitHub (https://github.com/opencv/opencv).

·        قم بفك ضغط الملف الذي تم تنزيله على كمبيوترك.

·        بمجرد تثبيت OpenCV ، ستحتاج إلى إعداد بيئة التطوير الخاصة بك لاستخدام المكتبة. في Python ، يمكنك القيام بذلك عن طريق إضافة الأسطر التالية إلى أعلى نص Python الخاص بك:

import cv2

في Java ، ستحتاج إلى إضافة مكتبة OpenCV إلى مسار المجلد الخاص بمشروعك واستيراد الفئات الضرورية في كود Java الخاص بك.

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

ستعتمد الخطوات الدقيقة لتثبيت OpenCV وإعداده على نظام التشغيل وبيئة التطوير لديك.

البدء بالبرمجة! 

سوف نتطرق لبعض الأمثلة التي يمكننا الاستفادة من مكتبة OpenCV فيها ومن ضمنها:

1.     قراءة الصورة من ملف 

import cv2

# قم بتحميل الصورة
image = cv2.imread('image.jpg')

2.     حفظ الصورة في ملف 

import cv2

# قم بحفظ الصورة في ملف جديد
cv2.imwrite('new_image.jpg', image)

3.     تغيير حجم الصورة

لتغيير حجم صورة ، قم بقياسها على طول كل محور (الارتفاع والعرض) ، مع مراعاة عوامل المقياس المحددة أو قم فقط بتعيين الارتفاع والعرض المطلوبين.

import cv2

# قم بتحميل الصورة
image = cv2.imread('image.jpg')

# قم بتحديد الحجم الجديد الذي تريده
new_width = 200
new_height = 300

# قم بتغيير حجم الصورة
resized_image = cv2.resize(image, (new_width, new_height))

4.     قص صورة

يتم إجراء الاقتصاص لإزالة كل الكائنات أو المساحات غير المرغوب فيها من الصورة. أو حتى لتسليط الضوء على ميزة معينة للصورة.

# Import packages
import cv2
import numpy as np
 
img = cv2.imread(image.jpg')
# طباعة أبعاد الصورة
print(img.shape) 
cv2.imshow("original", img)
 
# قص الصورة
cropped_image = img[100:400, 200:450]
 
# عرض الصورة التي تم قصها
cv2.imshow("cropped", cropped_image)
 
# حفظ الجزء المقصوص من الصورة في صورة جديدة
cv2.imwrite("Cropped Image.jpg", cropped_image)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

5.     دوران الصورة (تغيير اتجاه الصورة)

لنبدأ بإلقاء نظرة على الكود أدناه الذي سيتم استخدامه لأداء تدوير الصورة

import cv2
 
# قراءة الصورة
image = cv2.imread('image.jpg')
 
# قسمة الطول والعرض على 2 للحصول على مركز الصورة
height, width = image.shape[:2]
# احصل على إحداثيات مركز الصورة لإنشاء مصفوفة دوران ثنائية الأبعاد
center = (width/2, height/2)
 
# باستخدام cv2.getRotationMatrix2D() للحصول على مصفوفة الدوران
rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=45, scale=1)
 
# تدوير الصورة باستخدام cv2.warpAffine
rotated_image = cv2.warpAffine(src=image, M=rotate_matrix, dsize=(width, height))
 
cv2.imshow('Original image', image)
cv2.imshow('Rotated image', rotated_image)
# انتظار إلى أجل غير مسمى ، اضغط على أي مفتاح على لوحة المفاتيح للخروج
cv2.waitKey(0)
# حفظ الصورة التي تم تدويرها على القرص
cv2.imwrite('rotated_image.jpg', rotated_image)

6.     تحويل الصورة من صيغة لونية إلى اخرى مثلا تحوليها من RGB إلى grayscale

import cv2

# قم بتحميل الصورة
image = cv2.imread('image.jpg')

# قم بتحويل الصورة إلى مساحة ألوان درجات الرمادي
gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
cv2.imshow("gray", gray_image)
cv2.waitKey(0)

7.     كشف الحواف (Edge Detection) 

يعد اكتشاف الحواف تقنية معالجة الصور، والتي تُستخدم لتحديد حدود (حواف) الكائنات أو المناطق داخل الصورة.

كيف يتم الكشف عن الحواف؟ 

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

·        Sobel Edge Detection

·        Canny Edge Detection

وهنا سنذكر مثال على خوارزمية Canny Edge Detection

import numpy as np
import cv2

img = cv2.imread(image.jpg')
#حفظ الصورة
cv2.imwrite ('edge_img.jpg', cv2.Canny (img, 512, 415))
#عرض الصورة بعد تأثير كاني
cv2.imshow ('edges', cv2.imread('edge_img.jpg'))
cv2.waitKey(0)

8.     تحليل الأشكال في الصورة  عن طريق رسم الحدود 

سوف نقوم بتحميل الصورة وتحليل الأشكال فيها وتحديد مواصفات الأشكال مثل الأبعاد والمواقع والتحديد ورسم المستطيل حول الشكل ثم عرض وحفظ الصورة المعالجة.

import cv2

# قم بتحميل الصورة
image = cv2.imread('george-cloony.jpg')
gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
gray_image = cv2.Canny(gray_image, 30, 200)

# قم بتحليل الأشكال في الصورة
contours, _ = cv2.findContours(gray_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# قم بتحديد مواصفات الأشكال مثل الأبعاد والمواقع
#for contour in contours:
#    x, y, w, h = cv2.boundingRect(contour)
    # قم برسم المستطيل حول الشكل
#    cv2.rectangle(gray_image, (x, y), (x+w, y+h), (255, 0, 255), 1)
#اطبع عدد الأشكال المحددة
#print("Number of Contours found = " + str(len(contours)))
# قم بعرض وحفظ الصورة المعالجة
cv2.imshow('Contours', gray_image)
cv2.waitKey(0)
cv2.imwrite('contours.jpg', gray_image)

الصورة التالية لرسم التحديد فقط والتي بعدها توضح مربعات تحيط بالأشكال التي تم اكتشافها وعددها فوق 589

9.     تحديد الوجه 

مكتبة OpenCV من مميزاتها أيضا تمكننا من تحديد الوجوه في الصورة، نطبق باستخدام مصنف Haar cascading classifier.

import os
import cv2

face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
# تحميل الصورة
img = cv2.imread("./image.jpg")
gray =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30))

# رسم مربع حول الوجوه المحددة
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 255), 3)
    cv2.imshow("faces", image)
# انقر أي زر على لوحة المفاتيح لإغلاق النافذة
cv2.waitKey(0)

في هذا المثال رسمنا مربعًا أزرق (الصندوق المحيط) حول الوجه في الصورة.

ملخص

  • تعريف أدوات مكتبة OpenCV بلغة بايثون، وبعض المهام الأساسية للمكتبة في معالجة الصور والرؤية الحاسوبية.
  • تطبيقات الرؤية الحاسوبية مثل التعرف على الأشياء، تحليل الصور الطبية، المركبات ذاتية القيادة.
  • اختبار عدة أدوات مثل قص الصورة، تدوير الصورة، كشف الحواف عن طريق تأثير كاني، وتحديد الأشكال والتعرف على الوجوه من خلال مصنف HaaR Cascade.

المصادر

  1. Tiwari, 2019, Introduction to Computer Vision & OpenCV in Python, https://medium.com/analytics-vidhya/introduction-to-computer-vision-opencv-in-python-fb722e805e8b
  2. LearnOpenCV, https://learnopencv.com/getting-started-with-opencv/

Related Post

اترك تعليقاً

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

7 + عشرين =