Talaan ng mga Nilalaman:

Nagbibilang ng Raspberry Pi na Bagay: 5 Mga Hakbang
Nagbibilang ng Raspberry Pi na Bagay: 5 Mga Hakbang

Video: Nagbibilang ng Raspberry Pi na Bagay: 5 Mga Hakbang

Video: Nagbibilang ng Raspberry Pi na Bagay: 5 Mga Hakbang
Video: Tanging gatas at prutas! 3 masarap na dessert sa loob ng 5 minuto! HINDI AKO NANINIWALA! 2024, Nobyembre
Anonim
Nagbibilang ng Raspberry Pi na Bagay
Nagbibilang ng Raspberry Pi na Bagay

Ang paningin sa computer, walang alinlangan, ay isang kamangha-manghang bagay! Gamit ito, nakukuha ng isang computer ang kakayahang "makita" at mas mahusay na maunawaan ang paligid, na nagbibigay-daan sa pagbuo ng mga kumplikado, kapaki-pakinabang at cool na mga application. Ang mga application tulad ng pagtuklas ng mukha at pagkilala, pagsubaybay sa bagay at pagtuklas ng bagay ay mas marami sa aming pang-araw-araw na mga aktibidad, salamat sa mga pagsulong sa paningin ng computer.

Isinasaalang-alang kung gaano advanced at naa-access ang mga framework at tool ng vision ng computer, umaangkop nang maayos ang application na inilarawan sa artikulong ito: gamit ang isang simpleng Raspberry PI at isang framework na walang bayad at bukas na mapagkukunan ng paningin ng computer na tinatawag na OpenCV upang mabilang ang mga bagay sa paggalaw, mas tiyak kung magkano ang mga bagay ay papasok at papalabas ng isang tiyak na sinusubaybayan na sona.

Hakbang 1: Pagkuha ng Malalim: Paano Makikita ang Kilusan ng Bagay sa isang Imahe na Imahe?

Pagkuha ng Mas Malalim: Paano Makikita ang Kilusan ng Bagay sa isang Imahe na Imahe?
Pagkuha ng Mas Malalim: Paano Makikita ang Kilusan ng Bagay sa isang Imahe na Imahe?

Ngayon ay oras na upang lumalim sa mga bagay sa pagproseso ng imahe:

kung paano makakuha ng ilang mga imahe ng stream ng webcam at tuklasin na may isang bagay na lumipat doon

Binubuo ito sa limang hakbang:

Hakbang 1: Upang mai-highlight ang bagay sa paggalaw

Tulad ng tinukoy sa klasikal na pisika, kinakailangan ang isang sanggunian upang mapasok na may gumagalaw na bagay o kung ito ay nakatayo pa rin. Dito, upang matukoy na may isang bagay na lumipat, halos pareho ito: ang bawat solong nakakuha ng frame ng webcam ay ihinahambing sa isang frame ng sanggunian. Kung ang isang bagay ay naiiba, may isang bagay na inilipat. Ito ay simple sa tunog nito.

Ang frame ng sanggunian na ito ay dapat makuha sa mga pinaka perpektong kondisyon (walang gumagalaw, halimbawa). Sa mundo ng pagproseso ng imahe, ang paghahambing na ito sa pagitan ng isang nakunan ng frame at isang sangguniang frame ay binubuo sa isang tekniko na tinatawag na pagbabawas sa background. Ang pagbagsak sa background ay binubuo sa literaly na ibawas ang impormasyon ng kulay ng pixel-to-pixel mula sa nakuha na frame at ang sanggunian na frame. Kaya, ang nagreresultang imahe mula sa proccess na ito ay i-highlight / ipapakita sa maraming mga detalye lamang kung ano ang naiiba sa pagitan ng dalawang mga frame na ito (o, kung ano ang lumipat / nakakuha ng paggalaw) at lahat ng iba pa ay magiging itim sa imahe (ang kulay ng zero na halaga sa isang kulay-abo -scale scale pixel) Mahalaga: ang mga kundisyon ng ilaw at kalidad ng nakunan ng imahe ng webcam (dahil sa kalidad ng pagkuha ng mga sensor) ay maaaring bahagyang mag-iba-iba mula sa bawat frame. Ipinapahiwatig nito na ang "pantay na mga bahagi" mula sa sanggunian na frame at isa pang mga frame ay hindi magiging kabuuang itim pagkatapos ng pagbabawas sa background. Sa kabila ng pag-uugaling ito, walang malubhang kahihinatnan sa mga susunod na hakbang sa pagproseso ng imahe sa proyektong ito.

Upang ma-minimize ang oras ng pagproseso ng imahe, bago gumawa ng isang background na pagbabagsak, ang nakunan ng frame at sangguniang frame ay na-convert sa isang kulay-abo na imahe ng scale. Pero bakit? Ito ay isang isyu sa pagiging epektibo ng computing: isang imahe na nagpapakita ng maraming kulay (imahe ng kulay) ay may tatlong impormasyon bawat pixel: Pula, Asul at Green na mga sangkap ng kulay (ang luma ngunit ginto na pamantayan ng RGB). Kaya, matematikal, ang bawat pixel ay maaaring tukuyin bilang isang tatlong-halaga na array, bawat isa ay kumakatawan sa isang sangkap ng kulay. Samakatuwid, pagpapalawak nito sa buong imahe, ang pangwakas na imahe ay talagang ang halo ng tatlong mga bahagi ng imahe: Pula, Asul at Green na mga bahagi ng imahe.

Upang maproseso ito, maraming trabaho ang kinakailangan! Gayunpaman, sa mga imahe na kulay-abo, ang bawat pixel ay may isang impormasyon lamang sa kulay. Kaya, ang pagproseso ng isang imahe ng kulay ay tatlong beses na mas mabagal kaysa sa grey-scale na kaso ng imahe (hindi bababa sa tatlong beses, depende sa kung anong kasangkot na pamamaraan). At mayroong higit pa: para sa ilang mga layunin (tulad ng proyektong ito), iproseso ang lahat ng mga kulay ay hindi kinakailangan o mahalaga sa lahat. Samakatuwid, napagpasyahan namin: ang paggamit ng mga imahe na kulay-abo ay lubos na inirerekomenda para sa layunin ng pagproseso ng imahe. Pagkatapos ng background subtration, kinakailangang mag-apply ng Gaussian Blur filter.

Ang Gaussian Blur filter na inilapat sa background na binawas na imahe ay makinis ang lahat ng mga contour ng gumagalaw na napansin na bagay. Para sigurado, makakatulong ito sa mga susunod na hakbang ng pagproseso ng imahe.

Hakbang 2: Binarization

Binarization
Binarization

Sa karamihan ng mga kaso ng pagproseso ng imahe, ang binarization ay halos isang sapilitan na hakbang pagkatapos mag-highlight ng mga object / characteristc sa isang imahe. Dahilan: sa isang binary na imahe, ang bawat kulay ng pixel ay maaaring magpalagay ng dalawang mga halaga lamang: 0x00 (itim) o 0xFF (puti). Malaki ang naitutulong nito sa pagproseso ng imahe upang mangailangan ng kahit kaunting "computing power" upang mailapat ang mga diskarte sa pagproseso ng imahe sa mga susunod na hakbang. Maaaring gawin ang binarization sa paghahambing ng bawat kulay ng pixel ng grey-scale na imahe sa isang tiyak na threshold. Kung ang halaga ng kulay ng pixel ay mas malaki kaysa sa threshold, ang kulay ng pixel na ito ay magpapalagay na puting halaga (0xFF), at kung ang halaga ng kulay ng pixel ay mas mababa kaysa sa threshold, ang kulay ng pixel na ito ay ipalagay ang itim na halaga (0x00). Sa kasamaang palad, ang pagpipilian ng halaga ng threshold ay hindi gaanong madaling gawin. Nakasalalay ito sa mga kadahilanan sa kapaligiran, tulad ng mga kondisyon sa pag-iilaw. Ang maling pagpili ng isang halaga ng threshold ay maaaring masira pa ang lahat ng mga hakbang. Kaya, masidhi kong inirerekumenda na ayusin mo nang manu-mano ang isang threshold sa proyekto para sa iyong kaso bago ang anumang karagdagang mga pagkilos. Ang halagang threshold na ito ay dapat tiyakin na ang gumagalaw na bagay ay nagpapakita sa binary na imahe. Sa aking kaso, pagkatapos ng sapat na pagpipilian ng isang threshold, nagreresulta sa nakikita mo sa pigura 5.

Larawan 5 - imaheng binary

Hakbang 3: Mag-dilate

Hanggang ngayon, posible na tuklasin ang mga gumagalaw na bagay, i-highlight ang mga ito at ilapat ang binarization, kung ano ang magreresulta sa isang malinaw na imahe ng gumagalaw na bagay (= medyo malinaw na imahe ng bagay para sa mga layunin sa pagproseso ng imahe). Ang paghahanda para sa pagbibilang ng object ay HALOS nagawa. Ang "HALOS" dito ay nangangahulugang mayroong ilang magagandang pagsasaayos na dapat gawin bago magpatuloy. Sa puntong ito, mayroong tunay na mga pagkakataong magkaroon ng "mga butas" sa mga bagay (itim na masa ng mga pixel sa puting naka-highlight na bagay). Ang mga butas na ito ay maaaring maging anumang, mula sa mga partikular na kundisyon ng pag-iilaw hanggang sa ilang bahagi ng hugis ng bagay. Kapag ang mga butas ay "makakagawa" ng mga maling bagay sa loob ng totoong mga bagay (nakasalalay sa kung gaano kalaki at kung saan sila matatagpuan), ang mga kahihinatnan ng pagkakaroon ng mga butas sa isang imahe ay maaaring maging sakuna sa pagbibilang ng mga bagay. Ang isang paraan upang matanggal ang mga butas na ito ay ang paggamit ng isang pagproseso ng imahe na Technic na tinatawag na Dilate. Gamitin ito at mawawala ang mga butas.

Hakbang 4: Ang Paghahanap para sa Mga Contour (at Mga Centroids Nito)

Ang Paghahanap para sa Mga Contour (at Mga Centroids Nito)
Ang Paghahanap para sa Mga Contour (at Mga Centroids Nito)

Sa puntong ito, mayroon kaming mga naka-highlight na bagay, walang mga butas sa loob nito at handa na para sa kung ano ang susunod: ang paghahanap para sa mga contour (at mga centroids nito). Mayroong mga mapagkukunan sa OpenCV upang tuklasin ang mga awtomatikong contour, ngunit ang napansin na mga counter ay dapat na matalinong pinili (upang piliin lamang ang totoong bagay o mga bagay). Kaya, ang mga pamantayan upang makita ang mga contour ay ang lugar ng object, sinusukat sa mga pixel ². Kung ang isang contour ay may mas mataas na lugar kaysa sa isang limitasyon (naka-configure sa software), kaya dapat itong isaalang-alang bilang isang tunay na bagay na mabibilang. Napakahalaga ng pagpili ng limitasyong / pamantayan ng lugar na ito, at ang isang hindi magandang pagpipilian dito ay nangangahulugang maling pagbibilang. Dapat mong subukan ang ilang mga limitasyon sa halaga ng halaga ng lugar at suriin kung ano ang mas umaangkop sa iyong paggamit. Huwag magalala, ang limitasyong ito ay hindi sohard upang maghanap / ayusin. Kapag ang lahat ng mga bagay sa imahe ay napili, ang susunod na hakbang ay upang gumuhit ng isang retangle dito (ang retangle na ito ay dapat maglaman ng isang buong natukoy na bagay sa loob nito). At ang gitna ng rektanggulo na ito ay …. ang object centroid! Iniisip mo siguro na "Ano ang big deal sa centroid na ito?", Tama? Narito ang iyong sagot: hindi mahalaga kung gaano kalaki o kung paano ang hugis ng bagay, ang paggalaw nito ay pareho ng centroid. Sa ibang salita: ang simpleng puntong ito na tinatawag na centroid ay kumakatawan sa lahat ng paggalaw ng bagay. Ginagawa nitong napaka-simple ang pagbibilang ngayon, hindi ba? Tingnan ang imahe sa ibaba (larawan 6), kung saan ang centroid ng bagay ay kinakatawan bilang isang itim na punto.

Hakbang 5: Kilusan ni Centorid at Pagbibilang ng Bagay

Ang grand finale: ihambing ang mga coordinate ng centroid ng object sa mga linya ng exit at exit na mga coordinate at ilapat ang pagbibilang ng algorythm na inilarawan dati. At magkakaroon ng pagbibilang ng mga gumagalaw na bagay!

Huling resulta Tulad ng ipinakita sa simula ng post na ito, narito ang proyekto na kumikilos:

Inirerekumendang: