विषयसूची:

ओपनसीवी ऑब्जेक्ट ट्रैकिंग: 3 चरण
ओपनसीवी ऑब्जेक्ट ट्रैकिंग: 3 चरण

वीडियो: ओपनसीवी ऑब्जेक्ट ट्रैकिंग: 3 चरण

वीडियो: ओपनसीवी ऑब्जेक्ट ट्रैकिंग: 3 चरण
वीडियो: Object Detection & Identification using ESP32 CAM Module & OpenCV 2024, नवंबर
Anonim
ओपनसीवी ऑब्जेक्ट ट्रैकिंग
ओपनसीवी ऑब्जेक्ट ट्रैकिंग

मूविंग ऑब्जेक्ट डिटेक्शन कंप्यूटर विज़न और इमेज प्रोसेसिंग में इस्तेमाल की जाने वाली तकनीक है। एक वीडियो से कई लगातार फ्रेम की तुलना विभिन्न तरीकों से की जाती है ताकि यह निर्धारित किया जा सके कि कोई चलती वस्तु का पता चला है या नहीं।

वीडियो निगरानी, गतिविधि पहचान, सड़क की स्थिति की निगरानी, हवाई अड्डे की सुरक्षा, समुद्री सीमा के साथ सुरक्षा की निगरानी आदि जैसे अनुप्रयोगों की विस्तृत श्रृंखला के लिए चलती वस्तुओं का पता लगाने का उपयोग किया गया है।

मूविंग ऑब्जेक्ट डिटेक्शन किसी दिए गए स्थान या क्षेत्र में किसी वस्तु की भौतिक गति को पहचानना है।[2] चलती वस्तुओं और स्थिर क्षेत्र या क्षेत्र के बीच कार्य विभाजन द्वारा, चलती वस्तुओं की गति को ट्रैक किया जा सकता है और इस प्रकार बाद में विश्लेषण किया जा सकता है। इसे प्राप्त करने के लिए, मान लें कि एक वीडियो एकल फ़्रेम पर निर्मित एक संरचना है, चलती वस्तु का पता लगाने के लिए अग्रभूमि चलती लक्ष्य (ओं) को खोजना है, या तो प्रत्येक वीडियो फ्रेम में या केवल जब चलती लक्ष्य वीडियो में पहली उपस्थिति दिखाता है।

मैं रंग के आधार पर वस्तुओं का पता लगाने और उन्हें ट्रैक करने के लिए Opnecv और Python संयोजन का उपयोग करने जा रहा हूँ

चरण 1: मान्यता प्राप्त वस्तु पर एक आयत बनाना

यदि आपके पीसी में अजगर या ओपनसीवी नहीं है तो कृपया नीचे दिए गए निर्देशों का पालन करें

यहाँ अजगर कोड है:

आयात cv2आयात numpy np. के रूप में

टोपी = cv2.वीडियो कैप्चर (0)

जबकि सच:

_, फ्रेम = कैप.रीड () hsv = cv2.cvtColor (फ्रेम, cv2. COLOR_BGR2HSV)

निचला_पीला = np.array ([२०, ११०, ११०])

अपर_येलो = एनपी.एरे ([४०, २५५, २५५])

येलो_मास्क = cv2.inरेंज (एचएसवी, लोअर_येलो, अपर_येलो)

(_, आकृति, _) = cv2.findContours(येलो_मास्क, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)

समोच्च में समोच्च के लिए:

क्षेत्र = cv2.contourArea (समोच्च)

अगर (क्षेत्र> 800):

x, y, w, h = cv2.boundingRect(contour) फ्रेम = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 10)

cv2.imshow ("ट्रैकिंग", फ्रेम)

k = cv2.waitKey(5) और 0XFF

अगर कश्मीर == 27: तोड़ो

cv2.destroyAllWindows ()

कैप.रिलीज ()

चरण 2: उस पथ का पता लगाएं जिसमें वस्तु आगे बढ़ी है

पथ का पता लगाने के लिए:

के लिए मैं श्रेणी में (1, लेन (center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) अगर math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line (फ्रेम, केंद्र_बिंदु [i - 1], केंद्र_बिंदु , (बी, जी, आर), 4)

चरण 3: दोनों कोडों को एकीकृत करना

मैं दोनों कोड को एकीकृत करने जा रहा हूँ

आयात cv2आयात numpy np के रूप में संग्रह से यादृच्छिक आयात करें आयात deque

टोपी = cv2.वीडियो कैप्चर(1)

# उन सभी बिंदुओं पर नज़र रखने के लिए जहाँ ऑब्जेक्ट का दौरा किया गया था center_points = deque ()

जबकि सच:

# पढ़ें और फ्लिप करें फ्रेम _, फ्रेम = कैप। पढ़ें () फ्रेम = cv2.flip (फ्रेम, 1)

# फ्रेम को थोड़ा धुंधला करें

Blur_frame = cv2. GaussianBlur (फ़्रेम, (7, 7)), 0)

# बीजीआर से एचएसवी रंग प्रारूप में कनवर्ट करें

hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)

# पता लगाने के लिए एचएसवी रंग की निचली और ऊपरी सीमा को परिभाषित करें। यहाँ नीला

लोअर_ब्लू = एनपी.एरे ([१००, ५०, ५०]) अपर_ब्लू = एनपी.एरे ([१४०, २५५, २५५]) मास्क = cv2.inRange (एचएसवी, लोअर_ब्लू, अपर_ब्लू)

# अण्डाकार गिरी बनाएं

कर्नेल = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))

# ओपनिंग मॉर्फ (कटाव के बाद फैलाव)

मुखौटा = cv2.morphologyEx (मुखौटा, cv2. MORPH_OPEN, कर्नेल)

# सभी रूपरेखा खोजें

आकृति, पदानुक्रम = cv2.findContours(mask.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]

अगर लेन (समोच्च)> 0:

# सबसे बड़ा समोच्च खोजें

# समोच्च के केंद्र का पता लगाएं और भरा हुआ वृत्त बनाएं

पल = cv2.moments(biggest_contour) center_of_contour = (int(moments['m10'] / पलों['m00']), int(moments['m01'] / पलों['m00'])) cv2.circle(फ्रेम, center_of_contour, 5, (0, 0, 255), -1)

# कंटूर को सर्कल से बांधें

अंडाकार = cv2.fitEllipse(biggest_contour) cv2.ellipse(फ्रेम, अंडाकार, (0, 255, 255), 2)

# समोच्च के केंद्र को बचाएं ताकि हम इसे ट्रैक करने वाली रेखा खींच सकें

center_points.appendleft(centre_of_contour)

# समोच्च के केंद्र बिंदुओं से रेखा खींचना

के लिए मैं श्रेणी में (1, लेन (center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) अगर math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line (फ्रेम, केंद्र_बिंदु [i - 1], केंद्र_बिंदु , (बी, जी, आर), 4)

cv2.imshow ('मूल', फ्रेम)

cv2.imshow ('मुखौटा', मुखौटा)

k = cv2.waitKey(5) और 0xFF

अगर कश्मीर == 27: तोड़ो

cv2.destroyAllWindows ()

कैप.रिलीज ()

सिफारिश की: