Სარჩევი:
- ნაბიჯი 1: მართკუთხედის დახატვა აღიარებულ ობიექტზე
- ნაბიჯი 2: იპოვნეთ გზა, რომელშიც გადავიდა ობიექტი
- ნაბიჯი 3: ორივე კოდის ინტეგრირება
ვიდეო: Opencv ობიექტის თვალყურის დევნება: 3 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:16
მოძრავი ობიექტის გამოვლენა არის ტექნიკა, რომელიც გამოიყენება კომპიუტერული ხედვისა და სურათის დამუშავების პროცესში. ვიდეოს მრავალი ზედიზედ კადრი შედარებულია სხვადასხვა მეთოდით, რათა დადგინდეს აღმოჩენილია რაიმე მოძრავი ობიექტი.
მოძრავი საგნების გამოვლენა გამოყენებულია პროგრამების ფართო სპექტრში, როგორიცაა ვიდეო მეთვალყურეობა, საქმიანობის ამოცნობა, გზის მდგომარეობის მონიტორინგი, აეროპორტის უსაფრთხოება, საზღვრის გასწვრივ დაცვის მონიტორინგი და ა.
მოძრავი ობიექტის გამოვლენა არის ობიექტის ფიზიკური მოძრაობის ამოცნობა მოცემულ ადგილას ან რეგიონში. [2] მოძრავი საგნებისა და სტაციონარული ფართობის ან რეგიონის სეგმენტირების მოქმედებით, მოძრავი საგნების მოძრაობა შეიძლება თვალყური ადევნოს და ამით მოგვიანებით გაანალიზდეს. ამის მისაღწევად, ჩათვალეთ, რომ ვიდეო არის სტრუქტურა, რომელიც აგებულია ერთ ჩარჩოზე, მოძრავი ობიექტების გამოვლენა არის წინა პლანზე მოძრავი სამიზნე (ების) პოვნა, თითოეული ვიდეოს ჩარჩოში, ან მხოლოდ მაშინ, როდესაც მოძრავი სამიზნე აჩვენებს ვიდეოს პირველ გამოჩენას.
მე ვაპირებ გამოვიყენო Opnecv და Python კომბინაცია, რათა დავადგინო და თვალყური ადევნო ობიექტებს ფერის მიხედვით
ნაბიჯი 1: მართკუთხედის დახატვა აღიარებულ ობიექტზე
თუ თქვენს კომპიუტერს არ აქვს პითონი ან ღია ვიდეო, მიჰყევით ქვემოთ მოცემულ ინსტრუქციას
აქ არის პითონის კოდი:
იმპორტი cv2 იმპორტი numpy როგორც np
cap = cv2. ვიდეო გადაღება (0)
მართალია:
_, ჩარჩო = cap.read () hsv = cv2.cvtColor (ჩარჩო, cv2. COLOR_BGR2HSV)
ქვედა_ ყვითელი = np. მასივი ([20, 110, 110])
ზედა_ ყვითელი = np. მასივი ([40, 255, 255])
ყვითელი_ ნიღაბი = cv2.inRange (hsv, ქვედა_ ყვითელი, ზედა_ ყვითელი)
(_, კონტურები, _) = cv2.findContours (yellow_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
კონტურებისთვის კონტურებისთვის:
ფართობი = cv2.contourArea (კონტური)
თუ (ფართობი> 800):
x, y, w, h = cv2.bounding
cv2.imshow ("თვალთვალი", ჩარჩო)
k = cv2.waitKey (5) & 0XFF
თუ k == 27: შესვენება
cv2.destroyAllWindows ()
cap. გამოშვება ()
ნაბიჯი 2: იპოვნეთ გზა, რომელშიც გადავიდა ობიექტი
გზის დასადგენად:
მე დიაპაზონში (1, ლენ (ცენტრალური_პუნქტები)): ბ = შემთხვევითი. რანდიტი (230, 255) გ = შემთხვევითი. რანდიტი (100, 255) r = შემთხვევითი. რანდინტი (100, 255) თუ მათემატიკა. sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ჩარჩო, ცენტრის_ წერტილები [i - 1], ცენტრის_ წერტილები , (b, g, r), 4)
ნაბიჯი 3: ორივე კოდის ინტეგრირება
მე ვაპირებ ორივე კოდის ინტეგრირებას
იმპორტი cv2 იმპორტი numpy როგორც np იმპორტი შემთხვევითი კოლექციიდან იმპორტი დეკე
cap = cv2. ვიდეო გადაღება (1)
# თვალყური ადევნეთ ყველა იმ ადგილს, სადაც ობიექტი მოინახულა ცენტრი_პუნქტები = გადახრა ()
მართალია:
# წაიკითხეთ და გადაატრიალეთ ჩარჩო _, ჩარჩო = cap.read () ჩარჩო = cv2.flip (ჩარჩო, 1)
# ოდნავ დაბინდეთ ჩარჩო
blur_frame = cv2. GaussianBlur (ჩარჩო, (7, 7), 0)
# გადაიყვანეთ BGR– დან HSV ფერის ფორმატში
hsv = cv2.cvtColor (ბუნდოვანი ჩარჩო, cv2. COLOR_BGR2HSV)
# განსაზღვრეთ hsv ფერის ქვედა და ზედა დიაპაზონი გამოვლენის მიზნით. აქ ლურჯი
ქვედა_ ლურჯი = np.array ([100, 50, 50]) above_blue = np.array ([140, 255, 255]) ნიღაბი = cv2.inRange (hsv, ქვედა_ ლურჯი, ზედა_ ლურჯი)
# გააკეთეთ ელიფსური ბირთვი
ბირთვი = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# გახსნის მორფი (ეროზია რასაც მოჰყვება გაფართოება)
ნიღაბი = cv2.morphologyEx (ნიღაბი, cv2. MORPH_OPEN, ბირთვი)
# იპოვნეთ ყველა კონტური
კონტურები, იერარქია = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
თუ len (კონტურები)> 0:
# იპოვეთ უდიდესი კონტური უდიდესი_კონტური = მაქსიმუმი (კონტურები, გასაღები = cv2.contourArea)
# იპოვეთ კონტურის ცენტრი და დახაზეთ შევსებული წრე
მომენტები = cv2. მომენტები (უდიდესი_კონტური) centre_of_contour = (int (მომენტები ['m10'] / მომენტები ['m00']), int (მომენტები ['m01'] / მომენტები ['m00'])) cv2.წრე (ჩარჩო, ცენტრის_კონკურსი, 5, (0, 0, 255), -1)
# შეკრული კონტური წრეზე
ელიფსი = cv2.fitEllipse (უდიდესი_კონტური) cv2.ellipse (ჩარჩო, ელიფსი, (0, 255, 255), 2)
# შეინახეთ კონტურის ცენტრი, ასე რომ ჩვენ დავხატავთ მის თვალთვალის ხაზს
center_points.appendleft (centre_of_contour)
# დახაზეთ ხაზი კონტურის ცენტრალური წერტილებიდან
მე დიაპაზონში (1, ლენ (ცენტრალური_პუნქტები)): b = შემთხვევითი. რანდიტი (230, 255) გ = შემთხვევითი. რანდიტი (100, 255) r = შემთხვევითი. რანდიტი (100, 255) თუ მათემატიკა. sqrt ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ჩარჩო, ცენტრის_ წერტილები [i - 1], ცენტრის_ წერტილები , (b, g, r), 4)
cv2.imshow ('ორიგინალური', ჩარჩო)
cv2.imshow ("ნიღაბი", ნიღაბი)
k = cv2.waitKey (5) & 0xFF
თუ k == 27: შესვენება
cv2.destroyAllWindows ()
cap. გამოშვება ()
გირჩევთ:
მოძრაობის თვალყურის დევნება MPU-6000 და ნაწილაკების ფოტონის გამოყენებით: 4 ნაბიჯი
მოძრაობის თვალყურის დევნება MPU-6000 და ნაწილაკების ფოტონის გამოყენებით: MPU-6000 არის 6 ღერძიანი მოძრაობის თვალთვალის სენსორი, რომელსაც აქვს 3 ღერძიანი ამაჩქარებელი და 3 ღერძიანი გიროსკოპი. ამ სენსორს შეუძლია ეფექტურად აკონტროლოს ობიექტის ზუსტი მდებარეობა და მდებარეობა სამგანზომილებიან სიბრტყეში. მისი დასაქმება შესაძლებელია
ადამიანის თვალის მოძრაობის თვალყურის დევნება: 6 ნაბიჯი
ადამიანის თვალის მოძრაობის თვალყურის დევნება: ეს პროექტი მიზნად ისახავს ადამიანის თვალის მოძრაობის დაფიქსირებას და აჩვენებს მის მოძრაობას თვალის ფორმაში მოთავსებული LED ნათურების ნაკრებზე. ამ ტიპის პროექტს პოტენციურად ბევრი გამოყენება ექნება რობოტიკის სფეროში და კონკრეტულად ჰუმას
მოძრაობის თვალყურის დევნება MPU-6000 და Arduino Nano გამოყენებით: 4 ნაბიჯი
მოძრაობის თვალყურის დევნება MPU-6000 და Arduino Nano: MPU-6000 არის 6 ღერძიანი მოძრაობის თვალთვალის სენსორი, რომელსაც აქვს 3 ღერძიანი ამაჩქარებელი და 3 ღერძიანი გიროსკოპი. ამ სენსორს შეუძლია ეფექტურად აკონტროლოს ობიექტის ზუსტი მდებარეობა და მდებარეობა სამგანზომილებიან სიბრტყეში. მისი დასაქმება შესაძლებელია
მიკრო: ბიტი MU Vision Sensor - ობიექტის თვალყურის დევნება: 7 ნაბიჯი
Micro: bit MU Vision Sensor - Object Tracking: ასე რომ, ამ ინსტრუქციურად ჩვენ ვაპირებთ დავიწყოთ Smart Car– ის პროგრამირება, რომელსაც ჩვენ ვაშენებთ ამ ინსტრუქციურად და რომ ჩვენ დავაყენებთ MU ხედვის სენსორს ამ ინსტრუქტაჟში. ჩვენ ვაპირებთ მიკრო პროგრამირებას: ცოტა მარტივი ობიექტის თვალყურის დევნებით, ასე რომ
ობიექტის თვალყურის დევნება - კამერის დამონტაჟების კონტროლი: 4 ნაბიჯი
Object Tracking - Camera Mount Control: გამარჯობა ყველას, ამ ინსტრუქციებში მე გაჩვენებთ პროგრესს ჩემი ობიექტის თვალთვალის პროექტისათვის. აქ ნახავთ წინა ინსტრუქციულ გზას: https://www.instructables.com/id/Object-Tracking/ და აქ შეგიძლიათ ნახოთ youtube დასაკრავი სიები ყველა