Table des matières:
- Étape 1: Matériaux utilisés
- Étape 2: Assemblage et utilisation
- Étape 3: Le code
- Étape 4: Quelques liens et remarques
Vidéo: Un capteur de couleur parlant, basé sur le kit vocal AIY : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Ayant appris un peu sur le braille récemment, je me demandais si je pouvais construire quelque chose en utilisant le kit vocal AIY pour Raspberry Pi, qui pourrait avoir un avantage réel pour les malvoyants. Ainsi décrit dans ce qui suit, vous trouverez un prototype d'un dispositif de détection de couleur simple qui lit ses résultats à haute voix.
Une version plus élaborée de ce système pourrait être utile pour les personnes malvoyantes ou daltoniennes.
Le système utilise un Raspberry Pi avec un chapeau vocal AIY attaché. Un breakout de capteur RVB TCS34725 est connecté au port I2C du HAT. Le breakout contient une LED blanc chaud brillant pour éclairer l'objet à analyser. Le breakout a été placé dans un boîtier pour optimiser et standardiser les conditions de mesure.
Le capteur à trois couleurs mesure à peu près les trois mêmes plages de fréquences que les capteurs de couleur de vos yeux. Ensuite, les valeurs de rouge, vert et bleu (RVB) sont utilisées pour calculer l'impression de couleur globale.
La bonne chose à propos de ce système spécial est qu'il vous indique maintenant la couleur verbalement, en utilisant la commande "dire" des kits vocaux AIY. S'il vous plaît jeter un oeil sur la vidéo d'accompagnement.
L'appareil peut également être utile comme exemple pour un appareil de capteur I2C connecté au HAT vocal AIY.
Étape 1: Matériaux utilisés
Raspberry Pi 3. ~ 35 US$ ou EUR
Kit vocal AIY, avec en-têtes soudés au HAT. ~ 25US$ ou EUR
Breakout Adafruit TCS34725, avec un en-tête soudé. ~ 8 US$ ou EUR
Câbles de démarrage.
Une planche à pain (facultatif)
Pour le boîtier du capteur:- une capsule de café "Dolce Gusto" usagée- un petit morceau rond de 2mm Forex (plaque en mousse PVC), environ 37mm de diamètre- un matériau noir non réfléchissant pour recouvrir les parois intérieures du boîtier. J'ai utilisé de la mousse de caoutchouc noire autocollante.
En option: un petit interrupteur pour évoquer les mesures
Quelques gouttes de colle plastique et un cutter.
Étape 2: Assemblage et utilisation
Le Raspberry Pi avec le HAT vocal AIY a été configuré comme décrit dans le manuel AIY. Avant l'assemblage, les en-têtes ont été soudés aux ports du HAT. Pour le logement du capteur, une capsule de café "Dulce Gusto" a été vidée, nettoyée, et une partie du fond soigneusement retirée avec un couteau. Vous pouvez utiliser autre chose à cette fin, la capsule de café avait juste la bonne taille et la bonne forme. Un morceau rond de Forex de 2 mm a été découpé dans une plaque, l'évasion a ensuite été placée au centre de la plaque Forex, la position marquée avec un feutre, et une fente pour l'en-tête sur l'évasion a été coupée à la position appropriée.
Maintenant, la pièce Forex a été collée sur le boîtier et la rupture du capteur fixée à la plaque Forex, à l'aide d'une bande Velcro. Ensuite, les parois intérieures ont été recouvertes d'un matériau noir absorbant la lumière, j'ai utilisé une mousse de caoutchouc auto-adhésive. Le carton noir devrait également fonctionner. Maintenant, à l'aide de câbles de démarrage, le port I2C "3.3V" du HAT était connecté à "V in" sur le capteur, Ground à Gnd, sda à sda et scl à scl. J'avais utilisé une maquette pour connecter les deux parties, mais ce n'est pas nécessaire.
Placez le script python AIY_TCS34725 dans le dossier src et exécutez le script à partir du terminal de développement, en saisissant "sec/AIY_TCS34752.py". Vous devrez peut-être d'abord rendre le script python exécutable. Lorsque vous y êtes invité, placez le capteur sur l'objet à mesurer, appuyez sur le bouton de l'appareil AIY et attendez une seconde ou deux.
Ensuite, sur la base des valeurs RVB et blanches mesurées, l'appareil calcule d'abord la valeur de teinte correspondante, puis estime la couleur en fonction de cette valeur et les communique verbalement via le système vocal AIY, par ex. g. comme "rouge foncé", mais donne également la valeur de teinte. Les valeurs RVB, teinte et luminosité (luminosité, pour être exact) sont également imprimées à l'écran.
Pour simplifier le processus d'annotation des couleurs, les valeurs RVB sont transformées au format HSV (teinte, saturation, valeur). Cela permet d'annoter une couleur selon une certaine plage d'angles (c'est-à-dire une tranche de tarte) et de choisir la couleur en fonction de la valeur de teinte calculée.
Vous devez normaliser votre appareil par rapport à une référence blanche et noire. Mesurez simplement les morceaux de papier les plus blancs et les plus noirs dont vous disposez, prenez une mesure chacun et placez ces valeurs comme valeurs maximales et minimales dans le code. Seules des valeurs de référence optimales donneront une bonne reconnaissance des couleurs.
Un problème fondamental est la réflexion. Si vous avez un objet avec une surface brillante ou polie, il reflétera une grande partie de la lumière émise par la LED, apparaissant beaucoup plus léger qu'il ne l'est réellement. Vous pouvez utiliser une feuille de membrane pour diffuser la lumière, mais vous devrez peut-être mettre en œuvre un facteur de correction.
Dans le cas d'objets translucides, il peut être pratique de les placer sur un papier blanc, sinon la quantité de lumière réfléchie sera trop petite et l'objet signalé comme "noir".
Si vous souhaitez mesurer la couleur des objets qui émettent de la lumière, vous devez éteindre la LED sur le breakout en connectant le port "LED" sur le breakout à "Ground". Définissez maintenant les valeurs de normalisation en conséquence.
Un autre problème général est l'éclairage de l'objet. La LED blanc chaud sur le breakout émet un spectre de lumière non continu. Par conséquent, certaines couleurs peuvent être sur- ou sous-représentées dans le spectre RVB. Pour plus d'informations sur ce sujet, veuillez jeter un oeil sur mes précédentes instructables sur un colorimètres/photomètres et spectromètres:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
Étape 3: Le code
Le code est une combinaison d'une modification d'un code du manuel vocal AIY et du code du capteur TCS34725 de Bradspi.
J'avais également essayé d'utiliser le code python TCS34725 d'Adafruit, mais j'ai eu des problèmes pour exécuter ce code et d'autres codes qui utilisent des bibliothèques externes en combinaison avec AIY HAT. Toute aide bienvenue.
Comme mentionné précédemment, l'annotation de couleur est basée sur une transformation des valeurs RVB en teinte. Vous devez définir des paramètres de normalisation basés sur des mesures expérimentales de matériaux de révérence blancs et noirs. Remplissez les valeurs absolues pour R, G et B min ou max en conséquence.
Le script utilise une nouvelle version de la commande "say" qui permet de régler le volume et le pitch. Dans ce cas, vous devrez peut-être mettre à jour les fichiers de pilote audio.py et tty ou supprimer les "parties de volume et de hauteur" du script.
#!/usr/bin/env python3# Ce script est une adaptation du script servo_demo.py pour le AIY voice HAT, # optimisé pour la reconnaissance des couleurs avec l'Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat #from gpiozero import LED # pourrait être utile pour une LED externe sur le servo-port #from gpiozero import Button # pourrait être utile pour un bouton externe sur le servo-port import time import smbus bus = smbus. SMBus(1) import coloursys def hue2color (teinte): # interprétation des couleurs basée sur les valeurs de teinte calculées si ((teinte> 12) et (teinte 25) et (teinte 69) et (teinte 164) et (teinte 194) et (teinte 269) et (teinte 319) ou (teinte< 20)): color="red" return color else: print ("quelque chose s'est mal passé")
def tcs34725(): # mesure et interprétation.
# La mesure est effectuée par le script Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte(0x29, 0x80|0x12) ver = bus.read_byte(0x29) # version # devrait être 0x44 si 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 capteurs RVB activés bus.write_byte(0x29, 0x80|0x14) # Les résultats de lecture démarrent le registre 14, LSB puis MSB data = bus.read_i2c_block_data(0x29, 0) clear = clear = data[1] << 8 | données[0] rouge = données[3] << 8 | données[2] vert = données[5] << 8 | données[4] bleu = données[7] << 8 | data[6] crgb = "Comptes absolus: C: %s, R: %s, G: %s, B: %s\n" % (clair, rouge, vert, bleu) print (crgb) time.sleep(1) else: print ("Device not found\n") # normalisation et transformation des valeurs RGBW mesurées # Valeurs maximales Facteurs de normalisation, doivent être définis expérimentalement # ex. vs une feuille de papier blanc. Vérifiez et corrigez de temps en temps. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # Facteurs de normalisation de fond/valeurs minimales, doivent être définis expérimentalement # par ex. par rapport à une feuille de papier noire. Vérifiez et corrigez de temps en temps. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # valeurs normalisées, entre 0 et 1 rel_bright = ((clear - min_bright)/(max_bright - min_bright)) rel_red = ((red - min_red)/(max_red - min_red)) rel_green = ((green - min_green)/(max_green - min_green)) rel_blue = ((blue - min_blue)/(max_blue - min_blue)) hsv_col = coloursys.rgb_to_hsv(rel_red, rel_green, rel_blue) teinte = hsv_col[0]*359 if rel_bright > 0.9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color(hue) # sélection des couleurs par valeurs de teinte # print("valeurs relatives bright, red, green, blue:") # print (rel_bright, rel_red, rel_green, rel_blue) # print("Valeurs HSV (teinte, saturation, valeur):", hsv_col) # print ("teinte en ° ", teinte) return [col, rel_bright, rel_red, rel_green, rel_blue, teinte]
def principal():
button = aiy.voicehat.get_button() # changer l'état du bouton led = aiy.voicehat.get_led() # changer l'état du bouton-LED aiy.audio.get_recorder().start() # buttoni= Button(5) # capteur de distance ou autre bouton externe, connecté au servo3/GPIO 05
aiy.audio.say("Bonjour!",, volume=50, pitch=100) # le volume et le pitch nécessitent la révision de novembre 2017 des pilotes audio.py et _tty.py !
aiy.audio.say("Pour commencer, déplacez le capteur au-dessus de l'objet. Ensuite, appuyez sur le bouton bleu",, volume=50, pitch = 100) print("Pour activer la mesure des couleurs, placez le capteur au-dessus de l'objet, puis appuyez sur le bouton bleu ") tant que True: led.set_state(aiy.voicehat. LED. ON) button.wait_for_press() # pour le bouton externe, remplacez le bouton par buttoni led.set_state(aiy.voicehat. LED. BLINK) aiy.audio.say(" Measuring",, volume=50, pitch = 100) result = tcs34725() # évoque la mesure et l'interprétation col = result[0] # color, as text hue = str(int(result[5])) # hue in °, as text r_red = str(int(result[2]*255)) # Valeur R, as text r_green = str(int(result[3]*255)) # Valeur G, as text r_blue = str(int(result[4]*255)) # Valeur B, sous forme de texte r_bright = str(int(result[1]*100)) # Valeur W, sous forme de texte led.set_state(aiy.voicehat. LED. OFF) if col == "white " ou col=="noir": bright = "" elif (résultat[1] >0.69): #luminosité/luminosité de la couleur bright ="light" elif (résultat[1] <0.25): bright ="dark" else: bright ="medium" # t communiquant il résulte color_text =("La couleur de l'objet est " + bright + " " + col) print (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("La valeur de teinte est "+ hue+ " degrés") print (hue_text) aiy.audio.say(hue_text,, volume=75, pitch = 100)
if _name_ == '_main_': main()
Étape 4: Quelques liens et remarques
La fiche technique du capteur TCS34725 est disponible ici:
Le code pour lire le capteur que j'ai utilisé a été décrit ici:
Vous pouvez trouver des informations supplémentaires sur les mesures de couleur avec ce capteur et un autre dans mes instructables précédentes:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
Conseillé:
Vocal GOBO - Sound Damper Shield - Vocal Booth - Vocal Box - Reflexion Filter - Vocalshield: 11 Steps
Vocal GOBO - Sound Dampener Shield - Vocal Booth - Vocal Box - Reflexion Filter - Vocalshield : J'ai commencé à enregistrer plus de voix dans mon home studio et je voulais obtenir un meilleur son et après quelques recherches, j'ai découvert ce qu'est un "GOBO" était. J'avais vu ces amortisseurs sonores mais je n'avais pas vraiment réalisé ce qu'ils faisaient. Maintenant oui. J'ai trouvé un y
Suivi d'objet basé sur la détection de couleur : 10 étapes
Suivi d'objets basé sur la détection des couleurs : histoire J'ai réalisé ce projet pour apprendre le traitement d'images à l'aide de Raspberry PI et d'un CV ouvert. Pour rendre ce projet plus intéressant, j'ai utilisé deux servomoteurs SG90 et monté la caméra dessus. Un moteur utilisé pour se déplacer horizontalement et un deuxième moteur utilisé pour se déplacer verticalement
Générateur de musique basé sur la météo (Générateur Midi basé sur ESP8266): 4 étapes (avec images)
Générateur de musique basé sur la météo (Générateur Midi basé sur ESP8266): Bonjour, aujourd'hui, je vais vous expliquer comment créer votre propre petit générateur de musique basé sur la météo. Il est basé sur un ESP8266, qui ressemble un peu à un Arduino, et il réagit à la température, à la pluie et l'intensité lumineuse. Ne vous attendez pas à ce qu'il fasse des chansons entières ou un programme d'accords
Ajouter un son de déclenchement au kit vocal Google AIY : 6 étapes (avec images)
Ajouter un son de déclenchement au kit vocal Google AIY : ce didacticiel est assez simple. J'ai vraiment apprécié le Google AIY Voice Kit, mais j'aime vraiment le bruit qu'ils font sur mon Google Home normal pour confirmer qu'ils écoutent activement. Ce n'est pas configuré par défaut dans les exemples qui
Capteur de vent parlant (avec un kit d'enregistrement vocal) : 6 étapes
Capteur de vent parlant (avec un kit d'enregistrement vocal) : il s'agit d'un capteur de vent avec des fils conducteurs, des tissus conducteurs et une boule en métal