কম্পিউটার টিউটোরিয়াল

পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন

এই সমস্যায়, আমরা দেখব পাইথন কীভাবে একটি ইমেজ বা ভিডিও ফাইলের এজ ডিটেক্ট করতে পারে। এজন্য আমাদের OpenCV লাইব্রেরি দরকার। OpenCV লাইব্রেরি মূলত কম্পিউটার ভিশনের জন্য ডিজাইন করা হয়েছে। এটি ওপেন সোর্স। মূলত এটি Intel দ্বারা ডিজাইন করা হয়েছিল। এটি ওপেন-সোর্স BSD লাইসেন্সের অধীনে ফ্রি ব্যবহারযোগ্য।

OpenCV ফাংশনালিটি ব্যবহার করতে, pip ব্যবহার করে ডাউনলোড করতে হবে। OpenCV Numpy মডিউলও ডাউনলোড করবে। সেটিও দরকার হবে।

sudo pip3 install opencv-python

ইনপুট হিসেবে, এই কেসে, আমরা একটি ভিডিও ফাইল ব্যবহার করেছি। আমরা আমাদের ওয়েবক্যামও ব্যবহার করতে পারি এই এজ ডিটেকশন প্রসিডিউরর রিয়েল-টাইম ইফেক্ট দেখতে।

এখানে আমরা একটি ভিডিও ফাইল ব্যবহার করছি। এক्चুয়াল ইমেজ (ভিডিওর ফ্রেম) এর মত দেখাচ্ছে:

পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন

এজ ডিটেকশন কীভাবে কাজ করে?

এজ ডিটেক্ট করতে, কিছু ম্যাথমেটিক্যাল অবজারভেশন আছে যা চেক করে পিক্সেলের ব্রাইটনেস স্পষ্টভাবে পরিবর্তিত হচ্ছে কিনা।

আমাদের আমাদের ইমেজের গ্রে-স্কেল ভার্সনের গ্রেডিয়েন্ট বের করতে হবে। কম্পিউটার ভিশনে, যখন পিক্সেল ব্ল্যাক থেকে হোয়াইটে ট্রানজিশন করে, এটি পজিটিভ স্লপ হিসেবে নোট করা হয়। হোয়াইট থেকে ব্ল্যাক ট্রানজিশনের জন্য, এটি নেগেটিভ স্লপ।

ইমেজের ডেরিভেটিভ ব্যবহার করে এজ ডিটেকশন

একটি ইমেজ একটি ম্যাট্রিক্স হিসেবে সংরক্ষিত হয়, যেখানে সেই ম্যাট্রিক্সের প্রতিটি এলিমেন্ট সকল পিক্সেলের ইনফরমেশন ধারণ করে। ডেরিভেশন বের করতে আমাদের লাপ্লাসিয়ান অপারেটর দরকার। তাই লাপ্লাসিয়ান পেতে, প্রথমে সোবেল ডেরিভেটিভ দরকার। এই সোবেল ডেরিভেটিভগুলো ইমেজের গ্রেডিয়েন্ট ভেরিয়েশন পেতে ব্যবহৃত হয়।

হরিজন্টাল সোবেল ডেরিভেটিভ (Sobel X)

এই সোবেল ডেরিভেটিভ একচুটি ম্যাট্রিক্স (কলড কernel) এর সাথে একচুটি ইমেজের কনভলিউশন দিয়ে পাওয়া যায়। কernelটি সিম্পল কেসে 3x3 ম্যাট্রিক্স।

sobel() নামে একটি ফাংশন রয়েছে। এই ফাংশন ব্যবহার করে আমরা সোবেল ডেরিভেটিভ বের করতে পারি। যখন সোবেল x পাওয়ার চেষ্টা করছি, y পার্টটি ০ হওয়া উচিত।

উদাহরণ কোড

import cv2
import numpy as np

capture = cv2.VideoCapture('sample_video.mp4')  # ভিডিও ফাইল থেকে ফ্রেম ক্যাপচার
while(capture.isOpened()):  # ভিডিও শেষ হওয়া পর্যন্ত লুপ চালান
    ret, frame = capture.read()  # ভিডিও থেকে ফ্রেম ফেচ করুন
    # BGR কালারকে HSV (Hue Saturation Value) মোডে রূপান্তর
    hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # SobelX মেথড
    sobelx = cv2.Sobel(frame, cv2.CV_64F, 1, 0, ksize=5)
    cv2.imshow('SobelX', sobelx)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:  # 27 ESC কী-এর ASCII। ESC চাপলে বন্ধ হবে
        break
capture.release()
cv2.destroyAllWindows()  # উইন্ডো রিমুভ করার পর মেমরি ক্লিন করুন

আউটপুট

পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন

ভার্টিক্যাল সোবেল ডেরিভেটিভ (Sobel Y)

একইভাবে sobel() ফাংশন ব্যবহার করে ভার্টিক্যাল সোবেল ডেরিভেটিভ বের করা যায়। এই কেসে x পার্টটি ০ হবে।

উদাহরণ কোড

import cv2
import numpy as np

capture = cv2.VideoCapture('sample_video.mp4')
while(capture.isOpened()):
    ret, frame = capture.read()
    hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # SobelY মেথড
    sobely = cv2.Sobel(frame, cv2.CV_64F, 0, 1, ksize=5)
    cv2.imshow('SobelY', sobely)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
capture.release()
cv2.destroyAllWindows()

আউটপুট

পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন

লাপ্লাসিয়ান ডেরিভেটিভ

শেষে, আমরা ইমেজের লাপ্লাসিয়ান ডেরিভেটিভ দেখব। Laplacian() নামে একটি ফাংশন রয়েছে। এটি ডেরিভেটিভ পেতে ব্যবহৃত হয়।

উদাহরণ কোড

import cv2
import numpy as np

capture = cv2.VideoCapture('sample_video.mp4')
while(capture.isOpened()):
    ret, frame = capture.read()
    hsv_col = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # Laplacian মেথড
    laplacian = cv2.Laplacian(frame, cv2.CV_64F)
    cv2.imshow('Laplacian', laplacian)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break
capture.release()
cv2.destroyAllWindows()

আউটপুট

পাইথন প্রোগ্রাম: OpenCV ব্যবহার করে ইমেজের এজ ডিটেকশন
  1. পাইথনে কনভোলিউশন (Convolutions) ব্যবহার

  2. পাইথনে ছবি পড়া (OpenCV এবং PIL ব্যবহার করে)

  3. পাইথনে OpenCV ব্যবহার করে টেমপ্লেট ম্যাচিং

  4. পাইথন OpenCV মডিউল ব্যবহার করে হিস্টোগ্রাম ইকুয়ালাইজেশন