Obsah:

Mluvící barevný senzor, založený na hlasové sadě AIY: 4 kroky
Mluvící barevný senzor, založený na hlasové sadě AIY: 4 kroky

Video: Mluvící barevný senzor, založený na hlasové sadě AIY: 4 kroky

Video: Mluvící barevný senzor, založený na hlasové sadě AIY: 4 kroky
Video: Soutěžící přiletěl až z Venuše.🤭 Celé díly oblíbené talentové show najdete na prima+.🚀 2024, Prosinec
Anonim
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY
Mluvící barevný senzor, založený na hlasové sadě AIY

Když jsem se nedávno dozvěděl něco o Braillově písmu, přemýšlel jsem, jestli bych pomocí hlasové sady AIY pro Raspberry Pi mohl něco postavit, což může mít pro zrakově postižené skutečný přínos. V následujícím textu tedy najdete prototyp jednoduchého zařízení pro detekci barev, které nahlas čte jeho nálezy.

Propracovanější verze tohoto systému může být užitečná pro osoby se zhoršeným zrakem nebo barvoslepostí.

Systém používá Raspberry Pi s připojeným hlasovým kloboukem AIY. Rozpojení snímače TCS34725 RGB je připojeno k portu I2C HAT. Breakout obsahuje jasně teplou bílou LED pro osvětlení analyzovaného objektu. Průlom byl umístěn do pouzdra za účelem optimalizace a standardizace podmínek měření.

Tři barevné senzory měří přibližně stejné tři frekvenční rozsahy jako barevné senzory ve vašich očích. Poté se k výpočtu celkového barevného dojmu použijí červené, zelené a modré (RGB) hodnoty.

Příjemné na tomto speciálním systému je, že vám nyní řekne barvu verbálně pomocí příkazu „say“hlasových sad AIY. Podívejte se prosím na doprovodné video.

Zařízení může být také užitečné jako příklad pro senzorové zařízení I2C připojené k hlasové HAT AIY.

Krok 1: Použité materiály

Raspberry Pi 3. ~ 35 US $ nebo EUR

Hlasová sada AIY se záhlavími připájenými k HAT. ~ 25 USD nebo EUR

Adafruit TCS34725 breakout, s pájenou hlavičkou. ~ 8 US $ nebo EUR

Propojovací kabely.

Prkénko (volitelné)

Pro pouzdro senzoru:- použitá kávová kapsle „Dolce Gusto“- malý kulatý kus 2 mm Forex (pěnová deska z PVC) o průměru asi 37 mm- nereflexní černý materiál k zakrytí vnitřních stěn skříně. Použil jsem samolepicí černou gumovou pěnu.

Volitelné: malý přepínač pro vyvolání měření

Několik kapek plastového lepidla a řezací nůž.

Krok 2: Sestavení a použití

Montáž a použití
Montáž a použití
Montáž a použití
Montáž a použití
Montáž a použití
Montáž a použití

Raspberry Pi s hlasovým kloboukem AIY bylo nastaveno podle popisu v manuálu AIY. Před montáží byly záhlaví připájeny k portům na HAT. Pro uložení senzoru byla kávová kapsle „Dulce Gusto“vyprázdněna, vyčištěna a část dna opatrně odstraněna nožem. K tomuto účelu můžete použít něco jiného, kávová kapsle měla správnou velikost a tvar. Z talíře byl vyříznut kulatý kus 2 mm Forexu, zlomek byl poté umístěn centrálně na Forex desku, poloha označená plstěným perem a v příslušné poloze byla vyříznuta štěrbina pro hlavičku na breakout.

Nyní byl kus Forexu nalepen na pouzdro a přerušení senzoru připevněno k Forexové desce pomocí suchého zipu. Poté byly vnitřní stěny pokryty černým materiálem absorbujícím světlo, použil jsem samolepicí gumovou pěnu. Fungovat by měla i černá lepenka. Nyní pomocí propojovacích kabelů byl port I2C „3,3 V“na HAT připojen k „V in“na senzoru, Ground to Gnd, sda to sda a scl to scl. K propojení obou částí jsem použil prkénko, ale to není nutné.

Umístěte skript python AIY_TCS34725 do složky src a spusťte skript z vývojového terminálu a zadejte „sec/AIY_TCS34752.py“. Možná budete muset nejprve spustit spustitelný skript pythonu. Na výzvu položte senzorovou jednotku na měřený objekt, stiskněte tlačítko na zařízení AIY a počkejte sekundu nebo dvě.

Poté, na základě naměřených hodnot RGB a bílé, zařízení nejprve vypočítá odpovídající hodnotu odstínu, poté odhadne barvu na základě této hodnoty a verbálně je sdělí prostřednictvím hlasového systému AIY, např. G. jako „tmavě červená“, ale také udává hodnotu odstínu. Hodnoty RGB, odstín a jas (přesněji světlost) se také vytisknou na obrazovku.

Pro zjednodušení procesu barevné anotace jsou hodnoty RGB transformovány do formátu HSV (odstín, sytost, hodnota). To umožňuje anotovat barvu v určitém rozsahu úhlů (tj. Výsečový koláč) a vybrat barvu na základě vypočtené hodnoty odstínu.

Zařízení musíte normalizovat proti bílé a černé referenci. Stačí změřit nejbělejší a nejčernější kousky papíru, které máte k dispozici, každý změřit a umístit tyto hodnoty jako maximální a minimální hodnoty do kódu. Pouze optimální referenční hodnoty poskytnou dobré rozpoznávání barev.

Jedním ze základních problémů je reflexe. Pokud máte předmět s lesklým nebo leštěným povrchem, bude to odrážet hodně světla vyzařovaného LED diodou, což bude vypadat mnohem lehčí, než ve skutečnosti je. K rozptýlení světla můžete použít list membrány, ale možná budete muset implementovat korekční faktor.

V případě průsvitných předmětů by mohlo být užitečné umístit je na bílý papír, jinak bude množství odraženého světla malé a objekt bude označen jako „černý“.

Pokud chcete měřit barvu předmětů, které vyzařují světlo, měli byste LED diodu na breakout vypnout připojením portu „LED“na breakout k „Ground“. Nyní podle toho nastavte normalizační hodnoty.

Dalším obecným problémem je osvětlení předmětu. Teplá bílá LED na vylomení vyzařuje nespojité spektrum světla. Některé barvy proto mohou být ve spektru RGB nadměrně nebo nedostatečně zastoupeny. Další informace k tomuto tématu naleznete v mých předchozích instrukcích o kolorimetrech/ fotometrech a spektrometrech:

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

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

Krok 3: Kód

Kód
Kód

Kód je kombinací úpravy kódu z hlasové příručky AIY a kódu snímače TCS34725 od Bradspi.

Také jsem se pokusil použít kód TCS34725 python od Adafruit, ale měl problémy se spuštěním tohoto a některých dalších kódů, které používají externí knihovny v kombinaci s AIY HAT. Jakákoli pomoc vítána.

Jak již bylo zmíněno dříve, barevná anotace je založena na transformaci hodnot RGB na odstín. Normalizační nastavení musíte nastavit na základě experimentálních měření materiálů úcty k bílé a černé. Podle toho vyplňte absolutní hodnoty pro R, G a B min nebo max.

Skript používá novou verzi příkazu „řekni“, který umožňuje regulovat hlasitost a výšku tónu. V případě, že budete muset buď aktualizovat soubory ovladače audio.py a tty, nebo ze skriptu odstranit "části hlasitosti a výšky".

#!/usr/bin/env python3 # Tento skript je adaptací skriptu servo_demo.py pro hlasový klobouk AIY, # optimalizovaný pro rozpoznávání barev pomocí rozbitého importu Afafruit TCS34725 aiy.audio import aiy.cloudspeech import aiy.voicehat # dioda LED importu z gpiozero # může být užitečná pro externí LED na servoportu #z tlačítka importu gpiozero tlačítko # může být užitečné pro externí tlačítko v době importu servo portu import smbus bus = smbus. SMBus (1) import barevys def hue2color (odstín): # interpretace barev na základě vypočtených hodnot odstínu, pokud ((odstín> 12) a (odstín 25) a (odstín 69) a (odstín 164) a (odstín 194) a (odstín 269) a (odstín 319) nebo (odstín <20)): color = "red" vrátit barvu else: print ("něco se pokazilo")

def tcs34725 (): # měření a interpretace.

# Měření provádí skript Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # verze # by mělo být 0x44, pokud ver == 0x44: print ("Device found / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ENABLE register bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Power on, 0x02 RGB senzory povoleny bus.write_byte (0x29, 0x80 | 0x14) # Výsledky čtení začínají registrem 14, LSB pak MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] červená = data [3] << 8 | data [2] zelená = data [5] << 8 | data [4] blue = data [7] << 8 | data [6] crgb = "Absolutní počty: C: %s, R: %s, G: %s, B: %s / n" %(jasný, červený, zelený, modrý) tisk (crgb) time.sleep (1) else: print ("Zařízení nenalezeno / n") # normalizace a transformace naměřených hodnot RGBW col = "" # Maximální hodnoty Normalizační faktory, musí být definovány experimentálně # např. vs. bílý list papíru. Čas od času zkontrolujte a opravte. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Pozadí/Minimální hodnoty normalizační faktory, musí být definovány experimentálně # např. vs. černý list papíru. Čas od času zkontrolujte a opravte. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # normalizované hodnoty, mezi 0 a 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((červená - min_red)/(max_red - min_red)) rel_green = ((zelená - min_green)/(max_green - min_green)) rel_blue = ((modrá - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) odstín = hsv_col [0]*359 if rel_bright> 0,9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color (hue) # color selection by hue values # print ("relative values bright, red, green, blue:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV values (hue, saturation, value):", hsv_col) # print ("hue in °", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, odstín]

def main ():

button = aiy.voicehat.get_button () # change LED status led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Button (5) # senzor vzdálenosti nebo další externí tlačítko, připojené k servo3/GPIO 05

aiy.audio.say („Hello!“,, volume = 50, pitch = 100) # volume and pitch require November 2017 revize of audio.py and _tty.py driver!

aiy.audio.say („Chcete -li začít, přesuňte senzor nad objekt. Poté stiskněte modré tlačítko“,, hlasitost = 50, výška = 100) tisk („Chcete -li aktivovat měření místa, umístěte senzor nad objekt, poté stiskněte modré tlačítko ") zatímco True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # pro externí tlačítko, nahraďte tlačítko tlačítkem buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Měření ",, objem = 50, výška = 100) výsledek = tcs34725 () # evokuje měření a interpretaci col = výsledek [0] # barva, jako odstín textu = str (int (výsledek [5])) # odstín v °, jako text r_red = str (int (výsledek [2]*255)) # hodnota R, jako text r_green = str (int (výsledek [3]*255)) # hodnota G, jako text r_blue = str (int (výsledek [4]*255)) # hodnota B, jako text r_bright = str (int (výsledek [1]*100)) # hodnota W, jako text led.set_state (aiy.voicehat. LED. OFF) pokud col == "bílá "or col ==" black ": bright =" "elif (výsledek [1]> 0,69): #jas/světlost barvy bright =" light "elif (výsledek [1] <0,25): bright =" dark "else: bright = "medium" # komunikující t výsledkem je color_text = ("Barva objektu je" + jasný + "" + col) tisk (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("Hodnota odstínu je "+ odstín+" stupně ") tisk (hue_text) aiy.audio.say (hue_text,, volume = 75, pitch = 100)

if _name_ == '_main_': main ()

Krok 4: Některé odkazy a poznámky

Datový list senzoru TCS34725 naleznete zde:

Kód pro čtení senzoru, který jsem použil, byl popsán zde:

Další informace o měření barev pomocí tohoto a dalšího senzoru najdete v mých předchozích instrukcích:

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

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

Doporučuje: