Говорещ цветен сензор, базиран на AIY Voice Kit: 4 стъпки
Говорещ цветен сензор, базиран на AIY Voice Kit: 4 стъпки
Anonim
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit
Говорещ цветен сензор, базиран на AIY Voice Kit

След като научих малко за брайловото писмо наскоро, се чудех дали мога да създам нещо с помощта на AIY гласовия комплект за Raspberry Pi, което може да има реална полза за хора с увредено зрение. Така описано по -долу ще намерите прототип на просто устройство за разпознаване на цвят, което чете на глас своите констатации.

По -сложна версия на тази система може да бъде полезна за хора с увредено зрение или цветна слепота.

Системата използва Raspberry Pi с прикрепена AIY гласова ШАПКА. TCS34725 RGB сензорен пробив е свързан към I2C порта на HAT. Пробивът съдържа ярък топъл бял светодиод, който осветява обекта, който ще се анализира. Пробивът е поставен в корпус за оптимизиране и стандартизиране на условията на измерване.

Трите цветни сензора измерват приблизително същите три честотни диапазона като сензорите за цвят в очите ви. След това стойностите на червено, зелено и синьо (RGB) се използват за изчисляване на общото цветово впечатление.

Хубавото на тази специална система е, че сега тя ви казва цвета вербално, използвайки командата "say" на AIY гласовите комплекти. Моля, разгледайте придружаващото видео.

Устройството може да бъде полезно и като пример за I2C сензорно устройство, свързано с AIY гласова HAT.

Стъпка 1: Използвани материали

Raspberry Pi 3. ~ 35 US $ или EUR

AIY гласов комплект, със заглавки, запоени към HAT. ~ 25US $ или EUR

Adafruit TCS34725 пробив, с хедер, запоен. ~ 8 щатски долара или евро

Джъмперни кабели.

Макет (по избор)

За корпуса на сензора:- използвана капсула за кафе "Dolce Gusto"- малко кръгло парче от 2 мм Forex (плоча от PVC пяна), с диаметър около 37 мм- неотразяващ черен материал за покриване на вътрешните стени на корпуса. Използвах самозалепваща се черна гумена пяна.

По избор: малък превключвател за извикване на измерванията

Няколко капки пластмасово лепило и нож за рязане.

Стъпка 2: Сглобяване и използване

Сглобяване и използване
Сглобяване и използване
Сглобяване и използване
Сглобяване и използване
Сглобяване и използване
Сглобяване и използване

Raspberry Pi с AIY гласова HAT е настроен, както е описано в ръководството на AIY. Преди сглобяването, заглавките бяха запоени към портовете на HAT. За корпуса на сензора, една капсула за кафе "Dulce Gusto" беше изпразнена, почистена и част от дъното внимателно отстранена с нож. Можете да използвате нещо друго за тази цел, капсулата за кафе просто имаше правилния размер и форма. Кръгло парче от 2 мм Forex беше изрязано от плоча, след това пробивът беше поставен централно върху Forex плочата, позицията бе маркирана с химикалка, а слотът за заглавката на пробива беше изрязан на подходящата позиция.

Сега Forex парчето беше залепено върху корпуса и сензорният пробив е прикрепен към Forex плочата, като се използва велкро лента. След това вътрешните стени бяха покрити със светлопоглъщащ черен материал, използвах самозалепваща се гумена пяна. Черният картон също трябва да работи. Сега, използвайки джъмпер кабели, I2C "3.3V" портът на HAT беше свързан към "V in" на сензора, Ground към Gnd, sda към sda и scl към scl. Бях използвал макет за свързване на двете части, но това не е необходимо.

Поставете скрипта AIY_TCS34725 python в папката src и стартирайте скрипта от терминала за разработчици, като въведете „sec/AIY_TCS34752.py“. Може да се наложи първо да направите скрипта на python изпълним. Когато бъдете помолени, поставете сензорния модул върху обекта, който ще се измерва, натиснете бутона в AIY устройството и изчакайте секунда или две.

След това, въз основа на измерените стойности на RGB и бялото, устройството първо изчислява съответната стойност на нюанса, след това оценява цвета въз основа на тази стойност и ги съобщава устно чрез гласовата система AIY, напр. g. като „тъмночервено“, но също така дава стойност на нюанса. Стойностите на RGB, нюанс и яркост (лекота, за да бъдем точни) също се отпечатват на екрана.

За да се опрости процеса на цветно анотиране, стойностите на RGB се трансформират във формат HSV (нюанс, насищане, стойност). Това позволява да се анотира цвят до определен диапазон от ъгли (т.е. парче филийка) и да се избере цвета въз основа на изчислената стойност на нюанса.

Трябва да нормализирате устройството си спрямо бяла и черна справка. Просто измерете най -белите и най -черни парчета хартия, които имате на разположение, направете измерване всеки и поставете тези стойности като максимални и минимални стойности в кода. Само оптималните референтни стойности ще дадат добро разпознаване на цвета.

Един основен проблем е отражението. Ако имате обект с лъскава или полирана повърхност, той ще отразява много светлина, излъчвана от светодиода, като изглежда много по -лек, отколкото е в действителност. Можете да използвате мембранен лист, за да разпръснете светлината, но може да се наложи да приложите корекционен коефициент.

В случай на полупрозрачни обекти, може да е удобно да ги поставите върху бяла хартия, в противен случай количеството на отразената светлина ще бъде твърде малко и обектът ще бъде отчетен като "черен".

Ако искате да измерите цвета на обектите, които излъчват светлина, трябва да изключите светодиода на пробива, като свържете "LED" порта на пробива към "Ground". Сега задайте съответно стойностите за нормализиране.

Друг общ проблем е осветяването на обекта. Топлият бял светодиод на пробива излъчва непрекъснат спектър от светлина. Следователно някои цветове могат да бъдат прекалено или недостатъчно представени в RGB спектъра. За повече информация по тази тема, моля, разгледайте предишните ми инструкции за колориметри/ фотометри и спектрометри:

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

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

Стъпка 3: Кодът

Кодът
Кодът

Кодът е комбинация от модификация на код от гласовото ръководство на AIY и сензорния код TCS34725 от Bradspi.

Аз също се опитах да използвам TCS34725 python код от Adafruit, но имах проблеми при стартирането на този и някои други кодове, които използват външни библиотеки в комбинация с AIY HAT. Всяка помощ е добре дошла.

Както бе споменато по -рано, цветната анотация се основава на трансформация на RGB към нюанси. Трябва да зададете настройки за нормализиране въз основа на експериментални измервания на бели и черни материали за благоговение. Попълнете съответно абсолютните стойности за R, G и B min или max.

Скриптът използва нова версия на командата "say", която позволява да се регулира силата на звука и височината. В такъв случай може да се наложи да актуализирате файловете с драйвери audio.py и tty или да изтриете „частите за силата на звука и височината“от скрипта.

#!/usr/bin/env python3 # Този скрипт е адаптация на скрипта servo_demo.py за AIY гласова ШАПКА, # оптимизиран за разпознаване на цветовете с помощта на пробив Afafruit TCS34725 aiy.audio внос aiy.cloudspeech внос aiy.voicehat # от gpiozero LED за импортиране # може да бъде полезен за външен светодиод на серво порт # от gpiozero бутон за импортиране # може да бъде полезен за външен бутон за време за импортиране на серво-порт импортиране smbus шина = smbus. SMBus (1) импортиране на colorys def hue2color (нюанс): # цветова интерпретация въз основа на изчислените стойности на нюанса if ((hue> 12) и (hue 25) и (hue 69) и (hue 164) и (hue 194) и (hue 269) и (hue 319) или (оттенък <20)): color = "red" връщане на цвят else: print ("нещо се обърка")

def tcs34725 (): # измерване и интерпретация.

# Измерването се извършва от скрипта на Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # версия # трябва да бъде 0x44, ако ver == 0x44: print ("Устройството е намерено / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = Активиране на регистъра bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = Включване, 0x02 RGB сензори активирани bus.write_byte (0x29, 0x80 | 0x14) # Резултатите от четенето започват регистър 14, LSB след това MSB данни = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | данни [0] червен = данни [3] << 8 | данни [2] зелено = данни [5] << 8 | данни [4] синьо = данни [7] << 8 | data [6] crgb = "Абсолютен брой: C: %s, R: %s, G: %s, B: %s / n" %(ясно, червено, зелено, синьо) печат (crgb) time.sleep (1) else: print ("Устройството не е намерено / n") # нормализиране и трансформиране на измерените стойности на RGBW col = "" # Максимални стойности Нормализиращите фактори, трябва да бъдат определени експериментално # напр. срещу бял лист хартия. Проверявайте и коригирайте от време на време. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Предистория/Минимални стойности нормализационни фактори, трябва да бъдат определени експериментално # напр. срещу черен лист хартия. Проверявайте и коригирайте от време на време. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # нормализирани стойности, между 0 и 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - min_red)/(max_red - min_red)) rel_green = ((зелено - min_green)/(max_green - min_green)) rel_blue = ((синьо - min_blue)/(max_blue - min_blue)) hsv_col = coloursys.rgb_to_hsv (rel_red, rel_green, rel_blue) hue = hs = 0 ако rel_bright> 0.9: col = "бял" # ако е много ярък -> бял elif rel_bright черен иначе: col = hue2color (hue) # избор на цвят по нюанси # print ("относителни стойности ярко, червено, зелено, синьо:") # print (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV стойности (нюанс, насищане, стойност):", hsv_col) # print ("оттенък в °", hue) return [col, rel_bright, rel_red, rel_green, rel_blue, hue]

def main ():

button = aiy.voicehat.get_button () # промяна на състоянието на бутона led = aiy.voicehat.get_led () # промяна на състоянието на LED-бутона aiy.audio.get_recorder (). start () # buttoni = Button (5) # сензор за разстояние или друг външен бутон, свързан към servo3/GPIO 05

aiy.audio.say ("Здравейте!",, том = 50, височина = 100) # томът и височината изискват ревизия на аудио.py и _tty.py драйвер през ноември 2017 г.!

aiy.audio.say ("За да започнете, преместете сензора над обекта. След това натиснете синия бутон",, сила на звука = 50, стъпка = 100) ") while True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # за външен бутон, заменете бутона с buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" Измерване ",, обем = 50, височина = 100) резултат = tcs34725 () # извиква измерване и интерпретация col = резултат [0] # цвят, като текст hue = str (int (резултат [5])) # оттенък в °, като текст r_red = str (int (резултат [2]*255)) # R стойност, като текст r_green = str (int (резултат [3]*255)) # G стойност, като текст r_blue = str (int (резултат [4]*255)) # B стойност, като текст r_bright = str (int (резултат [1]*100)) # W стойност, като текст led.set_state (aiy.voicehat. LED. OFF) ако col == "бяло "or col ==" black ": bright =" "elif (резултат [1]> 0.69): #яркост/яркост на цвета bright =" светлина "elif (резултат [1] <0.25): bright =" тъмно "иначе: bright = "medium" # съобщаващ t той получава color_text = ("Цветът на обекта е" + bright + "" + col) print (color_text) aiy.audio.say (color_text,, том = 75, стъпка = 100) hue_text = ("Стойността на нюанса е "+ hue+" градуси ") print (hue_text) aiy.audio.say (hue_text,, том = 75, височина = 100)

ако _name_ == '_main_': main ()

Стъпка 4: Някои връзки и забележки

Информационният лист на сензора TCS34725 може да бъде намерен тук:

Кодът за четене на сензора, който използвах, беше описан тук:

Може да намерите допълнителна информация за цветовите измервания с този и друг сензор в предишните ми инструкции:

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

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

Препоръчано: