Satura rādītājs:

Raspberry Pi Objektu skaitīšana: 5 soļi
Raspberry Pi Objektu skaitīšana: 5 soļi

Video: Raspberry Pi Objektu skaitīšana: 5 soļi

Video: Raspberry Pi Objektu skaitīšana: 5 soļi
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Jūlijs
Anonim
Raspberry Pi objektu skaitīšana
Raspberry Pi objektu skaitīšana

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?

Padziļināties: kā attēlu straumē var noteikt objektu kustību?
Padziļināties: 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

Binarizācija
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

Kontūru (un to centrālo) meklēšana
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: