İçindekiler:

ML ile Pi Çöp Sınıflandırıcısı Yapın!: 8 Adım (Resimlerle)
ML ile Pi Çöp Sınıflandırıcısı Yapın!: 8 Adım (Resimlerle)

Video: ML ile Pi Çöp Sınıflandırıcısı Yapın!: 8 Adım (Resimlerle)

Video: ML ile Pi Çöp Sınıflandırıcısı Yapın!: 8 Adım (Resimlerle)
Video: Yolov5 ile Özel Nesne Tanıma Google colab 2024, Kasım
Anonim
ML ile Pi Çöp Sınıflandırıcısı Yapın!
ML ile Pi Çöp Sınıflandırıcısı Yapın!
ML ile Pi Çöp Sınıflandırıcısı Yapın!
ML ile Pi Çöp Sınıflandırıcısı Yapın!

Sevgiyle "Nereye gidiyor?!" olarak bilinen Çöp Sınıflandırıcı projesi, şeyleri daha hızlı ve daha güvenilir bir şekilde atmak için tasarlanmıştır.

Bu proje, bir nesnenin çöpe, geri dönüşüme, kompost veya tehlikeli atıklara atılıp atılmadığını belirlemek için, başlangıç seviyesindeki (kodsuz!) bir ML model oluşturucusu olan Lobe'da eğitilmiş bir Makine Öğrenimi (ML) modeli kullanır. Model daha sonra Raspberry Pi 4 bilgisayarına yüklenerek çöp kutularını bulabildiğiniz her yerde kullanılabilir hale getiriyor!

Bu eğitici, Python3'teki Lobe TensorFlow modelinden bir Raspberry Pi üzerinde kendi Çöp Sınıflandırıcı projenizi nasıl oluşturacağınız konusunda size yol gösterir.

Zorluk: Başlangıç++ (devreler ve kodlama ile ilgili bazı bilgiler yardımcı olur)

Okuma Süresi: 5 dk

İnşa Süresi: 60 - 90 dk

Maliyet: ~70$ (Pi 4 dahil)

Gereçler:

Yazılım (PC tarafı)

  • lob
  • WinSCP (veya başka bir SSH dosya aktarım yöntemi, Mac için CyberDuck'ı kullanabilir)
  • terminal
  • Uzak Masaüstü Bağlantısı veya RealVNC

Donanım

  • Raspberry Pi, SD Kart ve USB-C güç kaynağı (5V, 2.5A)
  • Pi Kamera
  • Butona basınız
  • 5 LED (4 gösterge LED'i ve 1 durum LED'i)

    • Sarı LED: çöp
    • Mavi LED: geri dönüşüm
    • Yeşil LED: kompost
    • Kırmızı LED: tehlikeli atık
    • Beyaz LED: durum
  • 6 220 Ohm direnç
  • 10 M-M atlama teli
  • Breadboard, yarım boy

Lehimlemeyi seçerseniz:

  • 1 JST konnektör, sadece dişi uç
  • 2 M-F atlama teli
  • 10 F-to-F atlama teli
  • PCB

muhafaza

  • Proje çantası (örn. karton, ahşap veya plastik kutu, yaklaşık 6" x 5" x 4")
  • 0,5" x 0,5" (2cm x 2cm) şeffaf plastik kare

    Örneğin. plastik bir gıda kabı kapağından

  • cırt cırt

Aletler

  • Tel kesiciler
  • Hassas bıçak (örneğin, tam bıçak) ve kesme matı
  • Havya (isteğe bağlı)
  • Sıcakta eriyen alet (veya diğer iletken olmayan yapıştırıcı - epoksi harika çalışır ancak kalıcıdır)

1. Adım: Başlamadan Önce

Başlamadan önce
Başlamadan önce

Bu proje, başsız bir konfigürasyonda tamamen kurulmuş bir Raspberry Pi ile başladığınızı varsayar. İşte bunun nasıl yapılacağına dair yeni başlayanlar için bir rehber.

Ayrıca, aşağıdakiler hakkında biraz bilgi sahibi olmanıza yardımcı olur:

  1. Raspberry Pi ile aşinalık

    • İşte kullanışlı bir başlangıç kılavuzu!
    • Ayrıca yararlı: Pi kamerayı kullanmaya başlama
  2. Python kodunu okuma ve düzenleme (bir program yazmanıza gerek kalmayacak, sadece düzenleyin)

    Raspberry Pi ile Python'a Giriş

  3. Fritzing bağlantı şemalarını okuma
  4. Breadboard kullanma

    Bir breadboard öğreticisi nasıl kullanılır

Çöpünüzün nereye gittiğini öğrenin

ABD'deki her şehrin (ve dünyayı varsayalım) kendi çöpü/geri dönüşümü/kompostu/vb. vardır. toplama sistemi. Bu, doğru bir çöp sınıflandırıcısı yapmak için 1) özel bir ML modeli oluşturmamız gerektiği anlamına gelir (bunu bir sonraki adımda ele alacağız - kod yok!) ve 2) her bir çöp parçasının nereye gittiğini bilmemiz gerekir.

Modelimi eğitmek için kullandığım her öğe için uygun çöp kutusunu her zaman bilmediğim için Seattle Utilities broşürünü (Fotoğraf 1) ve ayrıca bu kullanışlı "Nereye gidiyor?" Seattle şehri için arama aracı! Şehrinizin çöp toplama aracına bakarak ve web sitesini inceleyerek şehrinizde hangi kaynakların mevcut olduğunu kontrol edin.

2. Adım: Lobe'da Özel bir ML Modeli Oluşturun

Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun
Lobe'da Özel bir ML Modeli Oluşturun

Lobe, makine öğrenimi fikirlerinizi hayata geçirmek için ihtiyacınız olan her şeye sahip, kullanımı kolay bir araçtır. Ne yapmasını istediğinize dair örnekler gösterin ve uç cihazlar ve uygulamalar için dışa aktarılabilen özel bir makine öğrenimi modelini otomatik olarak eğitsin. Başlamak için herhangi bir deneyim gerektirmez. Kendi bilgisayarınızda ücretsiz olarak antrenman yapabilirsiniz!

İşte Lobe'un nasıl kullanılacağına dair hızlı bir genel bakış:

1. Lobe programını açın ve yeni bir proje oluşturun.

2. Fotoğraf çekin veya içe aktarın ve bunları uygun kategoriler halinde etiketleyin. (Fotoğraf 1) Daha sonra projenin yazılım kısmında bu etiketlere ihtiyacımız olacak.

Fotoğrafları içe aktarmanın iki yolu vardır:

  1. Öğelerin fotoğraflarını doğrudan bilgisayarınızın web kamerasından çekin veya
  2. Bilgisayarınızdaki mevcut klasörlerdeki fotoğrafları içe aktarın.

    Fotoğraf klasörü adının kategori etiketi adı olarak kullanılacağını unutmayın, bu nedenle mevcut etiketlerle eşleştiğinden emin olun

Bir yana: Her iki yöntemi de kullandım, çünkü ne kadar çok fotoğrafınız varsa, modeliniz o kadar doğru olur.

3. Model doğruluğunu test etmek için "Oynat" özelliğini kullanın. Modelin nerede olduğunu ve doğru olmadığını belirlemek için mesafeleri, aydınlatmayı, el pozisyonlarını vb. değiştirin. Gerekirse daha fazla fotoğraf ekleyin. (Fotoğraf 3 - 4)

4. Hazır olduğunuzda, Lobe ML modelinizi TensorFlow (TF) Lite formatında dışa aktarın.

İpuçları:

  • Fotoğrafları içe aktarmadan önce, ihtiyaç duyacağınız tüm kategorilerin ve bunları nasıl etiketlemek istediğinizin bir listesini yapın (ör. "çöp", "geri dönüşüm," "kompost" vb.)

    Not: Değiştirmeniz gereken kod miktarını azaltmak için yukarıdaki "Lob Model Etiketleri" fotoğrafında gösterilenle aynı etiketleri kullanın

  • Fotoğrafta olabilecek her şeyin (örneğin elleriniz ve kollarınız, arka plan vb.) fotoğraflarını içeren "çöp olmayanlar" için bir kategori ekleyin.
  • Mümkünse, Pi Kameradan fotoğraf çekin ve Lobe'a aktarın. Bu, modelinizin doğruluğunu büyük ölçüde artıracaktır!
  • Daha fazla fotoğrafa mı ihtiyacınız var? Bu çöp sınıflandırma görüntü seti de dahil olmak üzere Kaggle'daki açık kaynaklı veri kümelerine göz atın!
  • Daha fazla yardıma mı ihtiyacınız var? Reddit'teki Lobe Coommunity ile bağlantı kurun!

Adım 3: İnşa Edin: Donanım

İnşa Edin: Donanım!
İnşa Edin: Donanım!
İnşa Edin: Donanım!
İnşa Edin: Donanım!
İnşa Edin: Donanım!
İnşa Edin: Donanım!

1. Pi Kamerayı Pi'ye dikkatlice bağlayın (daha fazla bilgi için Pi Vakfı başlangıç kılavuzunu ziyaret edin). (Fotoğraf 1)

2. Basmalı düğmeyi ve LED'leri Pi GPIO pinlerine bağlamak için kablo şemasını takip edin.

  • Basmalı düğme: Basmalı düğmenin bir bacağını GPIO pin 2'ye bağlayın. Diğerini bir direnç aracılığıyla bir GPIO GND pinine bağlayın.
  • Sarı LED: Pozitif (daha uzun) bacağı GPIO pin 17'ye bağlayın. Diğer bacağı bir direnç aracılığıyla bir GPIO GND pinine bağlayın.
  • Mavi LED: Pozitif bacağı GPIO pin 27'ye bağlayın. Diğer bacağı bir direnç aracılığıyla bir GPIO GND pinine bağlayın.
  • Yeşil LED: Pozitif bacağı GPIO pin 22'ye bağlayın. Diğer bacağı bir direnç aracılığıyla bir GPIO GND pinine bağlayın.
  • Kırmızı LED: Pozitif bacağı GPIO pin 23'e bağlayın. Diğer bacağı bir direnç aracılığıyla bir GPIO GND pinine bağlayın.
  • Beyaz LED: Pozitif bacağı GPIO pin 24'e bağlayın. Diğer bacağı bir direnç aracılığıyla bir GPIO GND pinine bağlayın.

3. Devrenizi bir breadboard üzerinde test etmeniz ve herhangi bir bağlantıyı kalıcı hale getirmeden veya lehimlemeden önce programı çalıştırmanız önerilir. Bunu yapmak için yazılım programımızı yazıp yüklememiz gerekecek, o halde bir sonraki adıma geçelim!

Adım 4: Kodlayın: Yazılım

Kodlayın: Yazılım!
Kodlayın: Yazılım!
Kodlayın: Yazılım!
Kodlayın: Yazılım!

1. PC'nizde WinSCP'yi açın ve Pi'nize bağlanın. Pi'nizin ana dizininde bir Lobe klasörü oluşturun ve bu dizinde bir model klasörü oluşturun.

2. Ortaya çıkan Lobe TF klasör içeriğini Pi'ye sürükleyin. Dosya yolunu not edin: /home/pi/Lobe/model

3. Pi'de bir terminal açın ve aşağıdaki bash komutlarını çalıştırarak Python3 için lobe-python kitaplığını indirin:

pip3 kurulumu

pip3 kurulum lobu

4. Çöp Sınıflandırıcı kodunu (rpi_trash_classifier.py) bu depodan Pi'ye indirin (Fotoğraf 1'de gösterildiği gibi "Kod" düğmesini tıklayın).

  • Kopyalamayı/yapıştırmayı mı tercih ediyorsunuz? Ham kodu buradan alın.
  • Bilgisayarınıza indirmeyi mi tercih ediyorsunuz? Depoyu/kodu bilgisayarınıza indirin, ardından Python kodunu WinSCP (veya tercih ettiğiniz uzak dosya aktarım programı) aracılığıyla Pi'ye aktarın.

5. Donanımı Pi'nin GPIO pinlerine bağladıktan sonra, örnek kodu okuyun ve tüm dosya yollarını gerektiği gibi güncelleyin:

  • Satır 29: Lobe TF modelinin dosya yolu
  • Hat 47 ve 83: Pi Camera aracılığıyla çekilen görüntülere dosya yolu

6. Gerekirse, koddaki model etiketlerini Lob modelinizdeki etiketlerle tam olarak eşleşecek şekilde güncelleyin (büyük harf kullanımı, noktalama işaretleri vb. dahil):

  • 57. satır: "çöp"
  • 60. satır: "geri dönüşüm"
  • Satır 63: "kompost"
  • Hat 66: "tehlikeli atık tesisi"
  • Satır 69: "çöp değil!"

7. Terminal penceresinde Python3'ü kullanarak programı çalıştırın:

python3 rpi_trash_classifier.py

Adım 5: Test Edin: Programı Çalıştırın

Test Edin: Programı Çalıştırın!
Test Edin: Programı Çalıştırın!
Test Edin: Programı Çalıştırın!
Test Edin: Programı Çalıştırın!
Test Edin: Programı Çalıştırın!
Test Edin: Programı Çalıştırın!

Programa Genel Bakış

Programı ilk çalıştırdığınızda, TensorFlow kitaplığını ve Lobe ML modelini yüklemek biraz zaman alacaktır. Program bir görüntü yakalamaya hazır olduğunda durum ışığı (beyaz LED) yanıp sönecektir.

Bir görüntü çektiğinizde, program görüntüyü Lobe ML modeliyle karşılaştırır ve ortaya çıkan tahmini verir (satır 83). Çıktı, hangi ışığın açılacağını belirler: sarı (çöp), mavi (geri dönüşüm), yeşil (kompost) veya kırmızı (tehlikeli atık).

Gösterge LED'lerinden hiçbiri yanmazsa ve durum LED'i darbe moduna dönerse, çekilen görüntünün "çöp olmadığı" anlamına gelir, başka bir deyişle fotoğrafı yeniden çekin!

Görüntü Yakalama

Bir görüntü yakalamak için basmalı düğmeye basın. Programın baskı makinesini kaydetmesi için düğmeyi en az 1 saniye basılı tutmanız gerekebileceğini unutmayın. Kamera görüntüsünü ve çerçevesini daha iyi anlamak için bazı test görüntüleri çekmeniz ve ardından bunları Masaüstünde açmanız önerilir.

Kullanıcıya nesneyi konumlandırması ve kamera ışık seviyelerinin ayarlanması için zaman tanımak için bir görüntüyü tam olarak yakalamak yaklaşık 5 saniye sürer. Bu ayarları kodda değiştirebilirsiniz (satır 35 ve 41), ancak Pi Foundation'ın ışık seviyesi ayarı için minimum 2 saniye önerdiğini unutmayın.

Sorun giderme

En büyük zorluk, yakalanan görüntünün beklediğimiz gibi olmasını sağlamaktır, bu nedenle görüntüleri incelemek ve beklenen sonuçları gösterge LED çıkışıyla karşılaştırmak için biraz zaman ayırın. Gerekirse, doğrudan çıkarım ve daha hızlı karşılaştırma için görüntüleri Lobe ML modeline aktarabilirsiniz.

Dikkat edilmesi gereken birkaç şey:

  • TensorFlow kitaplığı muhtemelen bazı uyarı mesajları verecektir - bu, bu örnek kodda kullanılan sürüm için tipiktir.
  • Tahmin etiketleri, büyük harf kullanımı, noktalama işaretleri ve boşluk dahil, led_select() işlevinde tam olarak yazıldığı gibi olmalıdır. Farklı bir Lobe modeliniz varsa bunları değiştirdiğinizden emin olun.
  • Pi, sabit bir güç kaynağı gerektirir. Pi'nin güç ışığı parlak, sürekli kırmızı olmalıdır.
  • Beklendiği gibi bir veya daha fazla LED yanmıyorsa, bunları şu komutla zorlayarak kontrol edin:

red_led.on()

Adım 6: (Opsiyonel) İnşa Edin: Devrenizi Sonlandırın

(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!
(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!
(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!
(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!
(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!
(Opsiyonel) İnşa Edin: Devrenizi Sonlandırın!

Projemizi beklendiği gibi çalışacak şekilde test ettiğimize ve gerekirse hata ayıkladığımıza göre, devremizi lehimlemeye hazırız!

Not: Havyanız yoksa bu adımı atlayabilirsiniz. Bir alternatif, tel bağlantılarını sıcak tutkalla kaplamaktır (bu seçenek daha sonra bir şeyleri düzeltmenize/eklemenize/kullanmanıza izin verir, ancak kırılma olasılığı daha yüksektir) veya epoksi veya benzeri bir kalıcı yapıştırıcı kullanmaktır (bu seçenek çok daha dayanıklı olacaktır) ancak bunu yaptıktan sonra devreyi veya potansiyel olarak Pi'yi kullanamayacaksınız)

Tasarım seçimlerim hakkında hızlı yorum (Fotoğraf 1):

  • LED'ler ve Pi GPIO için dişi jumper kabloları seçtim çünkü LED'leri çıkarmama ve renkleri değiştirmeme veya gerektiğinde onları hareket ettirmeme izin veriyorlar. Bağlantıları kalıcı hale getirmek istiyorsanız bunları atlayabilirsiniz.
  • Benzer şekilde, buton için bir JST konektörü seçtim.

Binaya doğru

1. Dişi jumper kablolarının her birini ortadan ikiye kesin (evet, hepsi!). Kablo sıyırıcıları kullanarak kablo yalıtımının yaklaşık 1/4 (1/2 cm) kadarını çıkarın.

2. LED'lerin her biri için, negatif (daha kısa) bacağa 220Ω'luk bir direnç lehimleyin. (Fotoğraf 2)

3. Küçük bir parça, yaklaşık 1 (2 cm) ısıyla daralan makaron kesin ve LED ile direnç bağlantısını üzerine itin. Diğer direnç ayağının erişilebilir olduğundan emin olun, ardından büzülme borusunu eklemi sabitleyene kadar ısıtın. (Fotoğraf 3)

4. Her bir LED'i bir çift dişi aktarma kablosuna takın. (Fotoğraf 4)

5. Atlama kablolarını etiketleyin (örneğin bantla), ardından atlama kablolarını baskılı devre kartınıza (PCB) lehimleyin. (Fotoğraf 5)

6. Ardından, her bir LED'i ilgili Pi GPIO pinine bağlamak için bir (kesilmiş) dişi atlama teli kullanın. Bir atlama telini lehimleyin ve etiketleyin, böylece çıplak metal PCB aracılığıyla pozitif LED bacağına bağlanır. (Fotoğraf 5)

Not: Bu kabloyu nereye lehimlediğiniz, PCB düzeninize bağlı olacaktır. Bu kabloyu doğrudan pozitif LED atlama kablosuna da lehimleyebilirsiniz.

7. JST konektörünün negatif (siyah) ucuna 220Ω'luk bir direnç lehimleyin. (Fotoğraf 6)

8. JST konektörünü ve direnci basmalı düğmeye lehimleyin.(Foto 6)

9. M-to-F atlama tellerini buton konnektörü ile GPIO pinleri arasına bağlayın (hatırlatma: siyah GND'dir).

10. Daha güvenli bir bağlantı için PCB bağlantılarını sıcak tutkal veya epoksi ile kaplayın.

Not: Epoksi kullanmayı seçerseniz, gelecekte Pi'nin GPIO pinlerini başka projeler için kullanamayabilirsiniz. Bu konuda endişeleriniz varsa, bir GPIO şerit kablosu ekleyin ve bunun yerine atlama tellerini buna bağlayın.

Adım 7: (İsteğe Bağlı) Oluşturun: Case

(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!
(Opsiyonel) İnşa Et: Kasa!

Pi'niz için kamerayı, düğmeyi ve LED'leri yerinde tutacak ve aynı zamanda Pi'yi koruyacak bir muhafaza oluşturun. Bir karton muhafazayı hızlı bir şekilde prototiplemek için kendi muhafazanızı tasarlayın veya aşağıdaki yapım talimatlarımızı izleyin!

  1. Küçük karton kutunun üstünde, basmalı düğmenin, durum ışığının, tanımlayıcı ışıkların ve pi kamera penceresinin konumlarını izleyin (Fotoğraf 1).

    Not: Pi kamera penceresi yaklaşık 3/4" x 1/2" olmalıdır

  2. Hassas bıçağınızı kullanarak izleri kesin.

    Not: Gittikçe boyutları test etmek isteyebilirsiniz (Foto 1)

  3. İsteğe bağlı: Kasayı boyayın! Sprey boyayı seçtim:)
  4. Pi Kamera için dikdörtgen bir "pencere" kapağı kesin (Fotoğraf 4) ve kutunun içini yapıştırın
  5. Son olarak, Pi güç kablosu için yuvayı kesin.

    Pi güç kablosu yuvası için en iyi yeri bulmak için önce tüm elektronik aksamların takılması önerilir

Adım 8: Kurun ve Dağıtın

Kurun ve Dağıtın!
Kurun ve Dağıtın!

Bu kadar! Projenizi kurmaya ve dağıtmaya hazırsınız! Muhafazayı çöp kutularınızın üzerine yerleştirin, Pi'yi takın ve atıklarımızı azaltmanın daha hızlı ve daha güvenilir bir yolunu bulmak için programı çalıştırın. Yay!

İleriye gidiyor

  • Projelerinizi ve fikirlerinizi Lobe Reddit topluluğu aracılığıyla diğer insanlarla paylaşın!
  • Çok çeşitli Lobe projelerini dağıtmak için Python'un nasıl kullanılacağına dair genel bir bakış için Lobe Python GitHub deposuna göz atın
  • Sorular veya proje istekleri? Bu proje hakkında bir yorum bırakın veya doğrudan bize ulaşın: [email protected]

Önerilen: