Turinys:

Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją: 8 žingsniai (su nuotraukomis)
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją: 8 žingsniai (su nuotraukomis)

Video: Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją: 8 žingsniai (su nuotraukomis)

Video: Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją: 8 žingsniai (su nuotraukomis)
Video: Part 2 - The Adventures of Tom Sawyer Audiobook by Mark Twain (Chs 11-24) 2024, Liepa
Anonim
Image
Image
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją
Tikra veikianti Hario Poterio lazdelė naudojant kompiuterio viziją

„Bet kokia pakankamai pažangi technologija nesiskiria nuo magijos“- Arthur C. Clarke

Prieš keletą mėnesių mano brolis lankėsi Japonijoje ir turėjo tikrą burtininko patirtį Hario Poterio burtininkų pasaulyje „Universal Studios“, kuri tapo įmanoma naudojant „Computer Vision“technologiją.

Hario Poterio burtininkų pasaulyje „Universal Studios“turistai tam tikrose vietose (kur įdiegta judesio fiksavimo sistema) gali atlikti „tikrą magiją“, naudodami specialiai pagamintas lazdeles su šviesą atspindinčiomis karoliukais antgalio gale. Lazdelių galima nusipirkti iš tikros „Ollivander's“parduotuvės, kurios yra visiškai tokios, kaip parodyta „Hario Poterio“filmuose, tačiau nepamirškite: „Lazdelė pasirenka vedlį“: P

Tose tam tikrose vietose, jei asmuo atlieka tam tikrą gestą su lazdele, judesio fiksavimo sistema atpažįsta gestą ir visi gestai atitinka tam tikrą užkeikimą, kuris sukelia tam tikrą veiklą apylinkėse, pvz., Įjungia fontaną ir pan.

Taigi, šioje instrukcijoje aš parodysiu, kaip galite sukurti pigią ir veiksmingą judesio fiksavimo sistemą namuose, kad atliktumėte „tikrą magiją“, atidarę dėžutę lazdelės brūkštelėjimu: D naudodami tik įprastą naktinio matymo kamerą, šiek tiek elektronikos, ir šiek tiek python kodo naudojant „OpenCV Computer Vision“biblioteką ir mašinų mokymąsi !!!

1 žingsnis: pagrindinė idėja ir reikalingos dalys

Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys
Pagrindinė idėja ir reikalingos dalys

Lazdelės, kurios „Universal Studios“yra perkamos iš Hario Poterio burtininkų pasaulio, antgalio gale turi atspindintį karoliuką. Tie šviesą atspindintys karoliukai atspindi daug infraraudonųjų spindulių, kuriuos judesio fiksavimo sistemoje skleidžia fotoaparatas. Taigi, tai, ką mes, žmonės, suvokiame kaip ore besisukančio lazdelės galiuką, judesio fiksavimo sistema suvokia kaip ryški dėmė, kurią galima lengvai išskirti vaizdo įrašo sraute ir sekti, kad atpažintų asmens nupieštą modelį ir atliktų reikiamus veiksmus. Visas šis apdorojimas vyksta realiu laiku, naudojant kompiuterinį matymą ir mašinų mokymąsi.

Paprasta naktinio matymo kamera gali būti naudojama kaip mūsų fotoaparatas judesio fiksavimui, nes ji taip pat skleidžia infraraudonąją šviesą, kuri nėra matoma žmonėms, bet gali būti aiškiai matoma naudojant fotoaparatą, kuriame nėra infraraudonųjų spindulių filtro. Taigi vaizdo srautas iš fotoaparato tiekiamas į aviečių pi, turinčią „python“programą, kurioje veikia „OpenCV“, kuri naudojama lazdelės galiukui aptikti, izoliuoti ir sekti. Tada mes naudojame SVM (Simple Vector Machine) mašininio mokymosi algoritmą, kad atpažintume nubrėžtą modelį ir atitinkamai valdytume aviečių pi GPIO, kad atliktume tam tikrą veiklą.

Reikalingos medžiagos:

1) „A Raspberry Pi 3“modelis B ir reikalingi priedai, tokie kaip klaviatūra ir pelė

2) „Raspberry Pi NoIR“(be infraraudonųjų spindulių) kameros modulis

3) Hario Poterio lazdelė su šviesą atspindinčiu antgaliu: nesijaudinkite, jei jos neturite. Galima naudoti bet ką su šviesą atspindinčiu elementu. Taigi, galite naudoti bet kokią lazdelę primenančią lazdelę ir ant jos galiuko uždėti šviesą atspindinčią juostą, dažus ar karoliukus, ir ji turėtų veikti taip, kaip parodyta Williamo Osmano vaizdo įraše: Žiūrėti vaizdo įrašą

4) 10 infraraudonųjų spindulių šviesos diodų

5) Jūsų pasirinktas 3D spausdintuvas ir PLA gija

6) 12V - 1A sieninis adapteris ir nuolatinės srovės lizdas

7) Servo variklis

8) Senoji dėžė ir spiegas nuo ciklo rato

9) Karštas klijų pistoletas

10) Kai kurių su Hariu Poteriu susijusių logotipų ir vaizdų atspaudai ant blizgaus popieriaus lapo

11) Žali ir geltoni aksomo lakštai.

PASTABA: Aš taip pat bandžiau naudoti seną įprastą internetinę kamerą naktiniam matymui, pašalindamas jos infraraudonųjų spindulių filtrą, bet galiausiai sugadinau/išstūmiau objektyvą, o tai labai paveikė vaizdo kokybę ir negalėjau juo naudotis. Bet jei norite tai išbandyti, galite pereiti prie šio puikaus pamokomo Spustelėkite čia

2 veiksmas: įdiekite „OpenCV“modulį

Dabar atėjo laikas pirmajam ir turbūt ilgiausiam šio projekto žingsniui: „OpenCV“modulio diegimas ir kūrimas jūsų „Raspberry Pi“.

„OpenCV“modulio priklausomybių įdiegimas neužima daug laiko, tačiau kūrimo procesas gali užtrukti iki 2–3 valandų! Taigi, sagtis aukštyn !!: P

Internete yra daug vadovėlių, kuriais galite vadovautis įdiegdami „OpenCV 4.1.0“modulį. Štai nuoroda, kurią sekiau: Spustelėkite čia

PASTABA: primygtinai rekomenduoju įdiegti „OpenCV“modulį virtualioje aplinkoje, kaip parodyta vadovėlyje, nes tai padės išvengti įvairių konfliktų, kylančių diegiant skirtingų modulių priklausomybes arba dirbant su skirtingomis „python“versijomis.

3 veiksmas: fotoaparato laikiklio spausdinimas

Fotoaparato laikiklio spausdinimas
Fotoaparato laikiklio spausdinimas
Fotoaparato laikiklio spausdinimas
Fotoaparato laikiklio spausdinimas
Fotoaparato laikiklio spausdinimas
Fotoaparato laikiklio spausdinimas

„NoIR picamera“neturi infraraudonųjų spindulių filtro, todėl gali būti naudojama kaip naktinio matymo kamera, tačiau vis tiek trūksta infraraudonųjų spindulių šviesos šaltinio. Visos naktinio matymo kameros turi savo infraraudonųjų spindulių šviesos šaltinį, kuris tamsoje išskleidžia IR spindulius, kurie yra nematomi plika akimi, tačiau spindulius fotoaparatas gali matyti be infraraudonųjų spindulių filtro, kai jie atsispindi nuo bet kokio objekto.

Taigi, mums iš esmės reikia infraraudonųjų spindulių šviesos šaltinio ir kažko, prie kurio būtų galima pritvirtinti fotoaparatą. Tam aš sukūriau paprastą 3D objekto modelį, ant kurio galėjome pritvirtinti fotoaparatą, kurį apsupsime 10 IR lempučių apskritime. Modelis buvo sukurtas naudojant „SketchUp“ir atspausdintas „Black PLA“per maždaug 40 minučių.

4 žingsnis: Užbaikite fotoaparato laikiklį

Fotoaparato laikiklio užbaigimas
Fotoaparato laikiklio užbaigimas
Fotoaparato laikiklio užbaigimas
Fotoaparato laikiklio užbaigimas
Fotoaparato laikiklio užbaigimas
Fotoaparato laikiklio užbaigimas

Atspausdinus modelį, pirmiausia jį nušlifavau 80 smėlio švitriniu popieriumi, o tada pradėjau dėti IR lemputes į jų skyles pagal aukščiau pateiktą schemą.

Aš pritvirtinau šviesos diodus savo vietoje karštais klijais, tada sujungiau dviejų iš eilės einančių šviesos diodų teigiamus ir neigiamus laidus ir tada lituojau, kad sukurtų nuoseklų LED jungtį.

Teigiamas vieno laido laidas ir neigiamas šalia jo esantis laidas apačioje liko nesulituoti, kad būtų galima prijungti teigiamus ir neigiamus 12 voltų sieninio adapterio galus.

5 žingsnis: apmokytas mašinų mokymosi modelis

Norėdami atpažinti asmens nupieštą raidę, aš išmokau mašininio mokymosi modelį, pagrįstą „Support Vector Machine“(SVM) algoritmu, naudodamas ranka rašytų anglų kalbos abėcėlių duomenų rinkinį, kurį radau čia. SVM yra labai veiksmingi mašinų mokymosi algoritmai, kurie gali suteikti didelį tikslumą, šiuo atveju apie 99,2%! Skaitykite daugiau apie SVM

Duomenų rinkinys yra.csv failo formos, kurią sudaro 785 stulpeliai ir daugiau nei 300 000 eilučių, kur kiekviena eilutė reiškia 28 x 28 vaizdą, o kiekvienoje tos eilutės stulpelyje yra to vaizdo taško vertė su papildomu stulpeliu pradžioje, kurioje yra etiketė, skaičius nuo 0 iki 25, kiekvienas atitinka anglišką raidę. Naudodamas paprastą „Python“kodą, supjaustiau duomenis, kad gaučiau visus vaizdus tik iš dviejų norimų raidžių (A ir C), ir paruošiau jiems modelį.

Pridedu apmokytą modelį (alphabet_classifier.pkl), taip pat mokymo kodą, nedvejodami pereikite prie jo arba atlikite bet kokius pakeitimus, kad mokytumėte modelį skirtingomis raidėmis arba išbandytumėte skirtingus algoritmus. Paleidus programą, jis automatiškai išsaugo apmokytą modelį tame pačiame kataloge, kuriame išsaugotas jūsų kodas.

6 žingsnis: Kodas, kuris leidžia tai padaryti

Kodas, kuris leidžia tai padaryti !!
Kodas, kuris leidžia tai padaryti !!

Sukūrus apmokytą modelį, paskutinis žingsnis yra parašyti „Raspberry Pi“python programą, kuri leidžia mums atlikti šiuos veiksmus:

  • Pasiekite vaizdo įrašą iš „picamera“realiuoju laiku
  • Vaizdo įraše aptikti ir sekti baltas dėmeles (šiuo atveju lazdelės galiukas, šviečiantis naktiniame matyme)
  • Pradėkite sekti judančios dėmės kelią vaizdo įraše po tam tikro įvykio (paaiškinta toliau)
  • Sustabdyti sekimą po kito įvykio (paaiškinta toliau)
  • Grąžinkite paskutinį kadrą su vartotojo nupieštu šablonu
  • Atlikite išankstinį rėmo apdorojimą, pvz., Slenksčio nustatymą, triukšmo pašalinimą, dydžio keitimą ir kt.
  • Prognozei naudokite apdorotą paskutinį kadrą.
  • Atlikite kažkokią magiją, valdydami „Raspberry Pi“GPIO pagal išankstinį nusistatymą

Šiam projektui sukūriau Hario Poterio tematikos dėžutę, kurią galiu atidaryti ir uždaryti naudodamas servo variklį, kurį valdo „Raspberry Pi“GPIO. Kadangi raidė „A“reiškia „Alohamora“(vienas garsiausių burtų iš Hario Poterio filmų, leidžianti burtininkui atidaryti bet kokią spyną !!), jei žmogus lazdele piešia raidę A, pi įsako servo atidarykite dėžutę. Jei asmuo piešia raidę „C“, kuri reiškia uždarymą (nes negalėjau sugalvoti tinkamo užburto užrakinimo ar užrakinimo būdo: P), pi liepia servo uždaryti dėžutę.

Visas darbas, susijęs su vaizdo/vaizdo įrašų apdorojimu, pvz., „BLOB“aptikimas, „BLOB“kelio sekimas, paskutinio kadro išankstinis apdorojimas ir kt., Atliekamas naudojant „OpenCV“modulį.

Pirmiau minėtiems įvykiams sukuriami du apskritimai vaizdo įraše realiuoju laiku-žalia ir raudona. Kai lašelis patenka į žalią apskritimą esančią sritį, programa pradeda sekti kelią, kurį nuėjo taškelis, ir tada asmuo gali pradėti kurti raidę. Kai dėmė pasiekia raudoną apskritimą, vaizdo įrašas sustabdomas ir paskutinis kadras perduodamas funkcijai, kuri atlieka išankstinį kadro apdorojimą, kad būtų paruoštas numatyti.

Šiame žingsnyje pridėjau kodo failus. Nesivaržykite tai pereiti ir atlikti bet kokius pakeitimus, kaip norite.

PASTABA: Turėjau sukurti du atskirus „Python“failus, skirtus dirbti su skirtingomis „python“versijomis, vieną, kuris importuoja „OpenCV“modulį („Python 2.7“), o kitą, kuris importuoja „Sklearn“modulį („Python 3.5“), kad būtų galima numatyti, įkeliant apmokytą modelį, nes mano „OpenCV“buvo įdiegtas „Python 2.7“versija, o „sklearn“buvo įdiegta „python 3.5“. Taigi, aš panaudojau papildomo proceso modulį, kad paleisčiau failą „HarryPotterWandsklearn.py“(numatyti) iš „HarryPotterWandcv.py“(visiems „opencv“darbams ir vaizdo įrašams realiuoju laiku) ir gausiu jo išvestį. Tokiu būdu turiu paleisti tik failą „HarryPotterWandcv.py“.

7 žingsnis: dėžutės atidarymo mechanizmas

Dėžutės atidarymo mechanizmas
Dėžutės atidarymo mechanizmas
Dėžutės atidarymo mechanizmas
Dėžutės atidarymo mechanizmas
Dėžutės atidarymo mechanizmas
Dėžutės atidarymo mechanizmas

Aplinkui gulėjau sena raudonos spalvos dėžutė, kurią panaudojau šiam projektui.

Dėžutės atidarymo mechanizmas:

  1. Aš karštai priklijavau servo prie galinio dėžutės galo ant kartono gabalo prie dėžutės krašto.
  2. Tada paėmiau stipiną nuo ciklo rato ir karštai priklijavau prie servo rankos.
  3. Kitas stipino galas buvo pritvirtintas prie dėžutės dangčio, naudojant vielos gabalėlį.
  4. Teigiamas servo darbas buvo prijungtas prie +5 V „Pin 2“„Raspberry Pi“.
  5. Neigiamas servo elementas buvo prijungtas prie GND kaiščio 39.
  6. Servo signalas buvo prijungtas prie 12 kaiščio

8 žingsnis: padarykite dėžutę „Hario Poterio“tema

„Hario Poterio“dėžutės kūrimas
„Hario Poterio“dėžutės kūrimas
„Hario Poterio“dėžutės kūrimas
„Hario Poterio“dėžutės kūrimas
„Hario Poterio“dėžutės kūrimas
„Hario Poterio“dėžutės kūrimas

Norėdami sukurti „Hario Poterio“dėžutės temą, ant blizgaus A4 formato lapo atspausdinau keletą spalvotų įvairių dalykų, tokių kaip „Hario Poterio“logotipas, „Hogvartso keteros“, kiekvieno iš keturių namų keteros ir tt, atvaizdus ir įklijavau juos ant dėžutės vietų.

Aš taip pat naudoju geltonos spalvos aksominį lakštą juostelėms supjaustyti ir įklijavau ant dangtelio, kad dėžutė taptų tokios pačios spalvos kaip „Gryffindor House“. Dangčio vidų ir servo kartoną uždengiau žaliu aksomo lakštu. Dangtelio vidinėje pusėje įklijavau daugiau simbolių ir emblemą su gyvūnais, atstovaujančiais kiekvienam Hogvartso mokyklos namui.

Tada pagaliau į dėžutę įdėjau visus su Hariu Poteriu susijusius dalykus, kuriuose buvo „Gryffindor“duslintuvas, dienoraštis su Hogvartso uniforma ir šiame projekte naudojama vyresnioji lazdelė: D

Rekomenduojamas: