Innholdsfortegnelse:
- Trinn 1: Tegn et rektangel på det gjenkjente objektet
- Trinn 2: Spor stien der objektet har flyttet seg
- Trinn 3: Integrering av begge kodene
Video: Opencv Object Tracking: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Deteksjon av bevegelige objekter er en teknikk som brukes i datasyn og bildebehandling. Flere påfølgende rammer fra en video blir sammenlignet med forskjellige metoder for å avgjøre om et objekt i bevegelse blir oppdaget.
Deteksjon av bevegelige objekter har blitt brukt til et bredt spekter av applikasjoner som videoovervåking, aktivitetsgjenkjenning, veistatusovervåking, flyplass sikkerhet, overvåking av beskyttelse langs sjøgrensen og etc.
Bevegelig gjenkjenning er å gjenkjenne den fysiske bevegelsen til et objekt på et gitt sted eller område. [2] Ved å virke segmentering mellom objekter i bevegelse og stasjonært område eller område, kan bevegelsen av objekter i bevegelse spores og dermed analyseres senere. For å oppnå dette, tenk på at en video er en struktur bygget på enkeltbilder, gjenkjenning av bevegelige objekter er å finne forflyttende mål (er) i forgrunnen, enten i hver videoramme eller bare når det bevegelige målet viser det første utseendet i videoen.
Jeg kommer til å bruke kombinasjonen Opnecv og Python for å oppdage og spore objektene basert på fargen
Trinn 1: Tegn et rektangel på det gjenkjente objektet
Hvis datamaskinen din ikke har python eller opencv, kan du følge dette nedenfor
her er python -koden:
import cv2import numpy som np
cap = cv2. VideoCapture (0)
mens det er sant:
_, frame = cap.read () hsv = cv2.cvtColor (frame, cv2. COLOR_BGR2HSV)
lavere_gul = np.array ([20, 110, 110])
upper_yellow = np.array ([40, 255, 255])
gul_maske = cv2.inRange (hsv, nedre_gul, øvre_gul)
(_, konturer, _) = cv2.findContours (gul_maske, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
for kontur i konturer:
område = cv2.contourArea (kontur)
hvis (område> 800):
x, y, w, h = cv2.boundingRect (kontur) ramme = cv2.rektangel (ramme, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("sporing", ramme)
k = cv2.waitKey (5) og 0XFF
hvis k == 27: pause
cv2.destroyAllWindows ()
cap.release ()
Trinn 2: Spor stien der objektet har flyttet seg
for å spore banen:
for i i område (1, len (sentrumspunkter)): 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 (frame, center_points [i - 1], center_points , (b, g, r), 4)
Trinn 3: Integrering av begge kodene
Jeg skal integrere begge koder
import cv2import numpy som np import tilfeldig fra samlinger import deque
cap = cv2. VideoCapture (1)
# For å holde oversikt over alle punktene der objektet besøkte center_points = deque ()
mens det er sant:
# Les og vend ramme _, ramme = cap.read () frame = cv2.flip (frame, 1)
# Slør rammen litt
blur_frame = cv2. GaussianBlur (ramme, (7, 7), 0)
# Konverter fra BGR til HSV fargeformat
hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)
# Definer nedre og øvre område av hsv -farge for å oppdage. Blå her
lower_blue = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255]) mask = cv2.inRange (hsv, lower_blue, upper_blue)
# Lag elliptisk kjerne
kjerne = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Åpningsmorph (erosjon etterfulgt av utvidelse)
mask = cv2.morphologyEx (mask, cv2. MORPH_OPEN, kjerne)
# Finn alle konturene
konturer, hierarki = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
hvis len (konturer)> 0:
# Finn den største konturen grutste_kontur = maks (konturer, nøkkel = cv2.contourArea)
# Finn kontursenteret og tegn en fylt sirkel
øyeblikk = cv2.moments (største_kontur) center_of_contour = (int (øyeblikk ['m10'] / øyeblikk ['m00']), int (øyeblikk ['m01'] / øyeblikk ['m00'])) cv2.circle (ramme, center_of_contour, 5, (0, 0, 255), -1)
# Bind konturen med sirkel
ellipse = cv2.fitEllipse (største_kontur) cv2.ellipse (ramme, ellipse, (0, 255, 255), 2)
# Lagre konturens midtpunkt, så vi tegner en linje som sporer den
center_points.appendleft (center_of_contour)
# Tegn linje fra midtpunktene i konturen
for i i område (1, len (sentrumspunkter)): 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 (frame, center_points [i - 1], center_points , (b, g, r), 4)
cv2.imshow ('original', ramme)
cv2.imshow ('maske', maske)
k = cv2.waitKey (5) og 0xFF
hvis k == 27: pause
cv2.destroyAllWindows ()
cap.release ()
Anbefalt:
Object Sensor Machine: 6 trinn
Object Sensor Machine: Videoen på toppen Introduksjon: Det er alltid et problem med at folk ikke vet hvor de legger tingene eller ikke vet om objektet er på rett sted, og folk glemmer alltid å ta ting og glemme putte den til sitt tilhørende sted. Så saken min
Raspberry Pi Object Detection: 7 trinn
Raspberry Pi Object Detection: Denne guiden gir trinnvise instruksjoner for hvordan du konfigurerer TensorFlows Object Detection API på Raspberry Pi. Ved å følge trinnene i denne veiledningen, vil du kunne bruke Raspberry Pi til å utføre gjenkjenning av objekter på livevideo fra en P
ChatterBox - Object Translator: 6 trinn
ChatterBox - Object Translator: En enhet som får et objekt til å snakke! Bruk med forsiktighet
WalabotEye - Object Tracker With Haptic Feedback: 11 trinn
WalabotEye - Object Tracker With Haptic Feedback: For synshemmede, bruk dette for å få en bedre forståelse av verden rundt deg
Raspberry Pi Object Counting: 5 trinn
Raspberry Pi Object Counting: Datasyn er uten tvil en fantastisk ting! Ved å bruke dette får en datamaskin muligheten til å " se " og oppdage miljøet rundt, hva som gjør det mulig å utvikle komplekse, nyttige og kule applikasjoner. Applikasjoner som fa