Talaan ng mga Nilalaman:

RoboPhoto - isang Mosaic Generator para sa Publiko: 4 na Hakbang
RoboPhoto - isang Mosaic Generator para sa Publiko: 4 na Hakbang

Video: RoboPhoto - isang Mosaic Generator para sa Publiko: 4 na Hakbang

Video: RoboPhoto - isang Mosaic Generator para sa Publiko: 4 na Hakbang
Video: The Immortal Hulk: Full Story (The Big Spill) 2024, Nobyembre
Anonim
Image
Image
RoboPhoto - isang Mosaic Generator para sa Publiko
RoboPhoto - isang Mosaic Generator para sa Publiko
RoboPhoto - isang Mosaic Generator para sa Publiko
RoboPhoto - isang Mosaic Generator para sa Publiko

Ang RoboPhoto ay isang real-time na generator ng photomosaic

Lumilikha ang RoboPhoto ng isang photomosaic ng mga gumagamit nito - habang naghihintay ka.

Sa pamamagitan ng paggamit ng mga modernong digital na diskarte tulad ng pagproseso ng imahe, pagkilala sa mukha at artipisyal na katalinuhan, ang RoboPhoto ay may kakayahang lumikha ng isang photomosaic ng lahat ng mga bisita na naglalakad nang nakaraan at pinindot ang pindutan nito - sa real time.

Sa tuwing pinipindot ang pindutan, kuha ang larawan ng taong nasa kamay. Agad na ang bawat larawan ay na-scan at binibigyang kahulugan ng RoboPhoto. Pagkatapos ay babaguhin ng RoboPhoto software ang lahat ng indibidwal na imahe - upang ito ay maging bahagi ng isang mas malaking imahe, at pagkatapos ay i-print ang nabagong larawan sa isang sticker na may label na isang hanay ng mga coordinate na nagpapahiwatig ng lokasyon ng bawat larawan sa loob ng mas malaking imahe. Pagkatapos ay tinanong ang bawat bisita na maglagay ng kanilang sariling photo-sticker sa isang mas malaking canvas na naglalaman lamang ng kaukulang grid.

Sa panahon ng pagpapatakbo ng RoboPhoto, isang bagong imahe ang malilikha. Isang photomosaic na binubuo ng mga indibidwal na larawan na gagaya ng isang paunang natukoy na 'target-image'.

Nagpapatakbo din ang RoboPhoto sa mode na solong-gumagamit. Kapag na-configure sa ganitong paraan, lumilikha ang RoboPhoto ng isang buong mosaic ng isang solong gumagamit.

Mga gamit

  • Isang Windows 10 PC na may naka-install na Visual Studio at IoT na mga pakete
  • Isang Raspberry Pi 3B + na may naka-install na Microsoft Windows 10 IoT
  • Isang printer ng kulay na label (Brother VC-500W)
  • Isang malaking pulang pindutan na naka-mount sa isang pedestal para sa pag-input ng gumagamit
  • Isang screen ng HDMI para sa feedback ng gumagamit
  • Isang Microsoft Xbox Kinect v2 camera - ninakaw mula sa aking anak na lalaki- upang kumuha ng litrato
  • Isang network (Wifi, LAN)
  • Isang target na grid. Isang sheet ng papel na may isang grid na nakalimbag dito-puno ng mga coordinate. Ang grid ng papel na ito ay ginagamit bilang canvas kung saan maaaring dumikit ng mga bisita ang kanilang litrato sa itinalagang mga coordinate. At sa paglaon ay magkakasama silang magbubuo ng huling resulta: isang magandang bagong photomosaic.

Ginamit ang isang icrosoft Kinect 2.0 camera dahil maaari itong tumagal ng mga malalim na imahe. Ang tampok na ito ay ginagamit upang lumikha ng isang virtual greenscreen sa bawat indibidwal na litratista. Sa ganitong paraan maaaring maipinta muli ng RoboPhoto ang background sa bawat indibidwal na litrato upang maitugma ang kulay ng isang target na piraso sa loob ng mosaic-to-be.

Hakbang 1: Paano Ito Gumagana

Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana
Paano Ito Gumagana

Ang RoboPhoto ay isang pag-install na naglalaman ng isang pedestal na may malaking pulang pindutan dito, isang computer na may naka-label na printer, at isang maliit na aparato ng IoT na humahawak sa User Interface (screen at pindutan). Sa aking kaso: isang RaspBerry 3B +.

  1. Nagpapatakbo ang RoboPhoto sa loob ng isang lokasyon na maa-access ng publiko at (pagkatapos na i-on ito) na self-operating. Kapag tumatakbo, ang dumadaan na mga bisita ay hinihikayat ng RoboPhoto na pindutin ang malaking pulang pindutan.
  2. Kailan man pinindot ang malaking pulang pindutang iyon, kukuha ng larawan ang bisita ng RoboPhoto na pinindot lamang ang pindutan gamit ang Kinect camera.
  3. Pagkatapos gagamitin ng RoboPhoto ang advanced A. I. at mga kasanayan sa pagproseso ng imahe upang baguhin ang bawat larawan upang tumugma sa isang piraso sa loob ng mosaic-to-be. Upang makamit ito, muling pininturahan ng RoboPhoto ang background ng bawat larawan upang tumugma sa kulay ng isang piraso ng target sa loob ng isang paunang na-load na imahe. Matapos ang pag-edit, nai-print ng RoboPhoto ang na-edit na larawan sa isang sticker kasama ang isang hanay ng mga coordinate na pin-point ang lokasyon ng isang sticker na ito sa loob ng mosaic.

  4. Pagkatapos ay hilingin sa gumagamit na ilagay ang sticker sa mosaic target-sheet.
  5. At sa gayon - pagkatapos ng maraming tao ay bumisita - isang bagong piraso ng sining ang lilitaw. Upang lumikha ng isang mosaic kakailanganin mo ng maraming mga indibidwal na piraso. Nakakuha ako ng disenteng mga resulta na tumatakbo sa 600 piraso

Maaari ding gumana ang RoboPhoto sa solong-user-mode.

Sa pagsasaayos na ito, lumilikha ang RoboPhoto ng isang buong mosaic ng iyong na-edit na mga larawan mula sa isang solong gumagamit. Matapos ang pagpindot sa pindutan, ang RoboPhoto ay kukunan ng halos> 600 magkakaibang mga larawan ng gumagamit, at pagkatapos ay i-edit at ayusin ang lahat ng ito upang makabuo ng isang solong bagong mosaic, nilikha pagkatapos ng isang paunang napiling target na imahe.

Hakbang 2: Pag-iipon ng Hardware

Pag-iipon ng Hardware
Pag-iipon ng Hardware
Pag-iipon ng Hardware
Pag-iipon ng Hardware

Tulad ng ipinakita sa larawan sa itaas, ang Win 10 PC ay konektado sa Kinect camera. Ang Kinect ay dapat na konektado sa pamamagitan ng USB 3.0. Sa oras na nilikha ko ang RoboPhoto - walang magagamit na Raspberry Pi na may USB 3.0. *

Ginagamit din ang PC upang hawakan ang pag-print sa nakakabit na labelprinter. Sa aking kaso isang Kapatid na VC-500W. Isang medyo murang label ng kulay ng sambahayan. Gayunpaman, ito ay napakabagal. Mas mahusay na gumamit ng isang propesyonal kung maaari mo.

Ang Big Red Button ay nakakabit sa isang Raspberry Pi 3B +. Ang mga wire na4 lamang ang nakakabit sa GPIO. Ito lamang ang kinakailangang paghihinang na nagawa sa Instructable na ito. Nagbibigay din ang Pi ng feed-back sa aming bisita sa pamamagitan ng isang 7 TFT na screen sa HDMI.

Upang malinis ito, nagtayo ako ng isang kahoy na pedestal na naglalaman ng lahat ng mga sangkap na ito.

Sa tabi ng pedestal, laban sa dingding, inilalagay ang isang sheet ng papel na naglalaman ng target-grid at mga coordinate (A1 / A2). Dahil ang label ng printer na ginamit ko ay pinalaki ng labelwidth = 2, 5 cm, lahat ng mga parisukat sa grid na ito ay sumusukat sa 2, 5cm x 2, 5cm.

* Ngayon, nag-aalok ang Raspberry Pi4 ng USB3.0. Maaaring patakbuhin ang Alse W10 sa aparato. Kaya't dapat na posible nang teoretikal na lumikha ng isang RoboPhoto v2.0 nang hindi ginagamit ang isang PC. Marahil ay bibigyan ako ng Covid '19 ng sapat na oras sa aking sarili upang mai-publish sa lalong madaling panahon ang naturang isang Instructable.

Hakbang 3: Pagsulat ng Code

Pagsulat ng Code
Pagsulat ng Code
Pagsulat ng Code
Pagsulat ng Code

Code

Ang RoboPhoto ay nilikha kasama ang VisualStudio bilang isang solusyon sa dalawang proyekto:

  1. Ang isang application ng Windows Forms sa PC ay nagho-host ng isang TCP server at paghawak ng input ng Kinect
  2. Isang Raspberry Pi 3B + na nagho-host ng isang client ng TCP sa loob ng isang UWP na namumuno sa application (itinakda bilang startup-app) upang hawakan ang mga kaganapan sa pindutan ng Button at ibigay ang gumagamit ng feedback sa pamamagitan ng 7 "TFT na screen.

Sa diagram sa itaas, sinubukan kong bigyan ka ng isang ideya kung ano ang ginagawa ng aking malambot. Ang Visual Studio na isinulat ko upang likhain ito (walang pasubali na 100% na nagtatrabaho) RoboPhoto solution ay ibinigay sa Instructable na ito. Gayunpaman dapat kong babalaan ang lahat na nagpapababa sa file na ito: Ang code na aking sinulat ay malayo sa kaakit-akit at madalas na nakasalalay sa aking dev-PC. Kaya hinihimok ko ang lahat na lumikha ng isang mas mahusay, mas mahusay, at mas matatag na solusyon.

1drv.ms/u/s!Aq7eBym1bHDKkKcigYzt8az9WEYOOg…

Network

Sa halimbawang code, ang code ng Pi ay na-deploy sa pamamagitan ng Visual Studio sa isang IPAddress sa aking network. Marahil ay dapat mong baguhin ito upang magkasya sa iyo. Upang magawa ito - mag-right click sa proyekto ng client ng ARM pagkatapos buksan ang solusyon sa Visual Studio, pagkatapos ay pumili ng mga pag-aari at sipiin ang halagang Remote machine sa IPAddress ng iyong sariling Pi. Gayundin kailangan mong payagan ang trapiko mula sa client papunta sa server sa port 8123 sa loob ng Windows Firewall sa server (PC). Kung pinatakbo mo ang solusyon mula sa Visual Studio, dapat itong hilingin sa iyo na gawin ito para sa U.

Habang ang pag-cod ay nagkakaproblema ako sa pagkuha ng W32 & UWP upang makipag-usap nang maayos. Nakuha ko itong gumagana sa pamamagitan ng paggamit ng dalawang magkakahiwalay na klase sa client at server: resp MyEchoClient.cs (sa ARM client) at ConnectionClient.cs (hanlding client koneksyon sa server).

Mga file na mosaic - pasadyang klase

Lumilikha ang RoboPhoto ng mga mosaic upang gayahin ang isang target-image. Ang target-image na ito, at lahat ng mga indibidwal na litrato na magkakasamang bumubuo ng mosaic-to-be, pati na rin ang ilang iba pang mga pag-aari ng bawat RoboPhoto ay nakaimbak sa mga file sa isang filesystem. Ang aking kasamang code ay gumagamit ng isang hanay ng mga file at folder sa direktoryo c: / tmp / MosaicBuilder. Sa loob ng folder na ito, babasahin ng code ang lahat ng mga subfolder na may isang foldername na nagsisimula sa [prj_] bilang mga folder ng proyekto ng mosaic. Sa loob ng lahat ng mga folder na [prj_] susubukan nitong buksan ang isang projectfile na pinangalanang [_projectdata.txt] na naglalaman ng lahat ng impormasyong kinakailangan para sa bawat proyekto.

Ang nasabing isang projectfile ay binubuo ng:

  1. ang buong landas at filename ng target na imahe ng proyektong ito
  2. ang buong landas kung saan nakaimbak ang mga indibidwal na litrato (piraso) ng proyektong ito
  3. Bilang ng mga haligi na maglalaman ang mosaic
  4. Bilang ng mga hilera na maglalaman ang mosaic

Ang mga halimbawang proyekto ay ibinibigay sa zip file: / slnBBMosaic2 / wfMosaicServerKinect / bin / x86 / Debug / prj_xxx

Sa C # server code, lahat ng paghawak ng mosaic ay ginagawa sa pamamagitan ng isang pasadyang klase: BBMosaicProject.cs

Microsoft Kinect v2.0 - Greenscreen

Upang makunan lamang ng litrato ang gagawin ng anumang camera. Ngunit ginamit ko ang Microsoft Kinect v2.0 upang pagsamahin ang mga imahe ng kulay at lalim na mga imahe. Sa ganitong paraan, maaaring malikha ang isang epekto ng greenscreen. Ang background sa lahat ng mga imahe ng kulay na natanggap mula sa Kinect ay papalitan ng isang pare-parehong berdeng ibabaw (BBBackgroundRemovalTool.cs).

Isang sanggunian sa Microsoft. Kinect ay idinagdag sa serverproject.

EMGU

Sapagkat kailangan naming siguraduhin na ang isang tao ay nasa litrato na kinunan noong pinindot ang pindutan, idinagdag ang mga kakayahan sa pagkilala sa mukha sa RoboPhoto.

www.nuget.org/packages/Emgu. CV/3.4.3.3016

Lamang kapag ang isang tao ay nasa loob ng larawan, ang greenscreen sa larawang ito ay papalitan ng isang pare-parehong kulay na ibabaw, na may mga kulay-code na katumbas ng avarage na kulay ng targetpiece sa mosaic-to-be na larawang ito.

Hakbang 4: Salamat

Salamat
Salamat

Salamat sa pagbabasa ng aking Instructable. Ito ang aking una. Sana nagustuhan mo ito.

Inirerekumendang: