Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-23 14:41
Liikkuvien kohteiden tunnistus on tekniikka, jota käytetään tietokoneen näkemisessä ja kuvankäsittelyssä. Videon useita peräkkäisiä ruutuja verrataan eri menetelmillä sen määrittämiseksi, havaitaanko liikkuva kohde.
Liikkuvien kohteiden havaitsemista on käytetty monenlaisiin sovelluksiin, kuten videovalvontaan, toiminnan tunnistamiseen, tien kunnon seurantaan, lentoasemien turvallisuuteen, suojelun seurantaan meren rajalla jne.
Liikkuvan kohteen havaitseminen tunnistaa kohteen fyysisen liikkeen tietyssä paikassa tai alueella. [2] Toimimalla segmentoimalla liikkuvien kohteiden ja paikallaan olevan alueen tai alueen välillä liikkuvien kohteiden liike voitaisiin seurata ja siten analysoida myöhemmin. Tämän saavuttamiseksi katsokaa, että video on yksittäisiin kehyksiin rakennettu rakenne. Liikkuvan kohteen havaitseminen on löytää etualan liikkuva kohde joko kustakin videokehyksestä tai vasta, kun liikkuva kohde näyttää videossa ensimmäisen kerran.
Aion käyttää Opnecv- ja Python -yhdistelmää esineiden havaitsemiseen ja seurantaan värin perusteella
Vaihe 1: Suorakulmion piirtäminen tunnistettuun kohteeseen
jos tietokoneessasi ei ole pythonia tai opencv: tä, noudata alla olevia ohjeita
tässä python -koodi:
tuo cv2import numpy np: nä
cap = cv2. VideoCapture (0)
vaikka totta:
_, frame = cap.read () hsv = cv2.cvtColor (kehys, cv2. COLOR_BGR2HSV)
alempi_keltainen = np.array ([20, 110, 110])
ylempi_keltainen = np.array ([40, 255, 255])
keltainen_maski = cv2.inRange (hsv, alempi_keltainen, ylempi_keltainen)
(_, ääriviivat, _) = cv2.findContours (keltainen_maski, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
ääriviivojen ääriviivat:
pinta -ala = cv2.contourArea (muoto)
jos (alue> 800):
x, y, w, h = cv2.boundingSuora (ääriviiva) -kehys = cv2.suorakulmio (kehys, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow ("seuranta", kehys)
k = cv2.waitKey (5) & 0XFF
jos k == 27: tauko
cv2.destroyAllWindows ()
cap.release ()
Vaihe 2: Jäljitä polku, johon kohde on siirtynyt
polun jäljittämiseksi:
i: lle alueella (1, len (keskipisteet)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt ((((keskipisteet [i - 1] [0] - keskipisteet [0]) ** 2) + ((keskipisteet [i - 1] [1] - keskipisteet [1]) ** 2)) <= 50: cv2.line (kehys, keskipisteet [i - 1], keskipisteet , (b, g, r), 4)
Vaihe 3: Molempien koodien integrointi
aion yhdistää molemmat koodit
Tuo cv2import numpy np: nä tuonti satunnaisesti kokoelmista tuonti deque
cap = cv2. VideoCapture (1)
# Seurata kaikkia pisteitä, joissa kohde vieraili center_points = deque ()
vaikka totta:
# Lue ja käännä kehys _, frame = cap.read () runko = cv2.flip (kehys, 1)
# Hämärtää kehystä hieman
blur_frame = cv2. GaussianBlur (kehys, (7, 7), 0)
# Muunna BGR: stä HSV -värimuotoon
hsv = cv2.cvtColor (sumennuskehys, cv2. COLOR_BGR2HSV)
# Määritä havaittavan hsv -värin alempi ja ylempi alue. Sininen täällä
alempi_sininen = np.array ([100, 50, 50]) ylä_sininen = np.array ([140, 255, 255]) maski = cv2.inRange (hsv, alempi_sininen, ylempi_sininen)
# Tee elliptinen ydin
kernel = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))
# Avausmorfia (eroosio, jota seuraa laajentuminen)
mask = cv2.morphologyEx (maski, cv2. MORPH_OPEN, ydin)
# Etsi kaikki ääriviivat
ääriviivat, hierarkia = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]
jos len (ääriviivat)> 0:
# Etsi suurin ääriviiva suurin_muoto = max (ääriviivat, avain = cv2.contourArea)
# Etsi muodon keskipiste ja piirrä täytetty ympyrä
hetket = cv2.moments (suurin_kontuuri) center_of_contour = (int (hetkiä ['m10'] / hetkiä ['m00']), int (hetkiä ['m01'] / hetkiä ['m00'])) cv2.circle (frame, muodon keskipiste, 5, (0, 0, 255), -1)
# Sido ääriviivat ympyrällä
ellipsi = cv2.fit
# Tallenna muodon keskipiste, jotta voimme piirtää viivan sen seurantaa varten
center_points.appendleft (muodon keskipiste)
# Piirrä viiva muodon keskipisteistä
i: lle alueella (1, len (keskipisteet)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt ((((keskipisteet [i - 1] [0] - keskipisteet [0]) ** 2) + ((keskipisteet [i - 1] [1] - keskipisteet [1]) ** 2)) <= 50: cv2.line (kehys, keskipisteet [i - 1], keskipisteet , (b, g, r), 4)
cv2.imshow ('alkuperäinen', kehys)
cv2.imshow ('naamio', naamio)
k = cv2.waitKey (5) & 0xFF
jos k == 27: tauko
cv2.destroyAllWindows ()
cap.release ()
Suositeltava:
GPS -seuranta: 6 vaihetta
GPS -seuranta: Hei kaverit, tässä videossa teemme GPS -seurannan käyttäen Esp 8266 (nodemcu) ja neo 6m GPS -moduulia, joten aloitetaan
Nest -termostaatti, käyttöasteen seuranta: 12 vaihetta
Nest -termostaatti, käyttöasteen seuranta: IFTTT on käyttänyt kotini jäähdytysautomaatiota Nest -termostaattini avulla viime aikoihin asti Life360: n "ensimmäisenä saapuneen" avulla. ja " viimeinen kotoa lähteminen " liipaisimet. Tämä oli hienoa, koska voisin lisätä perheenjäseniä Li: hen
Arduino, oven avaamisen seuranta Gmailin kautta: 6 vaihetta
Arduino, Oven avaamisen seuranta Gmailin kautta: Tässä opetusohjelmassa näytän sinulle, kuinka tunnistaa oven avaamistapahtuma ja lähettää ilmoituksen Gmailin kautta Arduino Unon avulla. Jos olet aloittelija, voit oppia wifistä ja anturista Arduinossa - WiFi ja Arduino - Ovianturin opetusohjelmat
DIY GPS -seuranta --- Python-sovellus: 5 vaihetta (kuvilla)
DIY GPS -seuranta --- Python-sovellus: Osallistuin pyöräilytapahtumaan kaksi viikkoa sitten. Kun olin valmis, halusin tarkistaa reitin ja nopeuden, jonka ajoin tuolloin. Valitettavasti sitä ei saavutettu. Nyt käytän ESP32: ta GPS -seurantalaitteen luomiseen ja otan sen tallentamaan pyöräilyreitini
Raspberry Pi Sisäilman seuranta- ja säätöjärjestelmä: 6 vaihetta
Raspberry Pi Sisäilman seuranta- ja säätöjärjestelmä: Ihmiset haluavat viihtyä kotonaan. Koska alueemme ilmasto ei ehkä sovi itsellemme, käytämme monia laitteita terveen sisäympäristön ylläpitämiseksi: lämmitin, ilmanjäähdytin, ilmankostutin, ilmankuivain, puhdistin jne. Nykyään se on