Mundarija:

AIY ovozli to'plamiga asoslangan gapiradigan rang sensori: 4 qadam
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori: 4 qadam

Video: AIY ovozli to'plamiga asoslangan gapiradigan rang sensori: 4 qadam

Video: AIY ovozli to'plamiga asoslangan gapiradigan rang sensori: 4 qadam
Video: O‘zbek alifbosi - A harfi | Bolalar uchun Dono tv multfilm 2024, Noyabr
Anonim
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori
AIY ovozli to'plamiga asoslangan gapiradigan rang sensori

Yaqinda Brayl alifbosi haqida bir oz ma'lumotga ega bo'lganimdan so'ng, men "Raspberry Pi" uchun AIY ovozli to'plamidan foydalanib, ko'zi ojizlar uchun haqiqiy foyda keltiradigan biror narsa qura olamanmi, deb o'yladim. Quyida ta'riflanganidek, siz oddiy rangni aniqlash moslamasining prototipini topasiz, u o'z xulosalarini ovoz chiqarib o'qiydi.

Ushbu tizimning yanada batafsil versiyasi ko'rish qobiliyati buzilgan yoki rang ko'rligi bo'lgan odamlar uchun foydali bo'lishi mumkin.

Tizimda AIY ovozli HAT o'rnatilgan Raspberry Pi ishlatiladi. HAT ning I2C portiga TCS34725 RGB sensori uzilishi ulangan. Bo'linishda tahlil qilinadigan ob'ektni yoritish uchun yorqin issiq oq LED mavjud. O'lchov shartlarini optimallashtirish va standartlashtirish uchun uzilish korpusga joylashtirildi.

Uch rang sensori sizning ko'zingizdagi rang sensori bilan bir xil uchta chastota diapazonini o'lchaydi. Keyin umumiy rang taassurotini hisoblash uchun qizil, yashil va ko'k (RGB) qiymatlari ishlatiladi.

Bu maxsus tizimning yaxshi tomoni shundaki, u sizga AIY ovozli to'plamlarining "ayt" buyrug'i yordamida rangni og'zaki ravishda aytib beradi. Iltimos, unga qo'shilgan videoga qarang.

Qurilma, shuningdek, AIY ovozli HAT -ga ulangan I2C sensorli qurilmaga misol sifatida foydali bo'lishi mumkin.

1 -qadam: Ishlatilgan materiallar

Raspberry Pi 3. ~ 35 AQSh dollari yoki evro

HAT ga lehimlangan sarlavhali AIY ovozli to'plami. ~ 25 AQSh dollari yoki evro

Adafruit TCS34725 uzilishi, sarlavhasi lehimli. ~ 8 AQSh dollari yoki evro

Jumper kabellari.

Non paneli (ixtiyoriy)

Sensor korpusi uchun:- ishlatilgan "Dolce Gusto" qahva kapsulasi- diametri taxminan 37 mm bo'lgan 2 mm Forex (PVX ko'pikli plastinka) kichik dumaloq bo'lagi- korpusning ichki devorlarini yopish uchun aks ettirmaydigan qora material. Men o'zim yopishtiruvchi qora kauchuk ko'pikdan foydalandim.

Majburiy emas: o'lchovlarni chaqirish uchun kichik kalit

Bir necha tomchi plastik elim va kesuvchi pichoq.

2 -qadam: yig'ish va foydalanish

O'rnatish va foydalanish
O'rnatish va foydalanish
O'rnatish va foydalanish
O'rnatish va foydalanish
O'rnatish va foydalanish
O'rnatish va foydalanish

AIY ovozli HAT bilan Raspberry Pi AIY qo'llanmasida tasvirlanganidek o'rnatildi. O'rnatishdan oldin sarlavhalar HAT portlariga lehimlangan. Sensor korpusi uchun "Dulce Gusto" qahva kapsulasi bo'shatildi, tozalandi va taglikning bir qismi pichoq bilan ehtiyotkorlik bilan olib tashlandi. Siz bu maqsadda boshqa narsadan foydalanishingiz mumkin, qahva kapsulasi to'g'ri o'lcham va shaklga ega edi. Plastinadan 2 mm Forex dumaloq bo'lagi kesilgan, keyin chiqib ketish markaziy ravishda Forex plastinkasiga joylashtirilgan, o'rni kigiz qalam bilan belgilangan va kesilgan joyning ustki qismi uchun uyasi tegishli joyga kesilgan.

Endi Forex qismi korpusga yopishtirildi va sensor plastinka bilan plastinkaga biriktirildi, Velcro tasmasi yordamida. Keyin ichki devorlar nurni yutuvchi qora material bilan qoplangan, men o'zim yopishtiruvchi kauchuk ko'pik ishlatganman. Qora karton ham ishlashi kerak. Endi o'tish kabellari yordamida HATning I2C "3.3V" porti sensordagi "V in" ga, Ground to Gnd, sda to sda va scl to scl ga ulandi. Men ikkala qismni ulash uchun non taxtasidan foydalandim, lekin bu kerak emas.

AIY_TCS34725 python skriptini src papkasiga joylashtiring va skriptni dev terminalidan "sec/AIY_TCS34752.py" kiriting. Siz avval python skriptini bajariladigan qilib qo'yishingiz kerak bo'lishi mumkin. Agar so'ralsa, sensorlar blokini o'lchanadigan narsaning ustiga qo'ying, AIY qurilmasidagi tugmani bosing va bir -ikki soniya kuting.

Keyin, o'lchangan RGB va oq qiymatlarga asoslanib, qurilma avval mos keladigan rang qiymatini hisoblab chiqadi, keyin bu qiymatga qarab rangni baholaydi va AIY ovoz tizimi orqali ularni og'zaki ravishda uzatadi. g. "quyuq qizil" sifatida, lekin rangning qiymatini ham beradi. RGB, rang va yorqinlik (aniqlik bilan aytganda) qiymatlari ham ekranga bosiladi.

Rangni izohlash jarayonini soddalashtirish uchun RGB qiymatlari HSV (rang, to'yinganlik, qiymat) formatiga o'tkaziladi. Bu rangni ma'lum burchaklar oralig'iga (masalan, pirog bo'lagi) izohlashga va hisoblangan rang qiymatiga qarab rangni tanlashga imkon beradi.

Siz qurilmangizni oq va qora mos yozuvlar bilan normalizatsiya qilishingiz kerak. Sizda mavjud bo'lgan eng oq va qora qog'oz varaqlarini o'lchab, har birini o'lchab oling va bu qiymatlarni kodga maksimal va minimal qiymat sifatida joylashtiring. Faqat optimal mos yozuvlar qiymatlari rangni yaxshi taniydi.

Asosiy muammolardan biri bu aks ettirishdir. Agar sizda yuzasi yaltiroq yoki jilolangan ob'ekt bo'lsa, u yorug'lik chiqaradigan LEDni aks ettiradi, bu haqiqatdan ham engilroq ko'rinadi. Yorug'likni tarqatish uchun siz membrana qatlamidan foydalanishingiz mumkin, lekin tuzatish omilini qo'llashingiz kerak bo'ladi.

Shaffof narsalar bo'lsa, ularni oq qog'ozga qo'yish qulay bo'lishi mumkin, aks holda aks ettirilgan yorug'lik miqdori kichik bo'ladi va ob'ekt "qora" deb xabar qilinadi.

Agar siz yorug'lik chiqaradigan narsalarning rangini o'lchashni xohlasangiz, uzilishdagi "LED" portini "Ground" ga ulab, uzilishdagi LEDni o'chirib qo'yishingiz kerak. Endi normalizatsiya qiymatlarini mos ravishda o'rnating.

Yana bir umumiy muammo - bu ob'ektning yoritilishi. Chiqib ketadigan issiq oq LED uzluksiz yorug'lik spektrini chiqaradi. Shunday qilib, ba'zi ranglar RGB spektrida haddan tashqari yoki kam ko'rsatilishi mumkin. Bu mavzu bo'yicha qo'shimcha ma'lumot olish uchun iltimos, kolorimetr/ fotometr va spektrometr bo'yicha oldingi ko'rsatmalarni ko'rib chiqing:

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

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

3 -qadam: Kod

Kodeks
Kodeks

Kod - bu AIY ovozli qo'llanmasidagi kodni o'zgartirish va Bradspi tomonidan ishlab chiqarilgan TCS34725 sensor kodining kombinatsiyasi.

Men, shuningdek, Adafruit -dan TCS34725 python kodini ishlatishga harakat qilgandim, lekin bu va boshqa kutubxonalarni AIY HAT bilan birgalikda ishlatadigan boshqa kodlarni ishlatishda muammolarga duch keldim. Har qanday yordam xush kelibsiz.

Yuqorida aytib o'tganimizdek, rang izohi RGB -ni ranglarni o'zgartirishga asoslangan. Oq va qora ehtiromli materiallarning eksperimental o'lchovlari asosida normalizatsiya parametrlarini o'rnatishingiz kerak. Mutlaq qiymatlarni R, G va B min yoki max uchun to'ldiring.

Skriptda ovoz balandligi va balandligini tartibga solish imkonini beruvchi "say" buyrug'ining yangi versiyasi ishlatiladi. Bunday holda, siz audio.py va tty drayver fayllarini yangilashingiz yoki skriptdan "qismlar va balandliklar" ni o'chirishingiz kerak bo'lishi mumkin.

#!/usr/bin/env python3 # Bu skript AIY ovozli HAT uchun servo_demo.py skriptining moslashuvi, # Afafruit TCS34725 -ni ajratish rangini aniqlash uchun optimallashtirilgan. aiy.audio import aiy.cloudspeech import aiy.voicehat # gpiozero import LEDidan # servo-portdagi tashqi LED uchun foydali bo'lishi mumkin (rang): # rang talqini, agar ((tus> 12) va (tus 25) va (tus 69) va (tus 164) va (tus 194) va (tus 269) va (tus 319) yoki (rang <20)): color = "qizil" qaytish rangi boshqa: chop etish ("nimadir noto'g'ri ketdi")

def tcs34725 (): # o'lchash va talqin qilish.

# O'lchov Bradspi TCS34725 skriptida amalga oshiriladi: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # versiya # = 0x44 bo'lishi kerak, agar ver == 0x44 bo'lsa: print ("Qurilma topildi / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = Ro'yxatdan o'tish bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Quvvatni yoqish, 0x02 RGB sensorlar yoqilgan bus.write_byte (0x29, 0x80 | 0x14) # O'qish natijalari 14 -registrni, LSB -ni, so'ngra MSB ma'lumotlarini = bus.read_i2c_block_data (0x29, 0) aniq = aniq = ma'lumotlarni [1] << 8 | ma'lumotlar [0] qizil = ma'lumotlar [3] << 8 | ma'lumotlar [2] yashil = ma'lumotlar [5] << 8 | ma'lumotlar [4] ko'k = ma'lumotlar [7] << 8 | ma'lumotlar [6] crgb = "Mutlaq sonlar: C: %s, R: %s, G: %s, B: %s / n" %(tiniq, qizil, yashil, ko'k) bosib chiqarish (crgb) vaqt.sleep (1) boshqa: chop etish ("Qurilma topilmadi / n") # o'lchangan RGBW qiymatlarini normallashtirish va o'zgartirish col = "" # Maksimal qiymatlar Normallashtirish omillari, eksperimental tarzda aniqlanishi kerak # masalan. oq qog'ozga qarshi. Vaqti -vaqti bilan tekshiring va to'g'rilang. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Fon/Minimal qiymatlarni normallashtirish omillari, eksperimental tarzda aniqlanishi kerak # masalan. qora varaqqa qarshi. Vaqti -vaqti bilan tekshiring va to'g'rilang. min_bright = 750 min_qizil = 340 min_green = 245 dagi ko'k = 225 # normallashtirilgan qiymatlar, 0 dan 1gacha rel_bright = ((aniq - min_bright)/(max_bright - min_bright)) rel_red = ((qizil - min_qizil)/(max_red - min_red)) rel_green = ((yashil - min_green)/(max_green - min_green)) rel_blue = ((ko'k - min_ ko'k)/(max_blue - min_ ko'k)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blv_c) hue [0] [9] agar rel_bright> 0.9: col = "oq" # juda porloq bo'lsa -> oq elif rel_bright qora boshqa: col = hue2color (tue) # rangni rang qiymatlari bo'yicha tanlash # chop etish ("nisbiy qiymatlar yorqin, qizil, yashil, ko'k:") # chop etish (rel_bright, rel_red, rel_green, rel_blue) # chop etish ("HSV qiymatlari (rang, to'yinganlik, qiymat):", hsv_col) # chop etish ("rang tusida", rang) qaytish [col, rel_bright, rel_red, rel_green, rel_blue, rang]

def main ():

tugma = aiy.voicehat.get_button () # o'zgartirish tugma holati led = aiy.voicehat.get_led () # tugma-LED holatini o'zgartirish aiy.audio.get_recorder (). start () # buttoni = tugma (5) # masofa sensori yoki boshqa tashqi tugma, servo3/GPIO 05 ga ulangan

aiy.audio.say ("Salom!",, tovush = 50, pitch = 100) # tovush va balandlik audio.py va _tty.py drayverini 2017 yil noyabrda qayta ko'rib chiqishni talab qiladi!

aiy.audio.say ("Boshlash uchun sensorni ob'ekt ustidan siljiting. Keyin ko'k tugmani bosing",, ovoz = 50, balandlik = 100) chop eting ("Rang o'lchovini sensori ob'ekt tepasida, keyin ko'k tugmani bosing ") rost bo'lsa: led.set_state (aiy.voicehat. LED. ON) tugmasi. tashqi tugma uchun kutish_for_press () #, tugmani led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (") bilan almashtiring. O'lchash ",, hajm = 50, qadam = 100) natija = tcs34725 () # o'lchov va talqinni chaqiradi col = result [0] # rang, matn hue = str (int (natija [5])) # tus ° da, matn sifatida r_red = str (int (natija [2]*255)) # R qiymati, matn sifatida r_green = str (int (natija [3]*255)) # G qiymati, matn sifatida r_blue = str (int (natija [4]*255)) # B qiymati, matn sifatida r_bright = str (int (natija [1]*100)) # V qiymati, matn sifatida led.set_state (aiy.voicehat. LED. OFF), agar col == "oq "yoki col ==" qora ": yorqin =" "elif (natija [1]> 0,69): #rangning yorqinligi/ochig'i yorqin =" engil "elif (natija [1] <0,25): yorqin =" qorong'i ": yorqin = "o'rta" # muloqot t u natija beradi color_text = ("Ob'ektning rangi" + yorqin + "" + col) bosma (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Rang qiymati "+ tus+" daraja ") chop etish (rang_teksti) aiy.audio.say (tus_text,, tovush = 75, balandlik = 100)

agar _name_ == '_main_': main ()

4 -qadam: Ba'zi havolalar va izohlar

TCS34725 sensorli ma'lumotlar varag'ini bu erda topishingiz mumkin:

Men ishlatgan sensorni o'qish kodi bu erda tasvirlangan:

Rang o'lchovlari haqida qo'shimcha ma'lumotni bu va boshqa sensor yordamida oldingi ko'rsatmalarimda topishingiz mumkin:

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

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

Tavsiya: