Satura rādītājs:
- 1. darbība. Padziļināšana: kā attēlu straumē var noteikt objektu kustību?
- 2. solis: binarizācija
- 3. solis: paplašiniet
- 4. darbība: kontūru (un to centrālo) meklēšana
- 5. solis: Centorid kustība un objektu skaitīšana
Video: Raspberry Pi Objektu skaitīšana: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Datoru redze, bez šaubām, ir fantastiska lieta! Izmantojot to, dators iegūst spēju “redzēt” un labāk uztvert apkārtējo vidi, kas ļauj izstrādāt sarežģītas, noderīgas un foršas lietojumprogrammas. Tādas lietojumprogrammas kā sejas noteikšana un atpazīšana, objektu izsekošana un objektu noteikšana mūsu ikdienas aktivitātēs arvien vairāk parādās, pateicoties datora redzes uzlabojumiem.
Ņemot vērā to, cik uzlabotas un pieejamas ir datora redzes sistēmas un rīki, šajā rakstā aprakstītā lietojumprogramma labi iederas: izmantojot vienkāršu Raspberry PI un bezmaksas un atvērtā pirmkoda datora redzes ietvaru, ko sauc par OpenCV, lai saskaitītu kustībā esošos objektus un precīzāk objekti iekļūst noteiktā uzraudzības zonā un iziet no tās.
1. darbība. Padziļināšana: kā attēlu straumē var noteikt objektu kustību?
Tagad ir pienācis laiks padziļināties attēlu apstrādes lietās:
kā iegūt tīmekļa kameras straumes attēlus un noteikt, ka tur kaut kas ir pārvietots
Tas sastāv no pieciem soļiem:
1. darbība: lai izceltu kustībā esošo objektu
Kā noteikts klasiskajā fizikā, ir nepieciešama atsauce, lai noteiktu, vai kaut kas kustas vai stāv. Šeit, lai noteiktu, vai kaut kas ir pārvietots, tas ir gandrīz vienāds: katrs tīmekļa kameras straumes uzņemtais kadrs tiks salīdzināts ar atsauces rāmi. Ja kaut kas ir citādi, kaut kas ir pārvietots. Tas ir vienkārši, kā izklausās.
Šis atskaites rāmis ir jāfiksē vispilnīgākajos apstākļos (piemēram, nekas nedrīkst kustēties). Attēlu apstrādes pasaulē šis salīdzinājums starp uzņemto kadru un atsauces rāmi sastāv no tehnikas, ko sauc par fona atņemšanu. Fona subtrācija sastāv no burtiski atņemt pikseļu krāsu informāciju no uzņemtā rāmja un atsauces rāmja. Tātad, šī procesa rezultātā iegūtais attēls izceļ / parāda ar sīkāku informāciju tikai to, kas atšķiras starp šiem diviem kadriem (vai kas ir pārvietojis / ieguvis kustību), un viss pārējais attēlā būs melns (pelēkā krāsā nulles vērtības krāsa) -mēroga pikseļi). Svarīgi! Apgaismojuma nosacījumi un tīmekļa kameras attēla kvalitāte (uzņemšanas sensoru kvalitātes dēļ) katrā kadrā var nedaudz atšķirties. Tas nozīmē, ka "vienādas daļas" no atsauces rāmja un citiem kadriem pēc fona atņemšanas nebūs pilnīgi melnas. Neskatoties uz šo uzvedību, šī projekta turpmākajās darbībās nav nopietnu seku.
Lai samazinātu attēlu apstrādes laiku, pirms fona subtitrēšanas uzņemtais rāmis un atsauces rāmis tiek pārveidoti par pelēkās skalas attēlu. Bet kāpēc? Tā ir skaitļošanas efektivitātes problēma: attēlam, kurā ir vairākas krāsas (krāsains attēls), ir trīs informācija par vienu pikseļu: sarkanā, zilā un zaļā krāsu sastāvdaļas (vecais, bet zelta RGB standarts). Tātad matemātiski katru pikseļu var definēt kā trīs vērtību masīvu, no kuriem katrs attēlo krāsu komponentu. Tāpēc, attiecinot to uz visu attēlu, gala attēls patiesībā būs trīs attēla komponentu sajaukums: sarkanā, zilā un zaļā attēla komponenti.
Lai to apstrādātu, ir nepieciešams daudz darba! Tomēr pelēkās skalas attēlos katram pikselim ir tikai viena krāsu informācija. Tātad krāsaina attēla apstrāde ir trīs reizes lēnāka nekā pelēkās skalas attēla gadījumā (vismaz trīs reizes, atkarībā no izmantotās tehnikas). Un ir vēl vairāk: dažiem mērķiem (piemēram, šim projektam) visu krāsu apstrāde nav nepieciešama vai svarīga. Tāpēc mēs nonācām pie secinājuma: pelēka mēroga attēlu izmantošana ir ļoti ieteicama attēlu apstrādes nolūkos. Pēc subtitrēšanas fonā ir jāizmanto Gausa izplūšanas filtrs.
Gausa izplūšanas filtrs, kas uzklāts virs fona atņemtam attēlam, izlīdzina visas kustīgā noteiktā objekta kontūras. Protams, tas palīdzēs turpmākajos attēlu apstrādes posmos.
2. solis: binarizācija
Vairumā attēlu apstrādes gadījumu binarizācija ir gandrīz obligāts solis pēc attēla izceltajiem objektiem / rakstzīmēm. Iemesls: binārajā attēlā katrai pikseļa krāsai var būt tikai divas vērtības: 0x00 (melna) vai 0xFF (balta). Tas ļoti palīdz attēlu apstrādei, lai turpmākajās darbībās izmantotu vēl mazāk "skaitļošanas jaudas", lai izmantotu attēlu apstrādes metodes. Binarizāciju var veikt, salīdzinot katru pelēkās skalas attēla pikseļu krāsu ar noteiktu slieksni. Ja pikseļu krāsas vērtība ir lielāka par slieksni, šī pikseļu krāsa pieņems balto vērtību (0xFF), un, ja pikseļu krāsas vērtība ir zemāka par slieksni, šī pikseļu krāsa uzņems melno vērtību (0x00). Diemžēl sliekšņa vērtību nav tik viegli izdarīt. Tas ir atkarīgs no vides faktoriem, piemēram, apgaismojuma apstākļiem. Nepareiza sliekšņa vērtības izvēle var sabojāt visus turpmākos soļus. Tāpēc es stingri iesaku pirms jebkādu turpmāku darbību manuāli pielāgot projekta slieksni. Šai robežvērtībai jānodrošina, lai kustīgais objekts tiktu parādīts binārajā attēlā. Manā gadījumā pēc sliekšņa adekvātas izvēles rodas tas, ko redzat 5. attēlā.
5. attēls - binārais attēls
3. solis: paplašiniet
Līdz šim bija iespējams noteikt kustīgus objektus, izcelt tos un piemērot binarizāciju, kā rezultātā tika iegūts diezgan skaidrs kustīga objekta attēls (= diezgan skaidrs objekta attēls attēlu apstrādes nolūkos). Gatavošanās objektu skaitīšanai ir gandrīz pabeigta. "Gandrīz" šeit nozīmē, ka pirms došanās tālāk ir jāveic nelieli pielāgojumi. Šajā brīdī pastāv reālas iespējas, ka objektos ir “caurumi” (melnas pikseļu masas baltā izceltajā objektā). Šie caurumi var būt jebkas, sākot no īpašiem apgaismojuma apstākļiem līdz kādai objekta formas daļai. Kad caurumi reālos objektos var "radīt" nepatiesus objektus (atkarībā no tā, cik lieli un kur tie atrodas), caurumu klātbūtnes attēla sekas var būt katastrofālas objektu skaitīšanai. Veids, kā novērst šos caurumus, ir izmantot attēlu apstrādes tehnoloģiju, ko sauc par Dilate. Izmantojiet to, un caurumi pazūd.
4. darbība: kontūru (un to centrālo) meklēšana
Šajā brīdī mums ir izcelti objekti, bez caurumiem un esam gatavi nākamajam: kontūru (un tā centra) meklēšanai. OpenCV ir resursi kontūru automātiskai noteikšanai, taču noteiktās kontūras ir jāizvēlas saprātīgi (lai izvēlētos tikai reālo objektu vai objektus). Tātad, kontūru noteikšanas kritērijs ir objekta laukums, kas mērīts pikseļos². Ja kontūrai ir lielāks laukums nekā ierobežojums (konfigurēts programmatūrā), tāpēc tas jāuzskata par reālu saskaitāmu objektu. Šī apgabala ierobežojuma/kritēriju izvēle ir ļoti svarīga, un slikta izvēle šeit nozīmē nepareizus skaitījumus. Jums jāizmēģina dažas apgabala vērtību ierobežojumu vērtības un jāpārbauda, kas vislabāk atbilst jūsu lietojumam. Neuztraucieties, šo ierobežojumu nav tik grūti atrast / pielāgot. Kad visi attēla objekti ir atlasīti, nākamais solis ir uzzīmēt uz tā retangli (šajā retangā ir jāiekļauj viss atklātais objekts). Un šī taisnstūra centrs ir…. objekts centrālais! Varbūt jūs domājat: "Kas ir liels darījums ar šo simtdaļu?", Vai ne? Šeit ir jūsu atbilde: nav svarīgi, cik liela vai kāda ir objekta forma, tā kustība ir tāda pati kā centroidam. Citiem vārdiem sakot: šis vienkāršais punkts, ko sauc par centroidu, attēlo visu objekta kustību. Tas tagad padara skaitīšanu ļoti vienkāršu, vai ne? Skatiet attēlu zemāk (6. attēls), kur objekta centrālais punkts ir attēlots kā melns punkts.
5. solis: Centorid kustība un objektu skaitīšana
Lielais fināls: salīdziniet objekta centrālās koordinātas ar ieejas un izejas līniju koordinātām un izmantojiet iepriekš aprakstīto skaitīšanas algoritmu. Un tiks skaitīti kustīgi objekti!
Galīgais rezultāts Kā parādīts šī ziņojuma sākumā, šeit ir projekts darbībā:
Ieteicams:
Skaitīšana no 0 līdz 9999 ar 8051, izmantojot 7 segmentu displeju: 5 soļi
Skaitīšana no 0 līdz 9999 ar 8051, izmantojot 7 segmentu displeju: Sveiki visiem! Šajā apmācībā mēs jums pastāstīsim, kā skaitīt no 0 līdz 9999, izmantojot četrus 7 segmentu displejus, izmantojot tikai vienu portu un 4 digitālās tapas
Pensijas pulkstenis / skaitīšana uz augšu / Dn pulkstenis: 4 soļi (ar attēliem)
Retirement Clock / Count Up / Dn Clock: man bija daži no šiem 8x8 LED punktmatricas displejiem atvilktnē un domāju, ko ar tiem iesākt. Iedvesmojoties no citiem norādījumiem, man radās ideja izveidot atpakaļskaitīšanas/atpakaļskaitīšanas displeju, lai skaitītu atpakaļ līdz nākamajam datumam/laikam un, ja mērķa laiks ir
Automātiska punktu skaitīšana nelielai Skee-Ball spēlei: 10 soļi (ar attēliem)
Automātiska punktu skaitīšana nelielai Skee-Ball spēlei: mājās gatavotas Skee-Ball spēles var sagādāt lielu prieku visai ģimenei, taču to trūkums vienmēr ir bijis automātiskās punktu skaitīšanas trūkums. Iepriekš esmu izveidojis Skee-Ball mašīnu, kas spēles bumbiņas sadalīja atsevišķos kanālos, pamatojoties uz sc
Raspberry Pi objektu noteikšana: 7 soļi
Raspberry Pi objektu noteikšana: šajā rokasgrāmatā ir sniegti soli pa solim norādījumi, kā Raspberry Pi iestatīt TensorFlow objektu noteikšanas API. Izpildot šajā rokasgrāmatā norādītās darbības, jūs varēsit izmantot savu Raspberry Pi, lai veiktu objektu noteikšanu tiešraides video no P
Skaitīšana un pielīdzināšana binārajā versijā: 6 soļi
Skaitīšana un pielīdzināšana binārajā versijā: sniedziet vispārīgu instrukciju aprakstu, kas ir mans otrais binārais norādījums. Tas attiecas uz matemātiskajiem vienādojumiem, kas veikti binārā. 1. sadaļā parādīts, kā ar rokām saskaitīt bināro, bet 2. sadaļā - rakstiskā formā. Tikai piezīme, kas