İçindekiler:

AIY Ses Kitine Dayalı Konuşan Renk Sensörü: 4 Adım
AIY Ses Kitine Dayalı Konuşan Renk Sensörü: 4 Adım

Video: AIY Ses Kitine Dayalı Konuşan Renk Sensörü: 4 Adım

Video: AIY Ses Kitine Dayalı Konuşan Renk Sensörü: 4 Adım
Video: Ünal turan Azad yılmaz Karşıma çıkın dedi 2024, Kasım
Anonim
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü
AIY Ses Kitine Dayalı Konuşan Renk Sensörü

Son zamanlarda Braille hakkında biraz bilgi edindikten sonra, Raspberry Pi için AIY ses kitini kullanarak görme engelliler için gerçek bir canlı yararı olabilecek bir şey yapıp yapamayacağımı merak ediyordum. Aşağıda açıklanan şekilde, bulgularını yüksek sesle okuyan basit bir renk algılama cihazının bir prototipini bulacaksınız.

Bu sistemin daha ayrıntılı bir versiyonu, görme bozukluğu veya renk körlüğü olan kişiler için faydalı olabilir.

Sistem, AIY sesli HAT takılı bir Raspberry Pi kullanıyor. HAT'ın I2C bağlantı noktasına bir TCS34725 RGB sensör çıkışı bağlanır. Koparma, analiz edilecek nesneyi aydınlatmak için parlak, sıcak beyaz bir LED içerir. Koparma, ölçüm koşullarını optimize etmek ve standart hale getirmek için bir yuvaya yerleştirildi.

Üç renk sensörü, gözlerinizdeki renk sensörleriyle yaklaşık olarak aynı üç frekans aralığını ölçer. Ardından, genel renk izlenimini hesaplamak için kırmızı, yeşil ve mavi (RGB) değerleri kullanılır.

Bu özel sistemin güzel yanı, artık AIY ses kitlerinin "say" komutunu kullanarak size rengi sözlü olarak söylemesidir. Lütfen ekteki videoya bir göz atın.

Cihaz ayrıca AIY sesli HAT'a bağlı bir I2C sensör cihazı için örnek olarak faydalı olabilir.

Adım 1: Kullanılan Malzemeler

Raspberry Pi 3. ~ 35 US$ veya EUR

Başlıkları HAT'a lehimlenmiş AIY ses kiti. ~ 25US$ veya EUR

Adafruit TCS34725, lehimli bir başlık ile koparma. ~ 8 ABD Doları veya EUR

Atlama kabloları.

Bir breadboard (isteğe bağlı)

Sensör muhafazası için: - kullanılmış bir "Dolce Gusto" kahve kapsülü - 2 mm Forex'ten (PVC köpük levha) küçük bir yuvarlak parça, yaklaşık 37 mm çapında - muhafazanın iç duvarlarını kaplamak için yansıtmayan siyah bir malzeme. Kendinden yapışkanlı siyah kauçuk köpüğü kullandım.

İsteğe bağlı: ölçümleri uyandırmak için küçük bir anahtar

Birkaç damla plastik yapıştırıcı ve bir kesici bıçak.

Adım 2: Montaj ve Kullanım

Montaj ve Kullanım
Montaj ve Kullanım
Montaj ve Kullanım
Montaj ve Kullanım
Montaj ve Kullanım
Montaj ve Kullanım

AIY sesli HAT ile Raspberry Pi, AIY kılavuzunda açıklandığı gibi kuruldu. Montajdan önce, başlıklar HAT üzerindeki bağlantı noktalarına lehimlendi. Sensörün muhafazası için bir "Dulce Gusto" kahve kapsülü boşaltıldı, temizlendi ve tabanın bir kısmı bir bıçakla dikkatlice çıkarıldı. Bu amaç için başka bir şey kullanabilirsiniz, kahve kapsülü sadece doğru boyut ve şekle sahipti. Bir plakadan 2 mm'lik yuvarlak bir Forex parçası kesildi, daha sonra koparma, Forex plakasının ortasına yerleştirildi, konum bir keçeli kalemle işaretlendi ve koparma üzerindeki başlık için bir yuva uygun konumda kesildi.

Şimdi Forex parçası gövdeye yapıştırıldı ve sensör çıkışı bir Velcro şeridi kullanılarak Forex plakasına bağlandı. Daha sonra iç duvarlar ışığı emen siyah bir malzeme ile kaplandı, ben kendinden yapışkanlı kauçuk köpük kullandım. Siyah karton da işe yaramalı. Şimdi, atlama kabloları kullanılarak, HAT'ın I2C "3.3V" bağlantı noktası sensördeki "V in"e, Topraktan Gnd'ye, sda'dan sda'ya ve scl'den scl'ye bağlandı. Her iki parçayı da bağlamak için bir devre tahtası kullanmıştım ama bu gerekli değil.

AIY_TCS34725 python komut dosyasını src klasörüne yerleştirin ve komut dosyasını dev terminalinden "sec/AIY_TCS34752.py" girerek çalıştırın. Önce python betiğini çalıştırılabilir hale getirmeniz gerekebilir. Sorulduğunda sensör ünitesini ölçülecek nesnenin üzerine yerleştirin, AIY cihazındaki düğmeye basın ve bir veya iki saniye bekleyin.

Ardından, ölçülen RGB ve beyaz değerlerine dayalı olarak, cihaz önce karşılık gelen ton değerini hesaplar, ardından bu değere göre rengi tahmin eder ve AIY ses sistemi aracılığıyla sözlü olarak iletir, örn. G. "koyu kırmızı" olarak değil, aynı zamanda ton değerini de verir. RGB, renk tonu ve parlaklık (tam olarak açıklık) değerleri de ekrana yazdırılır.

Renk açıklama sürecini basitleştirmek için RGB değerleri HSV (ton, doygunluk, değer) formatına dönüştürülür. Bu, belirli bir açı aralığına (yani bir pasta dilimi) bir renge açıklama eklemeye ve hesaplanan ton değerine göre rengi seçmeye olanak tanır.

Cihazınızı beyaz ve siyah bir referansa göre normalleştirmeniz gerekir. Sadece elinizdeki en beyaz ve en siyah kağıt parçalarını ölçün, her birini ölçün ve bu değerleri maksimum ve minimum değerler olarak koda yerleştirin. Yalnızca optimal referans değerleri iyi bir renk tanıma sağlar.

Temel sorunlardan biri yansımadır. Parlak veya cilalı bir yüzeye sahip bir nesneniz varsa, LED tarafından yayılan ışığın çoğunu yansıtacak ve gerçekte olduğundan çok daha hafif görünecektir. Işığı dağıtmak için bir zar tabakası kullanabilirsiniz, ancak bir düzeltme faktörü uygulamanız gerekebilir.

Yarı saydam nesneler söz konusu olduğunda, bunları beyaz bir kağıda yerleştirmek kullanışlı olabilir, aksi takdirde yansıyan ışığın miktarı az olur ve nesne "siyah" olarak rapor edilir.

Işık yayan nesnelerin rengini ölçmek istiyorsanız, devre üzerindeki "LED" bağlantı noktasını "Toprak" a bağlayarak devredeki LED'i kapatmalısınız. Şimdi normalleştirme değerlerini buna göre ayarlayın.

Diğer bir genel problem ise cismin aydınlatılmasıdır. Aradaki sıcak beyaz LED, sürekli olmayan bir ışık spektrumu yayar. Bu nedenle, belirli renkler RGB spektrumunda fazla veya eksik temsil edilebilir. Bu konu hakkında daha fazla bilgi için lütfen kolorimetreler/fotometreler ve spektrometreler ile ilgili önceki talimatlarıma bir göz atın:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Adım 3: Kod

kod
kod

Kod, AIY sesli kılavuzundaki bir kodun ve Bradspi'nin TCS34725 sensör kodunun bir modifikasyonunun birleşimidir.

Ayrıca Adafruit'ten TCS34725 python kodunu kullanmayı denedim, ancak bunu ve AIY HAT ile birlikte harici kitaplıkları kullanan diğer bazı kodları çalıştırırken sorun yaşadım. Herhangi bir yardım hoş geldiniz.

Daha önce belirtildiği gibi, renk açıklaması, RGB'den ton değerlerine bir dönüşüme dayanır. Normalleştirme ayarlarını beyaz ve siyah saygı malzemelerinin deneysel ölçümlerine göre ayarlamalısınız. Buna göre R, G ve B min veya maks için mutlak değerleri girin.

Komut dosyası, ses ve perdeyi düzenlemeye izin veren "say" komutunun yeni bir sürümünü kullanır. Bu durumda, audio.py ve tty sürücü dosyalarını güncellemeniz veya komut dosyasından "hacim ve perde bölümlerini" silmeniz gerekebilir.

#!/usr/bin/env python3# Bu komut dosyası AIY sesli HAT için servo_demo.py komut dosyasının bir uyarlamasıdır, # Afafruit TCS34725 koparma import aiy.audio import aiy.cloudspeech import aiy.voicehat kullanılarak renk tanıma için optimize edilmiştir #gpiozero'dan içe aktarma LED'i # servo bağlantı noktasındaki harici bir LED için yardımcı olabilir #gpiozero'dan içe aktarma Düğmesi # servo bağlantı noktasındaki harici bir düğme için yararlı olabilir içe aktarma zamanı içe aktarma smbus bus = smbus. SMBus(1) import colorys def hue2color (ton): ((hue> 12) ve (hue 25) ve (hue 69) ve (hue 164) ve (hue 194) ve (hue 269) ve (hue 319) ise hesaplanan ton değerlerine göre # renk yorumu veya (hue< 20)): color="red" return color else: print ("bir şeyler ters gitti")

def tcs34725(): # ölçüm ve yorumlama.

# Ölçüm Bradspi TCS34725 komut dosyası tarafından gerçekleştirilir: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte(0x29, 0x80|0x12) ver = bus.read_byte(0x29) # sürüm ver == 0x44 ise # 0x44 olmalıdır: print ("Aygıt bulundu\n") bus.write_byte(0x29, 0x80|0x00) # 0x00 = register bus.write_byte(0x29, 0x01|0x02) # 0x01 = Güç açık, 0x02 RGB sensörleri etkin bus.write_byte(0x29, 0x80|0x14) # Okuma sonuçları kayıt 14'ü başlatır, LSB sonra MSB verisi = bus.read_i2c_block_data(0x29, 0) temizle = temizle = veri[1] << 8 | veri[0] kırmızı = veri[3] << 8 | veri[2] yeşil = veri[5] << 8 | veri[4] mavi = veri[7] << 8 | data[6] crgb = "Mutlak sayılar: C: %s, R: %s, G: %s, B: %s\n" % (açık, kırmızı, yeşil, mavi) print (crgb) time.sleep(1) else: print ("Cihaz bulunamadı\n") # ölçülen RGBW değerlerinin normalizasyonu ve dönüşümü # Maksimum değerler Normalizasyon faktörleri, deneysel olarak tanımlanmalıdır # örn. beyaz bir kağıda karşı. Zaman zaman kontrol edin ve düzeltin. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Arkaplan/Minimum değerler normalleştirme faktörleri, deneysel olarak tanımlanmalıdır # ör. siyah kağıda karşı. Zaman zaman kontrol edin ve düzeltin. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalleştirilmiş değer, 0 ile 1 arasında rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((kırmızı - min_red)/(maks_kırmızı - min_kırmızı)) rel_green = ((green - min_green)/(max_green - min_green)) rel_blue = ((mavi - min_blue)/(max_blue - min_blue)) hsv_col = colorys.rgb_to_hsv(rel_red, rel_green, rel_blue) renk tonu = hsv_col[0]*359 ise rel_bright > 0.9: col = "beyaz" # çok parlaksa -> beyaz elif rel_bright black else: col = hue2color(hue) # ton değerlerine göre renk seçimi # print("göreceli değerler parlak, kırmızı, yeşil, mavi:") # print (rel_bright, rel_red, rel_green, rel_blue) # print("HSV değerleri (ton, doygunluk, değer):", hsv_col) # print ("° cinsinden renk tonu ", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, renk tonu]

tanım ana():

button = aiy.voicehat.get_button() # change Button durum led = aiy.voicehat.get_led() # Change Button-LED durumu aiy.audio.get_recorder().start() # buttoni= Button(5) # mesafe sensörü veya servo3/GPIO 05'e bağlı diğer harici düğme

aiy.audio.say("Merhaba!",, volume=50, pitch=100) # volume ve pitch, audio.py ve _tty.py sürücüsünün Kasım 2017 revizyonunu gerektiriyor!

aiy.audio.say("Başlamak için sensörü nesnenin üzerine getirin. Ardından mavi düğmeye basın",, volume=50, pitch = 100) print("Renk ölçümünü etkinleştirmek için sensörü nesnenin üzerine yerleştirin, ardından mavi düğmeye basın ") True iken: led.set_state(aiy.voicehat. LED. ON) button.wait_for_press() # harici düğme için, düğmeyi buttoni led.set_state(aiy.voicehat. LED. BLINK) aiy.audio.say(" ile değiştirin Ölçüm",, hacim=50, perde = 100) sonuç = tcs34725() # ölçüm ve yorumlamayı çağrıştırır col = sonuç[0] # renk, metin olarak hue = str(int(sonuç[5])) # ° cinsinden renk tonu, metin olarak r_red = str(int(sonuç[2]*255)) # R değeri, metin olarak r_green = str(int(sonuç[3]*255)) # G değeri, metin olarak r_blue = str(int(sonuç[4]*255)) # B değeri, metin olarak r_bright = str(int(sonuç[1]*100)) # W değeri, metin olarak led.set_state(aiy.voicehat. LED. OFF) ise col == "beyaz " veya col=="black": parlak = "" elif (sonuç[1] >0.69): #parlaklık/renk açıklığı parlak ="hafif" elif (sonuç[1] <0.25): parlak ="karanlık" başka: parlak ="orta" # iletişim kuran t color_text =("Nesnenin rengi " + parlak + " " + sütun) print (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("Ton değeri "+ hue+ " derece") yazdır (hue_text) aiy.audio.say(hue_text,, volume=75, pitch = 100)

if _name_ == '_main_': ana()

4. Adım: Bazı Bağlantılar ve Açıklamalar

TCS34725 sensör veri sayfası burada bulunabilir:

Kullandığım sensörü okuyacak kod burada anlatılmıştı:

Bu ve başka bir sensörle renk ölçümleri hakkında bazı ek bilgileri önceki talimatlarımda bulabilirsiniz:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

Önerilen: