Spisu treści:

Mówiący czujnik koloru oparty na zestawie głosowym AIY: 4 kroki
Mówiący czujnik koloru oparty na zestawie głosowym AIY: 4 kroki

Wideo: Mówiący czujnik koloru oparty na zestawie głosowym AIY: 4 kroki

Wideo: Mówiący czujnik koloru oparty na zestawie głosowym AIY: 4 kroki
Wideo: Fox - system sterowania wifi. Google assistant. Asystent głosowy- przykładowe komendy 2024, Listopad
Anonim
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY
Mówiący czujnik koloru oparty na zestawie głosowym AIY

Dowiedziawszy się ostatnio trochę o brajlu, zastanawiałem się, czy mógłbym zbudować coś przy użyciu zestawu głosowego AIY dla Raspberry Pi, co może przynieść realne korzyści osobom niedowidzącym. Tak więc opisane poniżej znajdziesz prototyp prostego urządzenia do wykrywania kolorów, które odczytuje na głos swoje wyniki.

Bardziej rozbudowana wersja tego systemu może być przydatna dla osób z upośledzeniem wzroku lub ślepotą barw.

System wykorzystuje Raspberry Pi z dołączoną nakładką głosową AIY. Przerwa czujnika RGB TCS34725 jest podłączona do portu I2C HAT. Przerwa zawiera jasną, ciepłą, białą diodę LED, która oświetla analizowany obiekt. Przerywacz umieszczono w obudowie, aby zoptymalizować i ujednolicić warunki pomiaru.

Trzy czujniki koloru mierzą mniej więcej te same trzy zakresy częstotliwości, co czujniki koloru w twoich oczach. Następnie wartości czerwonego, zielonego i niebieskiego (RGB) są wykorzystywane do obliczenia ogólnego wrażenia koloru.

Zaletą tego specjalnego systemu jest to, że teraz mówi on o kolorze ustnie, używając polecenia „powiedz” zestawu głosowego AIY. Proszę spojrzeć na dołączony film.

Urządzenie może być również przydatne jako przykład dla urządzenia czujnika I2C podłączonego do AIY voice HAT.

Krok 1: Użyte materiały

Raspberry Pi 3. ~ 35 USD lub EUR

Zestaw głosowy AIY, z nagłówkami przylutowanymi do HAT. ~ 25 USD lub EUR

Wybijak Adafruit TCS34725 z przylutowaną główką. ~ 8 USD lub EUR

Kable rozruchowe.

Deska do krojenia chleba (opcjonalnie)

W przypadku obudowy czujnika:- zużyta kapsułka z kawą „Dolce Gusto”- mały okrągły kawałek 2 mm Forex (płyta z pianki PVC), o średnicy około 37 mm- nieodblaskowy czarny materiał do zakrycia wewnętrznych ścian obudowy. Użyłem samoprzylepnej czarnej pianki gumowej.

Opcjonalnie: mały przełącznik do przywoływania pomiarów

Kilka kropel plastikowego kleju i nóż do cięcia.

Krok 2: Montaż i użytkowanie

Montaż i użytkowanie
Montaż i użytkowanie
Montaż i użytkowanie
Montaż i użytkowanie
Montaż i użytkowanie
Montaż i użytkowanie

Raspberry Pi z nakładką głosową AIY zostało skonfigurowane zgodnie z opisem w instrukcji AIY. Przed montażem nagłówki zostały przylutowane do portów na HAT. Do obudowy czujnika opróżniono kapsułkę z kawą „Dulce Gusto”, oczyszczono, a część dna ostrożnie usunięto nożem. Możesz użyć do tego czegoś innego, kapsułka z kawą po prostu miała odpowiedni rozmiar i kształt. Okrągły kawałek Forexu o średnicy 2 mm został wycięty z płytki, następnie wybicie umieszczono centralnie na płytce Forex, pozycję oznaczono pisakiem, a w odpowiednim miejscu wycięto szczelinę na główkę na wybicie.

Teraz kawałek Forex został przyklejony do obudowy, a wybicie czujnika przymocowane do płyty Forex za pomocą paska na rzep. Następnie wewnętrzne ścianki obłożono czarnym materiałem pochłaniającym światło, użyłem samoprzylepnej pianki gumowej. Powinna też działać czarna tektura. Teraz za pomocą kabli połączeniowych port I2C "3.3V" HAT został podłączony do "V in" na czujniku, uziemienia do Gnd, sda do sda i scl do scl. Do połączenia obu części użyłem płytki stykowej, ale to nie jest konieczne.

Umieść skrypt AIY_TCS34725 Pythona w folderze src i uruchom skrypt z terminala deweloperskiego, wpisując „sec/AIY_TCS34752.py”. Być może najpierw trzeba będzie wykonać skrypt Pythona. Gdy zostaniesz o to poproszony, umieść czujnik nad mierzonym obiektem, naciśnij przycisk w urządzeniu AIY i odczekaj sekundę lub dwie.

Następnie, na podstawie zmierzonych wartości RGB i bieli, urządzenie najpierw oblicza odpowiednią wartość odcienia, a następnie szacuje kolor na podstawie tej wartości i przekazuje je ustnie za pomocą systemu głosowego AIY, np. g. jako „ciemnoczerwony”, ale daje również wartość odcienia. Wartości RGB, barwy i jasności (dokładnie jasności) są również drukowane na ekranie.

Aby uprościć proces opisywania kolorów, wartości RGB są przekształcane na format HSV (odcień, nasycenie, wartość). Pozwala to opisać kolor pod pewnymi kątami (np. kawałek ciasta) i wybrać kolor na podstawie obliczonej wartości odcienia.

Musisz znormalizować swoje urządzenie względem białego i czarnego odniesienia. Po prostu zmierz najbielsze i najczarniejsze dostępne kawałki papieru, zmierz każdy z nich i umieść te wartości jako wartości maksymalne i minimalne w kodzie. Tylko optymalne wartości referencyjne zapewnią dobre rozpoznawanie kolorów.

Jednym z podstawowych problemów jest refleksja. Jeśli masz przedmiot o błyszczącej lub polerowanej powierzchni, będzie odbijał dużo światła emitowanego przez diodę LED, wyglądając na znacznie jaśniejszy niż w rzeczywistości. Możesz użyć arkusza membrany, aby rozproszyć światło, ale może być konieczne zastosowanie współczynnika korekcji.

W przypadku półprzezroczystych obiektów przydatne może być umieszczenie ich na białym papierze, w przeciwnym razie ilość odbitego światła będzie zbyt mała, a obiekt będzie zgłaszany jako „czarny”.

Jeśli chcesz mierzyć kolor obiektów, które emitują światło, należy wyłączyć diodę LED na zacisku, podłączając port „LED” na zacisku do „Ground”. Teraz ustaw odpowiednio wartości normalizacji.

Innym ogólnym problemem jest oświetlenie obiektu. Ciepła biała dioda LED na breakout emituje nieciągłe widmo światła. Dlatego niektóre kolory mogą być nadmiernie lub niedostatecznie reprezentowane w widmie RGB. Więcej informacji na ten temat można znaleźć w moich poprzednich instrukcjach dotyczących kolorymetrów/fotometrów i spektrometrów:

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

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

Krok 3: Kodeks

Kod
Kod

Kod jest kombinacją modyfikacji kodu z podręcznika głosowego AIY oraz kodu czujnika TCS34725 firmy Bradspi.

Próbowałem również użyć kodu Pythona TCS34725 z Adafruit, ale miałem problemy z uruchomieniem tego i kilku innych kodów, które używają zewnętrznych bibliotek w połączeniu z AIY HAT. Każda pomoc mile widziana.

Jak wspomniano wcześniej, adnotacja koloru opiera się na przekształceniu wartości RGB na wartości odcienia. Musisz ustawić ustawienia normalizacji w oparciu o eksperymentalne pomiary białych i czarnych materiałów czci. Wprowadź odpowiednio wartości bezwzględne dla R, G i B min lub max.

Skrypt wykorzystuje nową wersję polecenia „powiedz”, która pozwala regulować głośność i wysokość dźwięku. W takim przypadku może być konieczne zaktualizowanie plików sterownika audio.py i tty lub usunięcie "części głośności i wysokości dźwięku" ze skryptu.

#!/usr/bin/env python3# Ten skrypt jest adaptacją skryptu servo_demo.py dla AIY voice HAT, # zoptymalizowanym do rozpoznawania kolorów przy użyciu breakouta Afafruit TCS34725 import aiy.audio import aiy.cloudspeech import aiy.voicehat #from gpiozero import LED # może być pomocny dla zewnętrznej diody LED na porcie serwo #from gpiozero import Button # może być pomocny dla zewnętrznego przycisku na porcie servo import time import smbus bus = smbus. SMBus(1) import colorsys def hue2color (odcień): # interpretacja kolorów na podstawie obliczonych wartości odcieni, jeśli ((odcień> 12) i (odcień 25) i (odcień 69) i (odcień 164) i (odcień 194) i (odcień 269) i (odcień 319) lub (odcień< 20)): color="red" return color else: print ("coś poszło nie tak")

def tcs34725(): # pomiar i interpretacja.

# Pomiar wykonywany jest przez skrypt Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte(0x29, 0x80|0x12) ver = bus.read_byte(0x29) # version # powinno być 0x44, jeśli ver == 0x44: print ("Znaleziono urządzenie\n") bus.write_byte(0x29, 0x80|0x00) # 0x00 = WŁĄCZ rejestr bus.write_byte(0x29, 0x01|0x02) # 0x01 = Włącz, 0x02 Włączone czujniki RGB bus.write_byte(0x29, 0x80|0x14) # Odczyt wyników rejestru start 14, LSB potem MSB data = bus.read_i2c_block_data(0x29, 0) clear = clear = data[1] << 8 | dane[0] czerwony = dane[3] << 8 | dane[2] zielony = dane[5] << 8 | dane[4] niebieski = dane[7] << 8 | data[6] crgb = "Liczba bezwzględna: C: %s, R: %s, G: %s, B: %s\n" % (clear, red, green, blue) print (crgb) time.sleep(1) else: print ("Nie znaleziono urządzenia\n") # normalizacja i transformacja zmierzonych wartości RGBW # Wartości maksymalne Współczynniki normalizacji muszą być zdefiniowane eksperymentalnie # np. kontra biała kartka papieru. Sprawdzaj i poprawiaj od czasu do czasu. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Współczynniki normalizacji wartości tła/minimalnych, muszą być określone eksperymentalnie # np. kontra czarna kartka papieru. Sprawdzaj i poprawiaj od czasu do czasu. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # wartości znormalizowane, między 0 a 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - min_red)/(max_red - min_red)) rel_green = ((zielony - min_green)/(max_green - min_green)) rel_blue = ((niebieski - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv(rel_red, rel_green, rel_blue) hue = hsv_col[0]*359 if rel_bright > 0.9: col = "white" # if bardzo jasny -> biały elif rel_bright black else: col = hue2color(hue) # wybór koloru według wartości barwy # print("wartości względne bright, red, green, blue:") # print (rel_bright, rel_red, rel_green, rel_blue) # print("wartości HSV (odcień, nasycenie, wartość):", hsv_col) # print ("odcień w °", odcień) return [col, rel_bright, rel_red, rel_green, rel_blue, odcień]

zdefiniuj główne():

button = aiy.voicehat.get_button() # zmiana stanu diody LED = aiy.voicehat.get_led() # zmiana stanu diody LED przycisku aiy.audio.get_recorder().start() # buttoni= Button(5) # czujnik odległości lub inny przycisk zewnętrzny, podłączony do serwo3/GPIO 05

aiy.audio.say("Hello!",, volume=50, pitch=100) # głośność i głośność wymagają korekty sterownika audio.py i _tty.py z listopada 2017 r.!

aiy.audio.say("Aby rozpocząć przesuń czujnik nad obiekt. Następnie naciśnij niebieski przycisk",, głośność=50, pitch = 100) print("Aby aktywować pomiar koloru umieść czujnik nad obiektem, następnie naciśnij niebieski przycisk ") podczas gdy True: led.set_state(aiy.voicehat. LED. ON) button.wait_for_press() # dla przycisku zewnętrznego, zamień przycisk na buttoni led.set_state(aiy.voicehat. LED. BLINK) aiy.audio.say(" Pomiar",, objętość=50, skok = 100) wynik = tcs34725() # wywołuje pomiar i interpretację col = wynik[0] # kolor, jako tekst barwa = str(int(wynik[5])) # barwa w °, jako tekst r_red = str(int(wynik[2]*255)) # wartość R, jako tekst r_green = str(int(wynik[3]*255)) # wartość G, jako tekst r_blue = str(int(wynik[4]*255)) # wartość B, jako tekst r_bright = str(int(result[1]*100)) # wartość W, jako tekst led.set_state(aiy.voicehat. LED. OFF) if col == "biały " lub col=="czarny": jasny = "" elif (wynik[1] >0,69): #jasność/jasność koloru jasny ="jasny" elif (wynik[1] <0,25): jasny ="ciemny" else: jasny ="średni" # komunikujący się t w wyniku color_text =("Kolor obiektu to " + bright + " " + col) print (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("Wartość odcienia to „+ odcień+ „ stopnie”) print (odcień_tekst) aiy.audio.say(odcień_tekst,, głośność=75, wysokość = 100)

if _name_ == '_main_': main()

Krok 4: Niektóre linki i uwagi

Kartę danych czujnika TCS34725 można znaleźć tutaj:

Kod do odczytu czujnika, którego użyłem został opisany tutaj:

Możesz znaleźć dodatkowe informacje na temat pomiarów kolorów tym i innym czujnikiem w moich poprzednich instrukcjach:

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

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

Zalecana: