Il y a quelque années, nous avions eu la tentation de développer un capteur de couleur en utilisant un chip de capteur RGB classique, mais les résultats ne nous avaient pas convaincus. Aujourd'hui, nous vous présentons le Yocto-Spectral et sa version USB Type-C, le Yocto-Spectral-C, des modules capables de mesurer le spectre lumineux sur 13 canaux. Grâce à ces mesures, ils permettent d'estimer les valeurs RGB, HSL, XYZ et OkLab, et ainsi d'estimer la couleur vue par le capteur.
Perception des couleurs et spectre lumineux
La perception des couleurs par l'œil humain repose sur l'interprétation des ondes lumineuses qui nous entourent. La lumière visible est une petite partie du spectre électromagnétique, comprise entre environ 400 nm (violet) et 700 nm (rouge). Chaque couleur correspond à une longueur d'onde spécifique : le bleu autour de 450 nm, le vert autour de 550 nm et le rouge autour de 650 nm.
Lorsqu'une surface est éclairée, elle absorbe certaines longueurs d'onde et en réfléchit d'autres, qui sont alors perçues par notre œil. Par exemple, une pomme rouge absorbe la lumière dans les longueurs d'onde du bleu et du vert, tout en réfléchissant principalement le rouge.
Spectre de lumière visible
Pour reconnaître fiablement une couleur, on ne peut donc pas simplement mesurer l'intensité de rouge, vert et bleu. Les capteurs spectrométriques, comme celui du Yocto-Spectral, permettent de mesurer précisément cette répartition spectrale et d'en déduire la couleur perçue, en inférant de ces informations la couleur résultante, à l'aide d'un modèle prédictif.
Le Yocto-Spectral
Yocto-Spectral et Yocto-Spectral-C
Le Yocto-Spectral et le Yocto-Spectral-C intègrent un capteur spectral de chez AMS Osram, le AS7343. Ce capteur permet de mesurer l'intensité lumineuse sur 13 canaux couvrant le spectre visible et le proche infrarouge, entre 400 et 850 nm.
Sensitivité du capteur par longueur d'onde
Le module peut donc analyser la composition spectrale de la lumière réfléchie ou émise par une surface. Contrairement aux capteurs RGB classiques, qui se contentent d'une vague estimation des couleurs basée uniquement sur trois canaux (rouge, vert et bleu), le Yocto-Spectral offre une analyse bien plus fine et détaillée, permettant d'estimer des représentations crédibles dans différents espaces colorimétriques tels que RGB, HSL, XYZ et OkLab. Cette capacité ouvre la porte à des applications plus avancées, comme l'analyse de teintes spécifiques, l'identification de matériaux ou l'analyse de conditions d'éclairage.
Pour faciliter les mesures de réflexion, le module est équipé de deux LEDs blanches à large spectre, qui permettent d'éclairer uniformément la surface à analyser. Il peut ainsi être utilisé aussi bien pour des mesures par réflexion, adaptées aux surfaces passives, que pour des mesures d'émission, permettant d'analyser la lumière provenant de sources telles que des écrans ou des LED.
Estimation de couleur
En plus d'estimer les valeurs RGB, HSL, XYZ et OkLab, le capteur propose également une classification par rapport à trois ensembles de couleurs connus:
- les 11 couleurs de base couramment utilisées : brun, rouge, orange, jaune, vert, bleu, violet, rose, blanc, gris et noir;
- la palette RAL Classic, utilisée dans l'industrie des matériaux;
- la palette HTML classiques, utilisée en informatique.
Utilisation optimale du Yocto-Spectral
Pour que le Yocto-Spectral fournisse une estimation de couleur précise, en particulier en mode réflexion, il est essentiel de positionner le capteur à une distance fixe de la surface à mesurer, et avec une source lumineuse maîtrisée. Pour cela, nous avons développé un adaptateur qui se fixe directement sur le capteur. Il est aussi possible d'utiliser le boîtier dédié du module, le YoctoBox-Spectral-Black, qui intègre le même adaptateur dans son couvercle. Il suffit de plaquer cet adaptateur (ou le couvercle du boîtier) contre la surface à analyser pour garantir un éclairage homogène et ainsi obtenir des mesures bien reproductibles.
Le boîtier YoctoBox-Spectral-Black et le Yocto-Spectral-Adapter
L'adaptateur est disponible à l'achat sur notre site, mais nous mettons également à disposition gratuitement les fichiers 3D afin que vous puissiez l'imprimer vous-même avec une imprimante 3D.
Si vous désirez faire des mesures dans des conditions différentes, par exemple à une autre distance, vous pouvez utiliser la procédure de calibration pour normaliser les mesures à votre environnement. Si vous préservez ensuite les mêmes conditions de distance et de mesure, vous devriez pouvoir obtenir aussi des estimations aussi correctes que possible.
Fonction API Yoctopuce
Les librairies Yoctopuce intègrent deux nouvelles classes dédiées au Yocto-Spectral :
- ColorSensor : Cette classe permet de configurer le capteur et de récupérer les valeurs estimées des mesures spectrales.
- SpectralChannel : Cette classe permet d'accéder individuellement aux valeurs mesurées sur chacun des 13 canaux spectrométriques du capteur.
spectralChannelF1 = YSpectralChannel.FirstSpectralChannel();
// Active le mode automatique
colorSensor.set_workingMode(YColorSensor.WORKINGMODE_AUTO)
// Sélectionne le mode de mesure par réflexion
colorSensor.set_estimationModel(YColorSensor.ESTIMATIONMODEL_REFLECTION)
// Nom courant de la couleur vue
simpleColor = colorSensor.get_nearSimplecolor()
// Valeur RGB estimée
rgb = spectralSensor.get_estimatedRGB()
// Lecture de l'intensité du canal F1
f1 = spectralChannelF1.get_currentValue()
Ces nouvelles classes permettent donc non seulement de lire les estimations de couleurs effectuées par le module, mais aussi d'accéder directement aux données brutes du capteur pour implémenter vos propres analyses spécifiques.
Conclusion
Malgré leur prix très raisonnable, ces nouveaux modules offrent la possibilité d'effectuer une reconnaissance de couleur avec une qualité incomparable à ce que nous aurions pu faire avec les premiers capteurs que nous avions essayé il y a quelques années. Nous voilà heureux de ne pas nous être précipités pour faire un produit avec ces capteurs primitifs, et d'avoir attendu qu'un véritable capteur spectral soit disponible.