इस समस्या में, हम देखेंगे कि Python इमेज या वीडियो फ़ाइल के एज कैसे डिटेक्ट कर सकता है। इसे प्राप्त करने के लिए, हमें OpenCV लाइब्रेरी की आवश्यकता है। OpenCV लाइब्रेरी मुख्य रूप से कंप्यूटर विजन के लिए डिज़ाइन की गई है। यह ओपन सोर्स है। मूल रूप से इसे इंटेल द्वारा डिज़ाइन किया गया था। यह ओपन-सोर्स BSD लाइसेंस के तहत उपयोग के लिए मुफ़्त है।
OpenCV कार्यक्षमता का उपयोग करने के लिए, हमें pip का उपयोग करके इसे डाउनलोड करना होगा। OpenCV Numpy मॉड्यूल भी डाउनलोड करेगा। उसकी भी आवश्यकता होगी।
sudo pip3 install opencv-python
इनपुट के रूप में, इस मामले में, हमने एक वीडियो फ़ाइल का उपयोग किया है। हम अपने वेबकैम का उपयोग करके इस एज डिटेक्शन प्रक्रिया का रियल-टाइम प्रभाव भी देख सकते हैं।
यहां हम एक वीडियो फ़ाइल का उपयोग कर रहे हैं। वास्तविक इमेज (वीडियो का फ्रेम) इस तरह है:

एज डिटेक्शन कैसे काम करता है?
एज डिटेक्ट करने के लिए, कुछ गणितीय अवलोकन हैं जिनसे जांचा जाता है कि पिक्सल्स की ब्राइटनेस विशिष्ट रूप से बदल रही है या नहीं।
हमें अपनी इमेज के ग्रेस्केल वर्जन के लिए ग्रेडिएंट खोजने की आवश्यकता है। कंप्यूटर विजन में, जब पिक्सल्स ब्लैक से व्हाइट की ओर ट्रांजिशन कर रहे होते हैं, तो इसे पॉजिटिव स्लोप के रूप में नोट किया जाता है। व्हाइट से ब्लैक ट्रांजिशन के लिए, यह नेगेटिव स्लोप है।
इमेज के डेरिवेटिव का उपयोग करके एज डिटेक्शन
एक इमेज मैट्रिक्स के रूप में स्टोर होती है, जहां उस मैट्रिक्स का प्रत्येक एलिमेंट सभी पिक्सल्स के बारे में जानकारी रखता है। डेरिवेशन खोजने के लिए हमें लाप्लासियन ऑपरेटर की आवश्यकता होती है। तो लाप्लासियन प्राप्त करने के लिए, पहले हमें सोबेल डेरिवेटिव्स की आवश्यकता होती है। ये सोबेल डेरिवेटिव्स इमेज के ग्रेडिएंट वेरिएशन को प्राप्त करने के लिए उपयोग किए जाते हैं।
हॉरिजॉन्टल सोबेल डेरिवेटिव (Sobel X)
यह सोबेल डेरिवेटिव वास्तविक इमेज और दूसरे मैट्रिक्स (जिसे कर्नेल कहा जाता है) के कन्वोल्यूशन के माध्यम से प्राप्त होता है। कर्नेल सरल मामले के लिए 3x3 मैट्रिक्स है।
sobel() नामक एक फ़ंक्शन है। इस फ़ंक्शन का उपयोग करके, हम सोबेल डेरिवेटिव्स खोज सकते हैं। जब हम सोबेल X प्राप्त करने का प्रयास कर रहे होते हैं, तो Y भाग 0 होना चाहिए।
उदाहरण कोड - 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)
# Sobel X मेथड
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()
आउटपुट

वर्टिकल सोबेल डेरिवेटिव (Sobel Y)
इसी तरह हम sobel() फ़ंक्शन का उपयोग करके वर्टिकल सोबेल डेरिवेटिव खोज सकते हैं। इस मामले में X भाग 0 होगा।
उदाहरण कोड - Sobel Y
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)
# Sobel Y मेथड
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()
आउटपुट

लाप्लासियन डेरिवेटिव
अंत में हम इमेज के लाप्लासियन डेरिवेटिव को देखेंगे। 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 = cv2.Laplacian(frame, cv2.CV_64F)
cv2.imshow('Laplacian', laplacian)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
capture.release()
cv2.destroyAllWindows()
आउटपुट
