Мазмуну:
- 1 -кадам: Таанылган объектке тик бурчтук тартуу
- 2 -кадам: Объект кыймылга келген жолду издеңиз
- 3 -кадам: Эки кодду интеграциялоо
Video: Opencv объектилерине көз салуу: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Кыймылдуу объекттерди аныктоо - бул компьютердин көрүү жана сүрөттү иштетүү үчүн колдонулган ыкма. Видеодогу бир нече ырааттуу кадрлар ар кандай ыкмалар менен салыштырылып, кандайдыр бир кыймылдуу объект табылганын аныктайт.
Кыймылдуу объекттерди аныктоо видеобайкоо, активдүүлүктү таануу, жолдун абалын көзөмөлдөө, аэропорттун коопсуздугу, деңиз чегарасында коргоонун мониторинги ж.
Кыймылдуу объекттерди аныктоо - бул белгилүү бир жерде же аймакта объектинин физикалык кыймылын таануу. [2] Кыймылдуу объектилердин жана кыймылсыз аймактын же региондун ортосунда сегменттөө аркылуу, кыймылдуу объекттердин кыймылын көзөмөлдөп, кийинчерээк анализдөөгө болот. Буга жетүү үчүн, видео - бул бир кадрларга курулган структура, кыймылдуу объектти аныктоо - бул ар бир видео кадрда же кыймылдуу максат видеонун биринчи көрүнүшүн көрсөткөндө гана алдыңкы пландагы кыймылдуу бута (ларды) табуу.
Мен Opnecv жана Python комбинациясын колдонуп, түскө негизделген объектилерди байкап, байкап турам
1 -кадам: Таанылган объектке тик бурчтук тартуу
Эгерде сиздин компьютериңизде python же opencv жок болсо, төмөндөгү бузулбай турган нерселерди аткарыңыз
бул жерде python коду:
nv катары cv2import numpy импорттоо
cap = cv2. VideoCapture (0)
чын болсо:
_, frame = cap.read () hsv = cv2.cvtColor (кадр, cv2. COLOR_BGR2HSV)
low_yellow = np.array ([20, 110, 110])
жогорку_сары = np.array ([40, 255, 255])
yellow_mask = cv2.inRange (hsv, төмөнкү_сары, жогорку_сары)
(_, контурлар, _) = cv2.findContours (yellow_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
контурдагы контур үчүн:
аянты = cv2.contourArea (контур)
эгерде (аймак> 800):
x, y, w, h = cv2.boundingRect (contour) frame = cv2.cectangle (frame, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("көз салуу", кадр)
k = cv2.waitKey (5) & 0XFF
if k == 27: break
cv2.destroyAllWindows ()
cap.release ()
2 -кадам: Объект кыймылга келген жолду издеңиз
жолду байкоо үчүн:
i үчүн диапазондо (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if 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], борбордук_пункттар , (b, g, r), 4)
3 -кадам: Эки кодду интеграциялоо
Мен экөөнүн кодун бириктирейин деп жатам
cv2import numpy катары np импорттоо коллекциялардан туш келди импорттоо
cap = cv2. VideoCapture (1)
# Объект барган бардык чекиттерди көзөмөлдөө үчүн center_points = deque ()
чын болсо:
# Окуп, фреймди _, кадр = cap.read () кадр = cv2.flip (кадр, 1)
# Кадрды бир аз бүдөмүктөтүңүз
blur_frame = cv2. GaussianBlur (кадр, (7, 7), 0)
# BGRден HSV түс форматына которуу
hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)
# Табуу үчүн hsv түсүнүн төмөнкү жана жогорку диапазонун аныктаңыз. Бул жерде көк
төмөнкү_көк = np.array ([100, 50, 50]) жогорку_көк = 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.moments (эң чоң_контур) centre_of_contour = (int (учурлар ['m10'] / моменттер ['m00']), int (учурлар ['m01'] / моменттер ['m00'])) cv2. тегерек (алкак, centre_of_contour, 5, (0, 0, 255), -1)
# Контурду тегерек менен байла
эллипс = cv2.fitEllipse (ири_контур) cv2.ellipse (кадр, эллипс, (0, 255, 255), 2)
# Контурдун борборун сактаңыз, андыктан биз аны көзөмөлдөөчү линияны тартабыз
center_points.appendleft (центр_контуру)
# Контурдун борбордук чекиттеринен сызык чийиңиз
i үчүн диапазондо (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if 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], борбордук_пункттар , (b, g, r), 4)
cv2.imshow ('оригинал', кадр)
cv2.imshow ('маска', маска)
k = cv2.waitKey (5) & 0xFF
if k == 27: break
cv2.destroyAllWindows ()
cap.release ()
Сунушталууда:
MPU-6000 жана Arduino Nano колдонуу менен кыймылга көз салуу: 4 кадам
MPU-6000 жана Arduino Nano колдонуу менен кыймылга көз салуу: MPU-6000-бул 3-октук акселерометр жана 3-октук гироскоп бар 6-октук кыймылга көз салуу сенсору. Бул сенсор 3 өлчөмдүү тегиздикте объекттин так ордун жана жайгашуусун эффективдүү көзөмөлдөөгө жөндөмдүү. Аны мен иштете алам
Микро: бит MU Vision Sensor - Объектилерге көз салуу: 7 кадам
Микро: бит MU Vision Sensor - Объектилерге көз салуу: Ошентип, бул көрсөтмөдө биз ушул үйрөтмөдө курулган Smart Carди программалоону баштайбыз жана бул көрсөтмөдө MU көрүнүш сенсорун орноттук. бир аз жөнөкөй объектилерди көзөмөлдөө менен, андыктан
MPU-6000 жана Raspberry Pi менен кыймылга көз салуу: 4 кадам
MPU-6000 жана Raspberry Pi менен кыймылга көз салуу: MPU-6000-бул 3-октук акселерометр жана 3-октук гироскоп бар 6-октук кыймылга көз салуу сенсору. Бул сенсор 3 өлчөмдүү тегиздикте объекттин так ордун жана жайгашуусун эффективдүү көзөмөлдөөгө жөндөмдүү. Аны мен иштете алам
Өзүңүздүн SMS SMS Коопсуздук Көз салуу системаңызды жасаңыз: 5 кадам (Сүрөттөр менен)
Өзүңүздүн GPS SMS Көзөмөл системаңызды түзүңүз: Бул долбоордо мен сизге SIM5320 3G модулун Arduino менен пьезоэлектрдик өзгөрткүчтү шок сенсору катары кантип айкалыштырууну көрсөтөм, ал сизге коопсуздукту көзөмөлдөө системасын түзүү үчүн SMS аркылуу баалуу унаа
Микро: бит MU Vision Sensor - Объекттерге көз салуу: 6 кадам
Микро: бит MU Vision Sensor - Объектилерге көз салуу: Бул микро: бит үчүн MU көрүү сенсоруна менин төртүнчү көрсөтмөм. Бул жерде мен микро: бит менен объектилерди кантип көзөмөлдөө керектигин жана OLED экранына координаттарды жазууну карап көрөм. Башка гиддеримде микро: битти кантип туташтыруу керектиги жөнүндө айтып бердим