Taula de continguts:

Un sensor de color parlant, basat en el kit de veu AIY: 4 passos
Un sensor de color parlant, basat en el kit de veu AIY: 4 passos

Vídeo: Un sensor de color parlant, basat en el kit de veu AIY: 4 passos

Vídeo: Un sensor de color parlant, basat en el kit de veu AIY: 4 passos
Vídeo: ГНИЛОБАН ждал ОЖИВЛЕНИЯ 8 лет в гараже | ВОССТАНОВИЛИ мертвеца DODGE RAM VAN B3500 2024, Desembre
Anonim
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY
Un sensor de color parlant, basat en el kit de veu AIY

Després d’haver après una mica sobre el braille recentment, em preguntava si podia construir alguna cosa utilitzant el kit de veu AIY per al Raspberry Pi, que pot tenir un benefici real per a persones amb discapacitat visual. Així es descriu a continuació, trobareu un prototip d’un simple dispositiu de detecció de color que llegeix les seves troballes en veu alta.

Una versió més elaborada d’aquest sistema pot ser útil per a persones amb problemes de visió o daltonisme.

El sistema utilitza un Raspberry Pi amb un HAT de veu AIY connectat. Una connexió del sensor RGB TCS34725 està connectada al port I2C del HAT. El brou conté un brillant LED blanc càlid per il·luminar l’objecte a analitzar. El brot es va col·locar en una carcassa per optimitzar i estandarditzar les condicions de mesura.

El sensor de tres colors mesura aproximadament els mateixos tres rangs de freqüència que els sensors de color dels ulls. A continuació, s’utilitzen els valors vermell, verd i blau (RGB) per calcular la impressió de color global.

El més interessant d’aquest sistema especial és que ara us indica el color verbalment, mitjançant l’ordre “say” dels kits de veu AIY. Feu una ullada al vídeo que l’acompanya.

El dispositiu també pot ser útil com a exemple per a un dispositiu de sensor I2C connectat al AIY voice HAT.

Pas 1: materials utilitzats

Raspberry Pi 3. ~ 35 dòlars EUA o EUR

Kit de veu AIY, amb capçaleres soldades al HAT. ~ 25USUS o EUR

Adafruit TCS34725, amb capçalera soldada. ~ 8 dòlars EUA o EUR

Cables de pont.

Una taula de treball (opcional)

Per a la carcassa del sensor: - una càpsula de cafè "Dolce Gusto" usada; una petita peça rodona de Forex (placa d'escuma de PVC) de 2 mm, d'un diàmetre d'uns 37 mm; un material negre que no reflecteix per cobrir les parets interiors de la carcassa. He utilitzat escuma de goma negra autoadhesiva.

Opcional: un petit interruptor per evocar les mesures

Unes gotes de cola de plàstic i un ganivet tallador.

Pas 2: Muntatge i ús

Muntatge i Ús
Muntatge i Ús
Muntatge i Ús
Muntatge i Ús
Muntatge i Ús
Muntatge i Ús

El Raspberry Pi amb el AIAT de veu AIAT es va configurar tal com es descriu al manual d’AIY. Abans del muntatge, les capçaleres es soldaven als ports del HAT. Per a la carcassa del sensor, es va buidar, netejar una càpsula de cafè "Dulce Gusto" i es va retirar acuradament una part del fons amb un ganivet. Podeu utilitzar una altra cosa amb aquest propòsit, la càpsula de cafè només tenia la mida i la forma adequades. Es va tallar una peça rodona de Forex de 2 mm d’una placa, es va col·locar el trencament al centre de la placa Forex, es va marcar la posició amb un rotulador i es va tallar una ranura per a la capçalera del trencament a la posició adequada.

Ara, la peça Forex estava enganxada a la carcassa i el trencament del sensor unit a la placa Forex, mitjançant una tira de velcro. Després, les parets interiors es van cobrir amb un material negre absorbent de llum, vaig utilitzar una escuma de goma autoadhesiva. El cartró negre també hauria de funcionar. Ara, mitjançant cables jumper, el port I2C "3.3V" del HAT es va connectar a "V in" del sensor, de terra a Gnd, sda a sda i scl a scl. Havia utilitzat una placa de connexió per connectar les dues parts, però això no és necessari.

Col·loqueu l'script AIY_TCS34725 python a la carpeta src i executeu l'script des del terminal dev, introduint "sec / AIY_TCS34752.py". És possible que primer hàgiu de fer executable l'script python. Quan se us demani, col·loqueu la unitat del sensor sobre l'objecte a mesurar, premeu el botó del dispositiu AIY i espereu un o dos segons.

A continuació, basant-se en els valors mesurats de RGB i blanc, el dispositiu primer calcula el valor de tonalitat corresponent, després estima el color en funció d’aquest valor i els comunica verbalment mitjançant el sistema de veu AIY, e. g. com a "vermell fosc", però també dóna un valor de tonalitat. Els valors RGB, matís i brillantor (claredat, per ser exactes) també s’imprimeixen a la pantalla.

Per simplificar el procés d’anotació del color, els valors RGB es transformen en format HSV (matís, saturació, valor). Això permet anotar un color a un cert rang d’angles (és a dir, una llesca de pastís) i seleccionar el color en funció del valor de tonalitat calculat.

Heu de normalitzar el dispositiu amb una referència en blanc i en negre. Només heu de mesurar els trossos de paper més blancs i negres que tingueu disponibles, fer una mesura cadascun i col·locar aquests valors com a valors màxim i mínim al codi. Només els valors de referència òptims donaran un bon reconeixement del color.

Un problema bàsic és la reflexió. Si teniu un objecte amb una superfície brillant o polida, reflectirà gran part de la llum emesa pel LED, i apareixerà molt més lleugera del que realment és. Podeu utilitzar una làmina de membrana per dispersar la llum, però potser haureu d’implementar un factor de correcció.

En el cas d'objectes translúcids, pot ser útil col·locar-los en un paper blanc, en cas contrari la quantitat de llum reflectida serà petita i l'objecte es denominarà "negre".

Si voleu mesurar el color dels objectes que emeten llum, haureu d'apagar el LED del brot connectant el port "LED" del brot a "Terra". Ara configureu els valors de normalització en conseqüència.

Un altre problema general és la il·luminació de l'objecte. El LED blanc càlid del brot emet un espectre de llum no continu. Per tant, alguns colors poden estar sobrerepresentats o poc representats a l’espectre RGB. Per obtenir més informació sobre aquest tema, consulteu les meves instruccions anteriors sobre colorímetres / fotòmetres i espectròmetres:

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

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

Pas 3: el codi

El codi
El codi

El codi és una combinació d’una modificació d’un codi del manual de veu AIY i del codi del sensor TCS34725 de Bradspi.

També havia provat d'utilitzar el codi python TCS34725 d'Adafruit, però tenia problemes per executar aquest i alguns altres codis que utilitzen biblioteques externes en combinació amb AIY HAT. Qualsevol ajuda benvinguda.

Com s'ha esmentat anteriorment, l'anotació del color es basa en una transformació al RGB per matisar els valors. Heu d'establir paràmetres de normalització basats en mesures experimentals de materials de reverència en blanc i negre. Empleneu els valors absoluts de R, G i B mínim o màxim en conseqüència.

El script utilitza una nova versió de l'ordre "say" que permet regular el volum i el to. En el cas, potser haureu d'actualitzar els fitxers del controlador audio.py i tty o suprimir el "volum i les parts" de l'script.

#! / usr / bin / env python3 # Aquest script és una adaptació de l'script servo_demo.py per al AIAT de veu HAT, # optimitzat per al reconeixement del color mitjançant la importació de ruptura Afafruit TCS34725 aiy.audio importació aiy.cloudspeech importació aiy.voicehat # del LED d'importació gpiozero # podria ser útil per a un LED extern al port de servidors # del botó d'importació gpiozero # podria ser útil per a un botó extern del temps d'importació del servidor de ports d'importació bus smbus = smbus. SMBus (1) importació colorsys def hue2color (tonalitat): # interpretació del color basada en els valors de tonalitat calculats si ((tonalitat> 12) i (tonalitat 25) i (tonalitat 69) i (tonalitat 164) i (tonalitat 194) i (tonalitat 269) i (tonalitat 319) o (tonalitat <20)): color = "vermell" torna color else: print ("alguna cosa ha fallat")

def tcs34725 (): # mesura i interpretació.

# La mesura la realitza l’escriptura Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # version # hauria de ser 0x44 si ver == 0x44: print ("Dispositiu trobat / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = HABILITAR registre bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Encès, 0x02 Sensors RGB habilitats bus.write_byte (0x29, 0x80 | 0x14) # Els resultats de lectura comencen el registre 14, LSB després MSB data = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | dades [0] vermell = dades [3] << 8 | dades [2] verd = dades [5] << 8 | dades [4] blau = dades [7] << 8 | data [6] crgb = "Comptes absoluts: C:% s, R:% s, G:% s, B:% s / n"% (clar, vermell, verd, blau) imprimeix (crgb) time.sleep (1) else: print ("Dispositiu no trobat / n") # normalització i transformació dels valors RGBW mesurats col = "" # Valors màxims Factors de normalització, s'han de definir experimentalment # p. Ex. contra un full de paper blanc. Comproveu i corregiu de tant en tant. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Fons / Factors de normalització de valors mínims, s'ha de definir experimentalment # p. full de paper negre. Comproveu i corregiu de tant en tant. min_bright = 750 min_red = 340 min_verd = 245 min_blue = 225 # valors normalitzats, entre 0 i 1 rel_bright = ((clear - min_bright) / (max_bright - min_bright)) rel_red = ((red - min_red) / (max_red - min_red)) rel_green = ((green - min_verde) / (max_verde - min_verde)) rel_blue = ((blau - min_blue) / (max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hsv_col [0] if rel_bright> 0.9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color (tonalitat) # selecció de colors per valors de tonalitat # imprimir ("valors relatius brillants, vermell, verd, blau:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("Valors HSV (tonalitat, saturació, valor):", hsv_col) # print ("tonalitat en °", tonalitat) return [col, rel_bright, rel_red, rel_green, rel_blue, tonalitat]

def main ():

button = aiy.voicehat.get_button () # change Button led led = aiy.voicehat.get_led () # change Button-LED status aiy.audio.get_recorder (). start () # buttoni = Botó (5) # sensor de distància o altre botó extern, connectat a servo3 / GPIO 05

aiy.audio.say ("Hola!",, volum = 50, pitch = 100) # volum i pitch requereixen la revisió del novembre de 2017 del controlador audio.py i _tty.py.

aiy.audio.say ("Per començar, moveu el sensor per sobre de l'objecte. A continuació, premeu el botó blau",, volum = 50, pitch = 100) imprimeix ("Per activar la mesura del color, col·loqueu el sensor a sobre de l'objecte i premeu el botó blau ") mentre és cert: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # per al botó extern, substituïu el botó per buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Mesurant ",, volum = 50, to = 100) result = tcs34725 () # evoca mesurament i interpretació col = resultat [0] # color, com a text tonalitat = str (int (resultat [5])) # tonalitat en °, com a text r_red = str (int (resultat [2] * 255)) # valor R, com a text r_green = str (int (resultat [3] * 255)) # valor G, com a text r_blue = str (int (resultat [4] * 255)) # valor B, com a text r_bright = str (int (resultat [1] * 100)) # valor W, com a text led.set_state (aiy.voicehat. LED. OFF) si col == "blanc "o col ==" negre ": brillant =" "elif (resultat [1]> 0,69): # brillantor / lleugeresa del color brillant =" clar "elif (resultat [1] <0,25): brillant =" fosc "més: brillant = "mitjà" # comuniant t Resulta color_text = ("El color de l'objecte és" + brillant + "" + col) imprimeix (color_text) aiy.audio.say (color_text,, volum = 75, pitch = 100) hue_text = ("El valor de la tonalitat és "+ tonalitat +" graus ") imprimir (text_tonalitat) aiy.audio.say (text_tonalitat, volum = 75, tonalitat = 100)

if _name_ == '_main_': main ()

Pas 4: alguns enllaços i observacions

El full de dades del sensor TCS34725 es pot trobar aquí:

El codi per llegir el sensor que he utilitzat es va descriure aquí:

Podeu trobar informació addicional sobre les mesures de color amb aquest sensor i amb un altre sensor a les meves instruccions anteriors:

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

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

Recomanat: