Tartalomjegyzék:

Beszélő színérzékelő, az AIY hangkészlet alapján: 4 lépés
Beszélő színérzékelő, az AIY hangkészlet alapján: 4 lépés

Videó: Beszélő színérzékelő, az AIY hangkészlet alapján: 4 lépés

Videó: Beszélő színérzékelő, az AIY hangkészlet alapján: 4 lépés
Videó: ИСПАНСКИЕ ЛОГОПЕДЫ В ПЕРВЫЙ РАЗ СЛЫШАТ ДИМАША / РЕАКЦИЯ С ПЕРЕВОДОМ 2024, November
Anonim
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján
Beszélő színérzékelő, az AIY hangkészlet alapján

Miután a közelmúltban megtanultam egy kicsit a Braille-ről, azon tűnődtem, vajon építhetek-e valamit az AIY hangkészlet segítségével a Raspberry Pi-hez, ami valódi előnyökkel járhat a látássérültek számára. Az alábbiakban leírt módon talál egy egyszerű színérzékelő eszköz prototípusát, amely hangosan felolvassa a megállapításait.

Ennek a rendszernek a bonyolultabb változata hasznos lehet látássérültek vagy színvakok számára.

A rendszer Raspberry Pi -t használ, amelyhez AIY hangkalap csatlakozik. A HAT I2C portjához egy TCS34725 RGB érzékelő kiiktatás csatlakozik. A kitörés fényes, meleg fehér LED -et tartalmaz az elemzendő tárgy megvilágítására. A kitörést egy házba helyezték a mérési feltételek optimalizálása és szabványosítása érdekében.

A három színérzékelő körülbelül ugyanazt a három frekvenciatartományt méri, mint a szeme színérzékelői. Ezután a vörös, zöld és kék (RGB) értékeket használják a teljes színnyomás kiszámításához.

Az a szép ebben a különleges rendszerben, hogy most az AIY hangkészletek "mond" parancsával szóban is megmondja a színt. Kérjük, nézze meg a mellékelt videót.

Az eszköz példaként szolgálhat az AIY Voice HAT -hoz csatlakoztatott I2C érzékelőeszköz számára is.

1. lépés: Használt anyagok

Raspberry Pi 3. ~ 35 US $ vagy EUR

AIY hangkészlet, fejrészekkel a HAT -hoz forrasztva. ~ 25 USD vagy EUR

Adafruit TCS34725 kitörés, forrasztott fejjel. ~ 8 USD vagy EUR

Jumper kábelek.

Kenyérlap (opcionális)

Az érzékelőházhoz:- használt "Dolce Gusto" kávékapszula- egy kis, kerek darab 2 mm-es Forex (PVC hablemez), körülbelül 37 mm átmérőjű- nem fényvisszaverő fekete anyag, amely lefedi a ház belső falait. Öntapadó fekete gumihabot használtam.

Választható: kis kapcsoló a mérések előidézésére

Néhány csepp műanyag ragasztó és vágókés.

2. lépés: Összeszerelés és használat

Összeszerelés és használat
Összeszerelés és használat
Összeszerelés és használat
Összeszerelés és használat
Összeszerelés és használat
Összeszerelés és használat

Az AIY hangkalapos Raspberry Pi -t az AIY kézikönyvében leírtak szerint állították be. Az összeszerelés előtt a fejrészeket a HAT portjaihoz forrasztották. Az érzékelő házához egy "Dulce Gusto" kávékapszulát ürítettek, tisztítottak, és az aljának egy részét óvatosan eltávolították késsel. Használhat mást is erre a célra, a kávékapszula éppen megfelelő méretű és alakú volt. Egy kerek, 2 mm -es Forex darabot levágtak egy lemezről, majd a törést középre helyezték a Forex lemezre, a filctollal megjelölt pozíciót, és a megfelelő helyen vágták ki a fejrészhez tartozó rést.

Most a Forex darabot ragasztották a házra, és az érzékelő kitörését a tépőzár segítségével rögzítették a Forex lemezhez. Ezután a belső falakat fényelnyelő fekete anyag borította, öntapadó gumihabot használtam. A fekete kartonnak is működnie kell. Most, áthidaló kábelek segítségével, a HAT I2C "3.3V" portja az érzékelő "V in" -jéhez volt csatlakoztatva, Ground to Gnd, sda to sda és scl to scl. Kenyérsütőt használtam mindkét rész összekapcsolására, de ez nem szükséges.

Helyezze az AIY_TCS34725 python parancsfájlt az src mappába, és futtassa a szkriptet a fejlesztői terminálról, és írja be a "sec/AIY_TCS34752.py" parancsot. Előfordulhat, hogy először a futtathatóvá kell tenni a python parancsfájlt. Amikor a rendszer kéri, helyezze az érzékelőegységet a mérendő tárgy fölé, nyomja meg az AIY eszköz gombját, és várjon egy -két másodpercet.

Ezután a mért RGB és fehér értékek alapján a készülék először kiszámítja a megfelelő színárnyalat értékét, majd ezen érték alapján megbecsüli a színt, és szóban közli azokat az AIY hangrendszeren keresztül, pl. g. "sötétvörösként", de az árnyalat értékét is megadja. Az RGB, a színárnyalat és a fényerő (pontosabban a világosság) értékei szintén a képernyőre kerülnek nyomtatásra.

A szín -megjegyzések egyszerűsítése érdekében az RGB -értékeket HSV (színárnyalat, telítettség, érték) formátumba alakítják át. Ez lehetővé teszi, hogy a színeket egy bizonyos szögtartományhoz (például egy pite szelethez) fűzzünk, és a számot a színárnyalat értéke alapján válasszuk ki.

Normalizálnia kell a készüléket egy fehér és egy fekete referencia alapján. Csak mérje meg a rendelkezésre álló legfehérebb és legsötétebb papírdarabokat, végezzen mérést, és helyezze ezeket az értékeket a maximális és minimális értékek közé a kódba. Csak az optimális referenciaértékek adnak jó színfelismerést.

Az egyik alapvető probléma a reflexió. Ha fényes vagy polírozott felületű tárgya van, az a LED által kibocsátott fény nagy részét visszaveri, és sokkal könnyebbnek tűnik, mint amilyen valójában. Használhat membránlapot a fény szórására, de szükség lehet egy korrekciós tényező alkalmazására.

Áttetsző tárgyak esetén praktikus lehet őket fehér papírra helyezni, különben a visszavert fény mennyisége kicsi lesz, és a tárgy "fekete".

Ha meg szeretné mérni a fényt kibocsátó tárgyak színét, akkor kapcsolja ki a LED -et a megszakításon úgy, hogy a „LED” portot a földeléshez csatlakoztatja. Most ennek megfelelően állítsa be a normalizálási értékeket.

Egy másik általános probléma a tárgy megvilágítása. A kitörésen lévő meleg fehér LED nem folyamatos fénysugarat bocsát ki. Ezért bizonyos színek túl- vagy alulreprezentáltak lehetnek az RGB spektrumban. Ha többet szeretne megtudni erről a témáról, kérjük, tekintse meg korábbi útmutatásaimat a koloriméterekről/ fotométerekről és spektrométerekről:

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

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

3. lépés: A kód

A kód
A kód

A kód az AIY hangkézikönyvben szereplő kód módosításának és a Bradspi TCS34725 érzékelő kódjának kombinációja.

Megpróbáltam használni az Adafruit TCS34725 python kódját is, de problémáim adódtak ezzel és néhány más kóddal, amelyek külső könyvtárakat használnak az AIY HAT segítségével. Minden segítséget szívesen.

Amint azt korábban említettük, a színkombináció az RGB -n a színárnyalatra történő átalakításon alapul. Be kell állítania a normalizálási beállításokat a fehér és fekete kegyeleti anyagok kísérleti mérései alapján. Ennek megfelelően töltse ki az R, G és B min vagy max abszolút értékeit.

A szkript a "say" parancs új verzióját használja, amely lehetővé teszi a hangerő és a hangmagasság szabályozását. Ebben az esetben előfordulhat, hogy frissítenie kell az audio.py és a tty illesztőprogram fájlokat, vagy törölnie kell a "hangerő és hangmagasság részeket" a szkriptből.

#!/usr/bin/hu # a gpiozero import LED-ből # hasznos lehet egy külső LED-hez a szervo-porton (színárnyalat): # színértelmezés a kiszámított árnyalatértékek alapján, ha ((színárnyalat> 12) és (színárnyalat 25) és (árnyalat 69) és (színárnyalat 164) és (színárnyalat 194) és (színárnyalat 269) és (színárnyalat 319) vagy (árnyalat <20)): color = "red" visszaadja a színt else: print ("valami baj történt")

def tcs34725 (): # mérés és értelmezés.

# A mérést a Bradspi TCS34725 szkript végzi: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # verzió # legyen 0x44, ha ver == 0x44: print ("Eszköz megtalálva / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE register bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Bekapcsolás, 0x02 RGB érzékelők engedélyezve bus.write_byte (0x29, 0x80 | 0x14) # Az olvasási eredmények elindítják a 14. regisztert, LSB, majd MSB adatok = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | adatok [0] piros = adatok [3] << 8 | adatok [2] zöld = adatok [5] << 8 | adatok [4] kék = adatok [7] << 8 | data [6] crgb = "Abszolút számok: C: %s, R: %s, G: %s, B: %s / n" %(tiszta, piros, zöld, kék) print (crgb) time.sleep (1) else: print ("Az eszköz nem található / n") # a mért RGBW értékek normalizálása és átalakítása col = "" # Maximális értékek A normalizációs tényezőket kísérletileg kell meghatározni # pl vs. egy fehér papírlap. Időnként ellenőrizze és javítsa ki. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Háttér/Minimális értékek normalizálási tényezői, kísérletileg kell meghatározni # pl. vs. fekete papírlap. Időnként ellenőrizze és javítsa ki. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalizált érték, 0 és 1 között rel_bright = ((világos - min_bright)/(max_bright - min_bright)) rel_red = ((piros - min_red)/(max_red - min_red)) rel_green = ((zöld - min_zöld)/(max_zöld - min_zöld)) rel_blue = ((kék - min_kék)/(max_kék - min_kék)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) szín = hsv_col [0] ha rel_bright> 0,9: col = "fehér" # ha nagyon világos -> fehér elif rel_bright fekete else: col = hue2color (színárnyalat) # színválasztás színárnyalat értékek alapján # print ("relatív értékek világos, piros, zöld, kék:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV -értékek (színárnyalat, telítettség, érték):", hsv_col) # print ("színárnyalat ° -ban", színárnyalat) return [col, rel_bright, rel_red, rel_green, rel_blue, hue]

def main ():

button = aiy.voicehat.get_button () # change Gombállapot led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Button (5) # távolságérzékelő vagy másik külső gomb, a szervo3/GPIO 05 -hez csatlakoztatva

aiy.audio.say ("Hello!",, volume = 50, pitch = 100) # hangereje és hangmagassága megköveteli az audio.py és a _tty.py driver 2017. novemberi felülvizsgálatát!

aiy.audio.say ("A kezdéshez mozgassa az érzékelőt az objektum fölé. Ezután nyomja meg a kék gombot",, hangerő = 50, hangmagasság = 100) print ("A színmérés aktiválásához helyezze az érzékelőt az objektum fölé, majd nyomja meg a kék gombot ") míg igaz: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # a külső gombhoz, a gomb cseréje gombos led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Mérés ",, térfogat = 50, hangmagasság = 100) eredmény = tcs34725 () # mérést és értelmezést idéz elő col = eredmény [0] # szín, mint szövegárnyalat = str (int (eredmény [5])) # színárnyalat ° -ban, szövegként r_piros = str (int (eredmény [2]*255)) # R érték, szövegként r_zöld = str (int (eredmény [3]*255)) # G érték, szövegként r_kék = str (int (eredmény [4]*255)) # B érték, szövegként r_bright = str (int (eredmény [1]*100)) # W érték, szöveg led.set_state (aiy.voicehat. LED. OFF) ha col == "fehér "vagy col ==" fekete ": világos =" "elif (eredmény [1]> 0,69): #fényerő/színvilágosság világos =" világos "elif (eredmény [1] <0,25): világos =" sötét "más: világos = "közepes" # kommunizáló t he results color_text = ("Az objektum színe" + világos + "" + col) print (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("A színárnyalat értéke "+ árnyalat+" fok ") nyomtatás (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)

if _name_ == '_main_': main ()

4. lépés: Néhány link és megjegyzés

A TCS34725 érzékelő adatlapja itt található:

Az általam használt érzékelő olvasásához szükséges kódot itt írták le:

További információkkal szolgálhat a színmérésekkel kapcsolatban ezzel és egy másik érzékelővel korábbi utasításomban:

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

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

Ajánlott: