Talaan ng mga Nilalaman:

Gumawa ng isang Pi Trash Classifier Sa ML !: 8 Hakbang (na may Mga Larawan)
Gumawa ng isang Pi Trash Classifier Sa ML !: 8 Hakbang (na may Mga Larawan)

Video: Gumawa ng isang Pi Trash Classifier Sa ML !: 8 Hakbang (na may Mga Larawan)

Video: Gumawa ng isang Pi Trash Classifier Sa ML !: 8 Hakbang (na may Mga Larawan)
Video: Праздник. Новогодняя комедия 2024, Nobyembre
Anonim
Gumawa ng isang Pi Trash Classifier Sa ML!
Gumawa ng isang Pi Trash Classifier Sa ML!
Gumawa ng isang Pi Trash Classifier Sa ML!
Gumawa ng isang Pi Trash Classifier Sa ML!

Ang proyekto ng Trash Classifier, na may pagmamahal na kilala bilang "Saan ito pupunta ?!", ay dinisenyo upang gawing mas mabilis at mas maaasahan ang pagtatapon ng mga bagay.

Gumagamit ang proyektong ito ng isang modelo ng Machine Learning (ML) na sinanay sa Lobe, isang baguhan-friendly (walang code!) Tagabuo ng modelo ng ML, upang makilala kung ang isang bagay ay napupunta sa basura, pag-recycle, pag-aabono, o mapanganib na basura. Ang modelo ay nai-load sa isang Raspberry Pi 4 computer upang magamit ito saan ka man makahanap ng mga basurahan!

Tinuturo ka ng tutorial na ito kung paano lumikha ng iyong sariling proyekto ng Trash Classifier sa isang Raspberry Pi mula sa isang modelo ng Lobe TensorFlow sa Python3.

Pinagkakahirapan: Nagsisimula ++ (ang ilang kaalaman sa w / circuit at pag-coding ay kapaki-pakinabang)

Basahin ang Oras: 5 min

Oras ng Pagbuo: 60 - 90 min

Gastos: ~ $ 70 (kabilang ang Pi 4)

Mga Pantustos:

Software (panig sa PC)

  • Lobe
  • Ang WinSCP (o ibang paraan ng paglipat ng file ng SSH, ay maaaring gumamit ng CyberDuck para sa Mac)
  • Terminal
  • Remote na Koneksyon sa Desktop o RealVNC

Hardware

  • Raspberry Pi, SD Card, at USB-C power supply (5V, 2.5A)
  • Pi Camera
  • Pushbutton
  • 5 LEDs (4 na tagapagpahiwatig LEDs at 1 status LED)

    • Dilaw na LED: basura
    • Blue LED: recycle
    • Green LED: compost
    • Red LED: mapanganib na basura
    • White LED: katayuan
  • 6 220 Ohm resistors
  • 10 M-to-M jumper wires
  • Breadboard, kalahating sukat

Kung pipiliin mong maghinang:

  • 1 konektor ng JST, dulo lamang ng babae
  • 2 M-to-F jumper wires
  • 10 F-to-F jumper wires
  • PCB

Enclosure

  • Kaso ng proyekto (hal. Karton, kahoy, o plastik na kahon, tinatayang 6 "x 5" x 4 ")
  • 0.5 "x 0.5" (2cm x 2cm) malinaw na plastik na parisukat

    Hal. mula sa takip ng lalagyan ng plastik na pagkain

  • Velcro

Mga kasangkapan

  • Mga pamutol ng wire
  • Precision kutsilyo (hal. Exacto kutsilyo) at cutting mat
  • Bakal na bakal (opsyonal)
  • Mainit na natutunaw na tool (o iba pang di-conductive na pandikit - gumagana ang epoxy ngunit permanente)

Hakbang 1: Bago Kami Magsimula

Bago Kami Magsimula
Bago Kami Magsimula

Ipinapalagay ng proyektong ito na nagsisimula ka sa isang kumpletong pag-set-up na Raspberry Pi sa isang walang ulo na pagsasaayos. Narito ang isang gabay na nagsisimula sa pag-friendly sa kung paano ito gawin.

Nakatutulong din ito upang magkaroon ng kaunting kaalaman sa mga sumusunod:

  1. Pamilyar sa Raspberry Pi

    • Narito ang isang madaling gamiting gabay sa pagsisimula!
    • Nakatutulong din: Pagsisimula sa Pi camera
  2. Pagbasa at pag-edit ng Python code (hindi mo kailangang magsulat ng isang programa, i-edit lamang)

    Panimula sa Python kasama ang Raspberry Pi

  3. Pagbasa ng Fritzing mga diagram ng mga kable
  4. Paggamit ng isang pisara

    Paano gumamit ng isang tutorial sa breadboard

Alamin kung saan pumupunta ang iyong basurahan

Ang bawat lungsod sa buong US (at akala ko ang mundo) ay may sariling basura / recycling / compost / etc. sistema ng koleksyon. Nangangahulugan ito na upang makagawa ng isang tumpak na classifier ng basurahan, kakailanganin nating 1) bumuo ng isang pasadyang modelo ng ML (tatalakayin namin ito sa susunod na hakbang - walang code!) At 2) alam kung saan pumupunta ang bawat piraso ng basurahan.

Dahil hindi ko palaging alam ang tamang basurahan para sa bawat item na ginamit ko upang sanayin ang aking modelo, ginamit ko ang flyer ng Seattle Utilities (Larawan 1), at madaling gamitin din ang "Saan ito pupunta?" tool sa paghahanap para sa lungsod ng Seattle! Suriin kung anong mga mapagkukunan ang magagamit sa iyong lungsod sa iyo sa pamamagitan ng pagtingin sa utility sa pagkolekta ng basura ng iyong lungsod at pagtuklas sa website nito.

Hakbang 2: Lumikha ng isang Custom na ML Model sa Lobe

Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe
Lumikha ng isang Custom na ML Model sa Lobe

Ang Lobe ay isang madaling gamiting tool na mayroong lahat ng kailangan mo upang buhayin ang iyong mga ideya sa pag-aaral ng makina. Ipakita ito sa mga halimbawa ng kung ano ang nais mong gawin, at awtomatiko nitong sinasanay ang isang modelo ng pasadyang machine learning na maaaring ma-export para sa mga edge na aparato at app. Hindi ito nangangailangan ng anumang karanasan upang makapagsimula. Maaari kang magsanay sa iyong sariling computer nang libre!

Narito ang isang mabilis na pangkalahatang ideya sa kung paano gamitin ang Lobe:

1. Buksan ang programa ng Lobe at lumikha ng isang bagong proyekto.

2. Kumuha o mag-import ng mga larawan at lagyan ng label ang mga ito sa naaangkop na mga kategorya. (Larawan 1) Kakailanganin namin ang mga label na ito sa paglaon sa bahagi ng software ng proyekto.

Mayroong dalawang paraan upang mag-import ng mga larawan:

  1. Kumuha ng mga larawan ng mga item nang direkta mula sa iyong computer webcam, o
  2. Mag-import ng mga larawan mula sa mga mayroon nang mga folder sa iyong computer.

    Tandaan na ang pangalan ng folder ng larawan ay gagamitin bilang kategorya ng label ng kategorya, kaya tiyaking tumutugma ito sa mga umiiral nang label

Bukod: Natapos ako gamit ang parehong pamamaraan, dahil mas maraming mga larawan ang mayroon ka, mas tumpak ang iyong modelo.

3. Gamitin ang tampok na "Play" upang subukan ang katumpakan ng modelo. Baguhin ang mga distansya, ilaw, posisyon ng kamay, atbp upang makilala kung nasaan ang modelo at hindi tumpak. Magdagdag ng higit pang mga larawan kung kinakailangan. (Mga Larawan 3 - 4)

4. Kapag handa ka na, i-export ang iyong modelo ng Lobe ML sa isang format na TensorFlow (TF) Lite.

Mga Tip:

  • Bago mag-import ng mga larawan, gumawa ng isang listahan ng lahat ng mga kategorya na kakailanganin mo at kung paano mo nais na lagyan ng label ang mga ito (hal. "Basura," "recycle," "compost," atbp.)

    Tandaan: Gumamit ng parehong mga label tulad ng ipinakita sa larawan ng "Lobe Model Labels" sa itaas upang mabawasan ang dami ng code na kailangan mong baguhin

  • Isama ang isang kategorya para sa "hindi basurahan" na may mga larawan ng anupaman na maaaring nasa larawan (hal. Iyong mga kamay at braso, background, atbp.)
  • Kung maaari, kumuha ng mga larawan mula sa Pi Camera at i-import sa Lobe. Mapapabuti nito ang kawastuhan ng iyong modelo!
  • Kailangan mo ng maraming larawan? Suriin ang mga open-source na dataset sa Kaggle, kabilang ang hanay ng imahe ng pag-uuri ng basura!
  • Kailangan mo pa ba ng tulong? Kumonekta sa Lobe Coommunity sa Reddit!

Hakbang 3: Buuin Ito: Hardware

Buuin Ito: Hardware!
Buuin Ito: Hardware!
Buuin Ito: Hardware!
Buuin Ito: Hardware!
Buuin Ito: Hardware!
Buuin Ito: Hardware!

1. Maingat na ikonekta ang Pi Camera kay Pi (bisitahin ang gabay sa pagsisimula ng Pi Foundation para sa karagdagang impormasyon). (Larawan 1)

2. Sundin ang diagram ng mga kable upang ikonekta ang pushbutton at LEDs sa mga pin ng Pi GPIO.

  • Pushbutton: Ikonekta ang isang binti ng pushbutton sa GPIO pin 2. Ikonekta ang isa pa, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.
  • Dilaw na LED: Ikonekta ang positibo (mas mahabang) binti sa GPIO pin 17. Ikonekta ang iba pang mga binti, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.
  • Blue LED: Ikonekta ang positibong binti sa GPIO pin 27. Ikonekta ang iba pang mga binti, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.
  • Green LED: Ikonekta ang positibong binti sa GPIO pin 22. Ikonekta ang iba pang mga binti, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.
  • Red LED: Ikonekta ang positibong binti sa GPIO pin 23. Ikonekta ang iba pang mga binti, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.
  • White LED: Ikonekta ang positibong binti sa GPIO pin 24. Ikonekta ang iba pang mga binti, sa pamamagitan ng isang risistor, sa isang GPIO GND pin.

3. Inirerekumenda na subukan ang iyong circuit sa isang breadboard at patakbuhin ang programa bago maghinang o gawing permanenteng anuman ang mga koneksyon. Upang magawa ito, kakailanganin naming magsulat at mag-upload ng aming programa sa software, kaya't pumunta tayo sa susunod na hakbang!

Hakbang 4: Code Ito: Software

Code It: Software!
Code It: Software!
Code It: Software!
Code It: Software!

1. Sa iyong PC, buksan ang WinSCP at kumonekta sa iyong Pi. Lumikha ng isang folder ng Lobe sa direktoryo ng bahay ng iyong Pi at lumikha ng isang modelo ng folder sa direktoryong iyon.

2. I-drag ang nagresultang mga nilalaman ng folder ng Lobe TF papunta sa Pi. Itala ang landas ng file: / home / pi / Lobe / model

3. Sa Pi, buksan ang isang terminal at i-download ang lobe-python library para sa Python3 sa pamamagitan ng pagpapatakbo ng mga sumusunod na bash command:

i-install ang pip3

pip3 i-install ang lobe

4. I-download ang code ng Trash Classifier (rpi_trash_classifier.py) mula sa repo na ito papunta sa Pi (i-click ang pindutang "Code" tulad ng ipinakita sa Larawan 1).

  • Mas gusto na kopyahin / i-paste? Kunin ang hilaw na code dito.
  • Mas gusto na mag-download sa iyong computer? I-download ang repo / code papunta sa iyong computer pagkatapos ilipat ang code ng Python sa Pi sa pamamagitan ng WinSCP (o ang iyong ginustong program ng remote file transfer).

5. Kapag nakakonekta mo ang hardware sa mga pin ng GPIO ng Pi, basahin ang halimbawa ng code at i-update ang anumang mga landas ng file kung kinakailangan:

  • Linya 29: filepath sa modelo ng Lobe TF
  • Mga Linya 47 at 83: filepath sa mga nakunan ng mga imahe sa pamamagitan ng Pi Camera

6. Kung kinakailangan, i-update ang mga label ng modelo sa code upang eksaktong tumugma sa mga label sa iyong modelo ng Lobe (kasama ang malaking titik, bantas, atbp.):

  • Linya 57: "basura"
  • Linya 60: "recycle"
  • Linya 63: "compost"
  • Linya 66: "mapanganib na pasilidad sa basura"
  • Linya 69: "hindi basura!"

7. Patakbuhin ang programa gamit ang Python3 sa window ng terminal:

python3 rpi_trash_classifier.py

Hakbang 5: Subukan Ito: Patakbuhin ang Programa

Subukan Ito: Patakbuhin ang Programa!
Subukan Ito: Patakbuhin ang Programa!
Subukan Ito: Patakbuhin ang Programa!
Subukan Ito: Patakbuhin ang Programa!
Subukan Ito: Patakbuhin ang Programa!
Subukan Ito: Patakbuhin ang Programa!

Pangkalahatang-ideya ng Programa

Kapag pinatakbo mo muna ang programa, magtatagal upang mai-load ang TensorFlow library at ang modelo ng Lobe ML. Kapag handa na ang programa na kumuha ng isang imahe, ang ilaw ng katayuan (puting LED) ay magpap pulso.

Kapag nakakuha ka ng isang imahe, ihahambing ng programa ang imahe sa modelo ng Lobe ML at ilalabas ang nagresultang hula (linya 83). Tinutukoy ng output kung aling ilaw ang nakabukas: dilaw (basura), asul (recycle), berde (compost), o pula (mapanganib na basura).

Kung wala sa mga tagapagpahiwatig na LED na naka-on at ang status LED ay bumalik sa mode ng pulso, nangangahulugan ito na ang nakuhang imahe ay "hindi basura", sa madaling salita, muling kunin ang larawan!

Nakukuha ang isang Imahe

Pindutin ang pushbutton upang makakuha ng isang imahe. Tandaan na maaaring kailanganin mong hawakan ang pushbutton nang hindi bababa sa 1 para sa programa upang irehistro ang pindutin. Inirerekumenda na kumuha ng ilang mga imahe ng pagsubok, pagkatapos ay buksan ang mga ito sa Desktop upang mas maunawaan ang view ng camera at frame.

Upang payagan ang oras ng gumagamit na iposisyon ang bagay at para maiayos ang mga antas ng ilaw ng camera, tumatagal ng halos 5s upang ganap na makunan ang isang imahe. Maaari mong baguhin ang mga setting na ito sa code (mga linya 35 at 41), ngunit tandaan na inirekomenda ng Pi Foundation ang isang minimum na 2 para sa pagsasaayos ng antas ng ilaw.

Pag-troubleshoot

Ang pinakamalaking hamon ay ang pagtiyak na ang nakunan ng imahe ay kung ano ang inaasahan namin, kaya maglaan ng kaunting oras upang suriin ang mga imahe at ihambing ang mga inaasahang resulta sa output na LED na nagsasaad. Kung kinakailangan, maaari kang pumasa sa mga imahe sa modelo ng Lobe ML para sa direktang paghihinuha at mas mabilis na paghahambing.

Ilang bagay na dapat tandaan:

  • Ang TensorFlow library ay malamang na magtapon ng ilang mga babalang mensahe - tipikal ito para sa bersyon na ginamit sa sample code na ito.
  • Ang mga label ng hula ay dapat na eksaktong nakasulat sa pagpapaandar na led_select (), kabilang ang malaking titik, bantas, at spacing. Tiyaking baguhin ang mga ito kung mayroon kang ibang modelo ng Lobe.
  • Ang Pi ay nangangailangan ng isang matatag na supply ng kuryente. Ang ilaw ng kuryente ng Pi ay dapat na maliwanag, solidong pula.
  • Kung ang isa o higit pang mga LED ay hindi naka-on kung inaasahan, suriin sa pamamagitan ng pagpwersa sa kanila ng utos:

red_led.on ()

Hakbang 6: (Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit

(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!
(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!
(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!
(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!
(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!
(Opsyonal) Buuin Ito: I-finalize ang Iyong Circuit!

Ngayong nasubukan na namin at, kung kinakailangan, na-debug ang aming proyekto upang gumana ito tulad ng inaasahan, handa na kaming maghinang ng aming circuit!

Tandaan: Kung wala kang isang panghinang na bakal, maaari mong laktawan ang hakbang na ito. Ang isang kahalili ay amerikana ang mga koneksyon sa kawad sa mainit na pandikit (papayagan ka ng pagpipiliang ito na ayusin / magdagdag / gumamit ng mga bagay sa paglaon, ngunit mas malamang na masira), o gumamit ng epoxy o isang katulad na permanenteng pandikit (ang pagpipiliang ito ay magiging mas matibay ngunit hindi mo magagamit ang circuit o potensyal na ang Pi pagkatapos gawin ito)

Mabilis na puna tungkol sa aking mga pagpipilian sa disenyo (Larawan 1):

  • Nag-opt ako para sa mga babaeng jumper wires para sa mga LED at Pi GPIO dahil pinapayagan nila akong alisin ang mga LED at magpalitan ng mga kulay o ilipat ang mga ito sa paligid kung kinakailangan. Maaari mong laktawan ang mga ito kung nais mong gawing permanenteng ang mga koneksyon.
  • Katulad nito, pumili ako ng isang konektor ng JST para sa pushbutton.

Nagpapatuloy sa pagbuo

1. Gupitin ang bawat isa sa mga babaeng jumper wires sa kalahati (oo, lahat ng mga ito!). Gamit ang mga wire striper, alisin ang tungkol sa 1/4 (1 / 2cm) ng pagkakabukod ng kawad.

2. Para sa bawat isa sa mga LED, maghinang ng isang 220Ω risistor sa negatibong (mas maikli) na binti. (Larawan 2)

3. Gupitin ang isang maliit na piraso, tungkol sa 1 (2cm) ng heat shrink tube at itulak ang LED at resistor junction. Siguraduhing naa-access ang iba pang binti ng risistor, pagkatapos ay painitin ang shrink tube hanggang ma-secure nito ang magkasanib. (Larawan 3)

4. Ipasok ang bawat LED sa isang pares ng mga babaeng jumper wires. (Larawan 4)

5. Lagyan ng label ang mga wire ng lumulukso (hal. Na may tape), pagkatapos ay ang mga wire ng solder jumper papunta sa iyong naka-print na circuit board (PCB). (Larawan 5)

6. Susunod, gumamit ng (putol) babaeng jumper wire upang ikonekta ang bawat LED sa kani-kanilang Pi GPIO pin. Maghinang at lagyan ng label ang isang jumper wire upang ang hubad na metal ay kumonekta sa positibong LED leg sa pamamagitan ng PCB. (Larawan 5)

Tandaan: Kung saan mo hinihinang ang kawad na ito ay nakasalalay sa iyong layout ng PCB. Maaari mo ring solder ang kawad na ito nang direkta sa positibong LED jumper wire.

7. Maghinang ng isang 220Ω risistor sa negatibong (itim) na dulo ng konektor ng JST. (Larawan 6)

8. Maghinang ng konektor ng JST at risistor sa pushbutton. (Larawan 6)

9. Ikonekta ang M-to-F jumper wires sa pagitan ng pushbutton connector at mga GPIO pin (paalala: itim ang GND).

10. Mga koneksyon sa coat PCB sa mainit na pandikit o epoxy para sa isang mas ligtas na koneksyon.

Tandaan: kung pipiliin mong gumamit ng epoxy, maaaring hindi mo magamit ang mga pin ng GPIO ng Pi para sa iba pang mga proyekto sa hinaharap. Kung nag-aalala ka tungkol dito, magdagdag sa isang GPIO ribbon cable at ikonekta ang mga jumper wires sa halip.

Hakbang 7: (Opsyonal) Buuin Ito: Kaso

(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!
(Opsyonal) Buuin Ito: Kaso!

Lumikha ng isang enclosure para sa iyong Pi na hahawak sa camera, pushbutton, at LEDs sa lugar habang pinoprotektahan din ang Pi. Idisenyo ang iyong sariling enclosure o sundin ang aming mga tagubilin sa pagbuo sa ibaba para sa mabilis na pag-prototyp ng isang enclosure ng karton!

  1. Sa tuktok ng maliit na kahon ng karton, subaybayan ang mga lokasyon para sa pindutan ng pindutan, ilaw ng katayuan, mga ilaw ng pantukoy, at window ng pi camera (Larawan 1).

    Tandaan: Ang window ng Pi camera ay dapat na tungkol sa 3/4 "x 1/2"

  2. Gamit ang iyong katumpakan na kutsilyo, gupitin ang mga bakas.

    Tandaan: baka gusto mong subukan ang mga laki sa iyong pagpunta (Larawan 1)

  3. Opsyonal: Kulayan ang kaso! Pinili ko ang spray ng pintura:)
  4. Gupitin ang isang hugis-parihaba na takip na "window" para sa Pi Camera (Larawan 4) at kola sa loob ng kahon
  5. Sa wakas, gupitin ang puwang para sa Pi power cable.

    Inirerekumenda na i-install muna ang lahat ng electronics upang mahanap ang pinakamahusay na lugar para sa pi power cable slot

Hakbang 8: I-install at I-deploy

I-install at I-deploy!
I-install at I-deploy!

Ayan yun! Handa ka nang mag-install at mag-deploy ng iyong proyekto! Ilagay ang enclosure sa itaas ng iyong mga basurahan, isaksak ang Pi, at patakbuhin ang programa upang makakuha ng mas mabilis, mas maaasahang paraan ng pagbabawas ng aming basura. Yay!

Pagpapatuloy

  • Ibahagi ang iyong mga proyekto at ideya sa iba pang mga tao sa pamamagitan ng pamayanan ng Lobe Reddit!
  • Suriin ang repo ng Lobe Python GitHub para sa isang pangkalahatang pangkalahatang ideya sa kung paano gamitin ang Python upang mag-deploy ng isang mas malawak na iba't ibang mga proyekto ng Lobe
  • Mga katanungan o kahilingan sa proyekto? Mag-iwan ng komento sa proyektong ito o direktang makipag-ugnay sa amin: [email protected]

Inirerekumendang: