Différences entre versions de « Projets:Read For Me V3 »
Ligne 25 : | Ligne 25 : | ||
2. Fonctionnalités | 2. Fonctionnalités | ||
* Améliorer le séquencement | * Améliorer le séquencement | ||
− | * Améliorer l'OCR ( | + | * Améliorer l'OCR (multi-colonne) |
* Faire fonctionner le dispositif sur batterie | * Faire fonctionner le dispositif sur batterie | ||
* Rendre fonctionnel le bouton On/Off | * Rendre fonctionnel le bouton On/Off | ||
Ligne 44 : | Ligne 44 : | ||
Voir l'[[Projets:Read_For_Me#Analyse_de_l.27existant|analyse de l'existant de la V1]] | Voir l'[[Projets:Read_For_Me#Analyse_de_l.27existant|analyse de l'existant de la V1]] | ||
− | == | + | == Équipe (Porteur de projet et contributeurs) == |
[[File:RFM3_equipe.jpg|700px|Photo de l'équipe]] | [[File:RFM3_equipe.jpg|700px|Photo de l'équipe]] | ||
Ligne 82 : | Ligne 82 : | ||
| [https://www.kubii.fr/cameras-accessoires/1653-module-camera-v2-8mp-kubii-5060214370240.html kubii.fr] | | [https://www.kubii.fr/cameras-accessoires/1653-module-camera-v2-8mp-kubii-5060214370240.html kubii.fr] | ||
|- | |- | ||
− | | Nappe | + | | Nappe câble pour module caméra |
| 1€ | | 1€ | ||
| 1 | | 1 | ||
Ligne 134 : | Ligne 134 : | ||
* filament PLA pour impression 3d | * filament PLA pour impression 3d | ||
* tige filetée de 5mm avec 4 écrous et rondelles. | * tige filetée de 5mm avec 4 écrous et rondelles. | ||
− | * Stripboard pour fixer les boutons poussoir au | + | * Stripboard pour fixer les boutons poussoir au boîtier. |
− | * Quelques petites vis pour fixer le Raspi au | + | * Quelques petites vis pour fixer le Raspi au boîtier |
==Outils nécessaires== | ==Outils nécessaires== | ||
Ligne 173 : | Ligne 173 : | ||
− | * Découpe CP 3mm pour le | + | * Découpe CP 3mm pour le boîtier (fichier <code>RFM_proto1_decoupe_boitier.dxf|svg</code>) |
[[File:RFM3_proto1_decoupe.png|700px|Prototype 1 : fichier de découpe]] | [[File:RFM3_proto1_decoupe.png|700px|Prototype 1 : fichier de découpe]] | ||
* Impression bras support de caméra en deux parties | * Impression bras support de caméra en deux parties | ||
Ligne 182 : | Ligne 182 : | ||
− | * Découpe CP 3mm pour le | + | * Découpe CP 3mm pour le boîtier (fichier <code>RFM_proto2_decoupe_CP_3mm.svg</code>) |
[[File:RFM3_proto2_decoupe.png|700px|Prototype 2 : fichier de découpe]] | [[File:RFM3_proto2_decoupe.png|700px|Prototype 2 : fichier de découpe]] | ||
* Impression entretoises et support de caméra | * Impression entretoises et support de caméra | ||
Ligne 201 : | Ligne 201 : | ||
Au premier démarrage, il est nécessaire de : | Au premier démarrage, il est nécessaire de : | ||
- configurer l'utilisation de la caméra avec <code> raspi-config </code> ou via l'interface graphique (utilitaire <code> Configuration du raspberry pi</code> dans le menu système. | - configurer l'utilisation de la caméra avec <code> raspi-config </code> ou via l'interface graphique (utilitaire <code> Configuration du raspberry pi</code> dans le menu système. | ||
− | - activer le son sur la prise jack (au lieu du HDMI) avec <code>raspi-config</code> ou alors depuis le bureau : pour qu'il sorte sur la sortie analogique de la raspi, clic droit sur | + | - activer le son sur la prise jack (au lieu du HDMI) avec <code>raspi-config</code> ou alors depuis le bureau : pour qu'il sorte sur la sortie analogique de la raspi, clic droit sur icône speaker en haut à droite et choisir "Analog". |
'''Installation du logiciel''' | '''Installation du logiciel''' | ||
− | Les scripts utilisés sont | + | Les scripts utilisés sont téléchargeables sous forme d'archive .zip depuis github sur [https://github.com/myhumankit/PiTextReader/archive/master.zip la page du projet]. Il faut extraire le dossier dans le dossier utilisateur (<code>/home/pi</code>) et le renommer <code>PiTextReader</code> |
ou directement avec git : | ou directement avec git : | ||
Ligne 213 : | Ligne 213 : | ||
</pre> | </pre> | ||
− | Le | + | Le dépôt contient un script d'installation, qui s'occupe d'installer toutes les dépendances et de configurer le démarrage automatique du logiciel : |
<pre> | <pre> | ||
Ligne 224 : | Ligne 224 : | ||
'''1. Découpe et impression des pièces''' | '''1. Découpe et impression des pièces''' | ||
− | Voir les fichiers | + | Voir les fichiers sources plus haut. |
'''2. Assemblage du boîtier''' | '''2. Assemblage du boîtier''' | ||
Ligne 230 : | Ligne 230 : | ||
Pour ce prototype, les différents éléments sont fixés au pistolet à colle. | Pour ce prototype, les différents éléments sont fixés au pistolet à colle. | ||
− | [[File:RFM3_proto1_collage1.jpg|345px|Photo: collage du | + | [[File:RFM3_proto1_collage1.jpg|345px|Photo: collage du boîtier]][[File:RFM3_proto1_collage2.jpg|345px|Photo: collage du boîtier]] |
===Fabrication Prototype 2=== | ===Fabrication Prototype 2=== | ||
Ligne 244 : | Ligne 244 : | ||
Pour ce prototype, les différents éléments sont fixés à la superglue, et maintenus en place avec du ruban adhésif de peinture pendant la prise de la colle. | Pour ce prototype, les différents éléments sont fixés à la superglue, et maintenus en place avec du ruban adhésif de peinture pendant la prise de la colle. | ||
− | [[File:RFM3_proto2_collage.jpg|700px|Photo: Assemblage du | + | [[File:RFM3_proto2_collage.jpg|700px|Photo: Assemblage du boîtier du prototype 2]] |
− | === | + | ===Câblage=== |
− | Le | + | Le câblage est le même pour les deux prototypes mais les longueurs des câbles doivent être adaptés en fonction du placement des différents composant et des boutons. |
− | '''Schémas de | + | '''Schémas de câblage''' |
− | Le schéma suivant présente le principe du | + | Le schéma suivant présente le principe du câblage entre les différents composants et appareils. On notera en particulier : |
− | * La | + | * La connexion de la prise jack du boîtier (détaillé plus bas) |
− | * le condensateur polarisé au | + | * le condensateur polarisé au niveau de l'alimentation des leds qui permet d'éviter que les leds ne perturbent le circuit audio. |
* la prise USB connecté au power bank dont les câbles d'alimentation sont dédoublé pour alimenter le circuit d'amplification et les leds. | * la prise USB connecté au power bank dont les câbles d'alimentation sont dédoublé pour alimenter le circuit d'amplification et les leds. | ||
Ligne 263 : | Ligne 263 : | ||
− | Les broches GPIO utilisées sont | + | Les broches GPIO utilisées sont listées dans le tableau ci-dessous. À noter que les broches 3 (bouton On/Off) et 21 (commande led) ne peuvent pas être changées, car nous utilisons des fonctionnalités qui leurs sont spécifiques. |
− | Le bouton permettant de connaître le niveau de la batterie a été installé mais n'est pas fonctionnel car il nécessite des développements électroniques et logiciels | + | Le bouton permettant de connaître le niveau de la batterie a été installé mais n'est pas fonctionnel car il nécessite des développements électroniques et logiciels supplémentaires. |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Ligne 312 : | Ligne 312 : | ||
'''Circuit audio''' | '''Circuit audio''' | ||
− | Avec l'utilisation d'un module d'amplification "tout fait", le câblage du circuit audio peut se faire en suivant la documentation du module en question. La seule particularité intervient dans la | + | Avec l'utilisation d'un module d'amplification "tout fait", le câblage du circuit audio peut se faire en suivant la documentation du module en question. La seule particularité intervient dans la connexion du jack 3.5mm (détaillé dans le schéma de principe plus haut). |
Il s'agit d'utiliser une prise jack avec un contact supplémentaire qui est connecté avec la broche de contact de l'extrémité du jack lorque celui-ci n'est pas inséré. (voir [https://wikilab.myhumankit.org/index.php?title=Projets:Read_For_Me_V3#Haut_parleur_et_prise_jack_3.5mm Haur parleur et prise jack]) | Il s'agit d'utiliser une prise jack avec un contact supplémentaire qui est connecté avec la broche de contact de l'extrémité du jack lorque celui-ci n'est pas inséré. (voir [https://wikilab.myhumankit.org/index.php?title=Projets:Read_For_Me_V3#Haut_parleur_et_prise_jack_3.5mm Haur parleur et prise jack]) | ||
Ligne 326 : | Ligne 326 : | ||
'''Câblage des boutons''' | '''Câblage des boutons''' | ||
− | Les boutons sont reliés au port GPIO via plusieurs | + | Les boutons sont reliés au port GPIO via plusieurs rangées de broches femelles et des câbles à plusieurs conducteurs. |
[[File:RFM3_cablage_boutons.jpg|700px|]] | [[File:RFM3_cablage_boutons.jpg|700px|]] | ||
Ligne 337 : | Ligne 337 : | ||
===Design=== | ===Design=== | ||
− | Au regard du retour d'expérience sur les deux prototypes précédent au format "table", on décide d'abandonner l'idée et de revenir sur un | + | Au regard du retour d'expérience sur les deux prototypes précédent au format "table", on décide d'abandonner l'idée et de revenir sur un boîtier directement posé sur la table. |
− | Problème : nous ne disposons pas d'une nappe | + | Problème : nous ne disposons pas d'une nappe suffisamment longue pour la déporter par dessus la feuille. |
Il est donc décidé de partir sur deux prototype : | Il est donc décidé de partir sur deux prototype : | ||
Ligne 407 : | Ligne 407 : | ||
Des leds avaient été ajoutée à la V1 puis retirées pour la V2. Elles semblent néanmoins indispensable si la lumière ambiante est insuffisante ou pour éviter les ombres projetées si elle est trop importante. | Des leds avaient été ajoutée à la V1 puis retirées pour la V2. Elles semblent néanmoins indispensable si la lumière ambiante est insuffisante ou pour éviter les ombres projetées si elle est trop importante. | ||
− | Pour le Fabrikarium, nous disposons de ruban de leds RVB | + | Pour le Fabrikarium, nous disposons de ruban de leds RVB adressables. L'utilisation de leds adressables complexifie un peu la partie logicielle mais simplifie le circuit puisqu'elle ne nécessite pas de circuit supplémentaire pour gérer la luminosité. |
Nous nous appuyons sur la documentation de NeoPixels sur Raspberry Pi par [https://learn.adafruit.com/neopixels-on-raspberry-pi/python-usage Adafruit]. | Nous nous appuyons sur la documentation de NeoPixels sur Raspberry Pi par [https://learn.adafruit.com/neopixels-on-raspberry-pi/python-usage Adafruit]. | ||
Ligne 422 : | Ligne 422 : | ||
Pour cette version 3 nous souhaitons donner le choix à l'utilisateur. | Pour cette version 3 nous souhaitons donner le choix à l'utilisateur. | ||
− | Il y a donc un haut parleur interne, qui est désactivé lorsqu'un | + | Il y a donc un haut parleur interne, qui est désactivé lorsqu'un câble est connecté sur la prise jack du boîtier. |
[[File:RFM3_jack.png|700px|Schéma: connection jack avec contact normalement fermé]] | [[File:RFM3_jack.png|700px|Schéma: connection jack avec contact normalement fermé]] | ||
Ligne 431 : | Ligne 431 : | ||
<span style="color:#FFFFFF; background:#CC0000; padding:5px">Triste échec</span> | <span style="color:#FFFFFF; background:#CC0000; padding:5px">Triste échec</span> | ||
− | Malgré un courage, une abnégation et une dextérité hors | + | Malgré un courage, une abnégation et une dextérité hors normes, Jean-Jacques n'est pas parvenu à réaliser une rallonge fonctionnelle pour la nappe du capteur. |
[[File:RFM3_nappe1.jpg|345px|Photo: Récupération d'un connecteur de nappe sur un Raspi]][[File:RFM3_nappe2.jpg|345px|Photo: Connexion de la rallonge]] | [[File:RFM3_nappe1.jpg|345px|Photo: Récupération d'un connecteur de nappe sur un Raspi]][[File:RFM3_nappe2.jpg|345px|Photo: Connexion de la rallonge]] | ||
Ligne 452 : | Ligne 452 : | ||
mplayer -slave -idle | mplayer -slave -idle | ||
− | En python, on utiliser la | + | En python, on utiliser la méthode <code>popen</code> pour lancer un nouveau processus, puis on peut ensuite écrire des commandes dans l'entrée standard du processus : |
lancer mplayer en tâche de fond : | lancer mplayer en tâche de fond : | ||
Ligne 472 : | Ligne 472 : | ||
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | <span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | ||
− | En ajoutant une ligne dans le fichier de configuration du Raspi, il est possible de configurer la broche GPIO3 comme bouton On/Off d'un ordinateur. Cela pose cependant un | + | En ajoutant une ligne dans le fichier de configuration du Raspi, il est possible de configurer la broche GPIO3 comme bouton On/Off d'un ordinateur. Cela pose cependant un problème : si l'extinction est gérée directement par le Raspi, on ne peut pas prévenir les fausses manipulations, ni même prévenir l'utilisateur que le Raspi est effectivement éteint. |
L'astuce est donc de conserver la même broche que celle qui permet d'allumer le Raspi (<code>GPIO3</code>) pour appeler une fonction dans <code>PiTextReader</code>. Au premier appui, on peut donc demander à l'utilisateur d'appuyer une seconde fois pour confirmer l'extinction. | L'astuce est donc de conserver la même broche que celle qui permet d'allumer le Raspi (<code>GPIO3</code>) pour appeler une fonction dans <code>PiTextReader</code>. Au premier appui, on peut donc demander à l'utilisateur d'appuyer une seconde fois pour confirmer l'extinction. | ||
Ligne 479 : | Ligne 479 : | ||
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | <span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | ||
− | Après avoir utilisé espeack pour les précédentes versions, nous | + | Après avoir utilisé <code>espeack</code> pour les précédentes versions, nous utilisons maintenant [https://github.com/naggety/picotts PicoTTS], dont la qualité de synthèse est bien meilleure. |
Pour transformer un fichier texte <code>text.txt</code> en fichier audio <code>text.wav</code>, on execute la commande suivante : | Pour transformer un fichier texte <code>text.txt</code> en fichier audio <code>text.wav</code>, on execute la commande suivante : | ||
Ligne 491 : | Ligne 491 : | ||
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | <span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span> | ||
− | Le script python principale est <code>pitextreader.py</code>. Afin de faciliter les futurs développements et | + | Le script python principale est <code>pitextreader.py</code>. Afin de faciliter les futurs développements et débogage, il est décidé de le rendre plus modulaire. |
=====Séparation en plusieurs fichiers===== | =====Séparation en plusieurs fichiers===== | ||
Ligne 533 : | Ligne 533 : | ||
|} | |} | ||
− | Le | + | Le Raspberry Pi 4 permet donc de diviser le temps par 2 vis à vis du Raspberry Pi 3. |
En comparant également les images bien cadrées et éclairées d'un scanner et celles issues de nos tests Fabrikarium "moins parfaites", le temps d’exécution est plus élevée de 8 à 20% suivant les cas. | En comparant également les images bien cadrées et éclairées d'un scanner et celles issues de nos tests Fabrikarium "moins parfaites", le temps d’exécution est plus élevée de 8 à 20% suivant les cas. | ||
Ligne 543 : | Ligne 543 : | ||
Cette cuvée 2021 a permis d'avancer significativement sur les points suivants : | Cette cuvée 2021 a permis d'avancer significativement sur les points suivants : | ||
* nouveaux designs plus stables et plus compacts en abandonnant le format table des deux précédentes versions, | * nouveaux designs plus stables et plus compacts en abandonnant le format table des deux précédentes versions, | ||
− | * amélioration des performances de prise de vue, de lecture et amélioration de la qualité de la synthèse vocale avec l'utilisation de picoTTS, | + | * amélioration des performances de prise de vue, de lecture et amélioration de la qualité de la synthèse vocale avec l'utilisation de <code>picoTTS</code>, |
* ajout ou finalisation de fonctionnalité qui étaient attendues : | * ajout ou finalisation de fonctionnalité qui étaient attendues : | ||
** contrôle fin de la lecture avec <code>mplayer</code>, | ** contrôle fin de la lecture avec <code>mplayer</code>, | ||
** fonctionnement du bouton On/Off, | ** fonctionnement du bouton On/Off, | ||
− | ** contrôle de l'éclairage avec des leds | + | ** contrôle de l'éclairage avec des leds adressables, |
** circuit audio qui permet d'avoir un haut parleur intégré et une prise casque. | ** circuit audio qui permet d'avoir un haut parleur intégré et une prise casque. | ||
Ligne 554 : | Ligne 554 : | ||
'''Prototype 1''' | '''Prototype 1''' | ||
− | Le prototype 1 a été monté et presque entièrement câblé, mais nous ne disposions pas d'une nappe | + | Le prototype 1 a été monté et presque entièrement câblé, mais nous ne disposions pas d'une nappe suffisamment longue pour le tester effectivement. Pour le finaliser, il reste à : |
− | * soigner l'intégration des composants dans le boîtier et finaliser le | + | * soigner l'intégration des composants dans le boîtier et finaliser le câblage, |
− | * fixe la caméra au bras mobile en la connectant avec une nappe | + | * fixe la caméra au bras mobile en la connectant avec une nappe suffisamment longue. |
* fixer les leds au bras mobile. | * fixer les leds au bras mobile. | ||
'''Prototype 2''' | '''Prototype 2''' | ||
− | Le prototype 2 a été assemblé entièrement et nous avons pu tester son ergonomie pour le déploiement, mais les | + | Le prototype 2 a été assemblé entièrement et nous avons pu tester son ergonomie pour le déploiement, mais les composants n'ont pas pu être intégrés. |
===Pistes d'amélioration=== | ===Pistes d'amélioration=== | ||
Ligne 575 : | Ligne 575 : | ||
* L'ouverture dans le boîtier est un peu trop courte une fois que la caméra est monté. Il semble que cela nécessite de rallonger également légèrement le boîtier. | * L'ouverture dans le boîtier est un peu trop courte une fois que la caméra est monté. Il semble que cela nécessite de rallonger également légèrement le boîtier. | ||
− | Enfin, un dernier problème soulevé plus tard est l'orientation du capteur de la caméra par rapport à la page. En effet, avec la nappe dans l'alignement du bras, le capteur se retrouve tourné de 90° par rapport à l' | + | Enfin, un dernier problème soulevé plus tard est l'orientation du capteur de la caméra par rapport à la page. En effet, avec la nappe dans l'alignement du bras, le capteur se retrouve tourné de 90° par rapport à l'orientation de la page. Il faut donc revoir la position de la page par rapport au bras (et donc le repère qui permet de la placer). |
==Ressources== | ==Ressources== | ||
Ligne 616 : | Ligne 616 : | ||
* Version penchée | * Version penchée | ||
− | * Version avec le | + | * Version avec le boîtier posé sur la table |
==== OCR ==== | ==== OCR ==== |
Version du 15 novembre 2021 à 15:46
Description du projet
Le but est de créer une machine à lire capable d’acquérir le texte à partir d'une capture d'image et de le lire au moyen d’une synthèse vocale.
Historique du projet
- Le projet est basé sur PiTextReader
- Il a été initié lors du Fabrikarium 2020 : Read_For_Me (V1)
- Puis développé lors de l'événement "Focus Vision" : Read_For_Me_V2
Version actuelle
Le code est disponible sur github.
Objectif du Fabrikarium
1. Design
- Revoir le design pour augmenter la stabilité
2. Fonctionnalités
- Améliorer le séquencement
- Améliorer l'OCR (multi-colonne)
- Faire fonctionner le dispositif sur batterie
- Rendre fonctionnel le bouton On/Off
- Ajouter un haut parleur
3. Performance
- Améliorer les performances
Autres pistes et questions :
- Détection automatique de l'orientation du texte (portrait/paysage)
Cahier des charges
Voir le cahier des charges de la V1
Analyse de l'existant
Voir l'analyse de l'existant de la V1
Équipe (Porteur de projet et contributeurs)
- Porteurs du projet : François, Laurence
- Concepteurs/contributeurs : Jean-Jacques, Audrey, Roger, Marie, Déborah, Quentin, Florian, Rémi
- Fabmanager référent :
- Responsable de documentation : Laurent
Matériel nécessaire et coût
Référence | coût unitaire | nombre | coût | liens |
---|---|---|---|---|
Raspberry pi 3 ou 4, modèle B | 40/60€ | 1 | 40/60€ | kubii.fr |
Carte microSD 16Go | 10€ | 1 | 10€ | |
Module caméra Raspberry pi | 27,90€ | 1 | 27,90€ | kubii.fr |
Nappe câble pour module caméra | 1€ | 1 | 1€ | kubii.fr |
Ampli audio mono | 14,90€ | 1 | 14,90€ | lextronic/adafruit gotronic doc |
Haut parleur 80mm 5W 4ohms | 10,00€ | 1 | 10,00€ | |
Batterie portable USB 2 ports | 20€ | 1 | 20€ | |
Boutons poussoirs | 0.5€ | 11 | 5.5€ | |
Ruban led (15/20 cm) | 5€ | 1 | 5€ | |
Prise jack 3.5mm stéréo | 1€ | 1 | 1€ | |
Mini câble USB-A/USB-C | 2€ | 1 | 2€ |
- CP peuplier 3mm
- filament PLA pour impression 3d
- tige filetée de 5mm avec 4 écrous et rondelles.
- Stripboard pour fixer les boutons poussoir au boîtier.
- Quelques petites vis pour fixer le Raspi au boîtier
Outils nécessaires
- Imprimante 3d
- Découpeuse laser
- Fer à souder
Coût
Délai estimé
Fichiers source
Sources + fichiers machine
- Boutons (sources Solidworks, .step et .stl) Les boutons en reliefs (identiques pour les deux prototypes)
- Logo (sources Solidworks, .step et .stl) Un logo RFM en lettre ou en braille pour poser sur le boîtier.
Remarque
Trois logiciels propriétaires ont été utilisés pour les deux prototypes.
Catia
pour le prototype 1Sketchup
pour le prototype 2Solidworks
pour les boutons
Les fichiers de sortie fournis ici sont exploitables sans accès à ces logiciels (dxf/svg pour les découpes et stl pour les impressions) mais c'est plus compliqué avec les fichier sources natifs de chaque logiciel.
Catia et solidworks peuvent produire des step, qui ne sont pas maillés contrairement au stl, mais qui ne permettent pas d'accéder aux "primitives" de modélisation.
Prototype 1
- Découpe CP 3mm pour le boîtier (fichier
RFM_proto1_decoupe_boitier.dxf|svg
)
- Impression bras support de caméra en deux parties
Prototype 2
- Découpe CP 3mm pour le boîtier (fichier
RFM_proto2_decoupe_CP_3mm.svg
)
- Impression entretoises et support de caméra
Etapes de fabrication pas à pas
Installation et configuration du Raspberry Pi
Création du système sur la carte sd
Nos développements sont fait sur une version récente de Raspberry Pi OS avec environnement de bureau (2021-05-07). Son installation est déjà largement documentée par ailleurs (par exemple sur ce wiki : Ressources:Raspberry_pi)
Configuration du Raspberry Pi
Au premier démarrage, il est nécessaire de :
- configurer l'utilisation de la caméra avec raspi-config
ou via l'interface graphique (utilitaire Configuration du raspberry pi
dans le menu système.
- activer le son sur la prise jack (au lieu du HDMI) avec raspi-config
ou alors depuis le bureau : pour qu'il sorte sur la sortie analogique de la raspi, clic droit sur icône speaker en haut à droite et choisir "Analog".
Installation du logiciel
Les scripts utilisés sont téléchargeables sous forme d'archive .zip depuis github sur la page du projet. Il faut extraire le dossier dans le dossier utilisateur (/home/pi
) et le renommer PiTextReader
ou directement avec git :
git clone https://github.com/myhumankit/PiTextReader.git
Le dépôt contient un script d'installation, qui s'occupe d'installer toutes les dépendances et de configurer le démarrage automatique du logiciel :
cd PiTextReader sudo sh install.sh
Fabrication Prototype 1
1. Découpe et impression des pièces
Voir les fichiers sources plus haut.
2. Assemblage du boîtier
Pour ce prototype, les différents éléments sont fixés au pistolet à colle.
Fabrication Prototype 2
1. Découpe et impression des pièces
Voir les fichiers sources plus haut.
2. Assemblage du boîtier
Pour ce prototype, les différents éléments sont fixés à la superglue, et maintenus en place avec du ruban adhésif de peinture pendant la prise de la colle.
Câblage
Le câblage est le même pour les deux prototypes mais les longueurs des câbles doivent être adaptés en fonction du placement des différents composant et des boutons.
Schémas de câblage
Le schéma suivant présente le principe du câblage entre les différents composants et appareils. On notera en particulier :
- La connexion de la prise jack du boîtier (détaillé plus bas)
- le condensateur polarisé au niveau de l'alimentation des leds qui permet d'éviter que les leds ne perturbent le circuit audio.
- la prise USB connecté au power bank dont les câbles d'alimentation sont dédoublé pour alimenter le circuit d'amplification et les leds.
Les broches GPIO utilisées sont listées dans le tableau ci-dessous. À noter que les broches 3 (bouton On/Off) et 21 (commande led) ne peuvent pas être changées, car nous utilisons des fonctionnalités qui leurs sont spécifiques.
Le bouton permettant de connaître le niveau de la batterie a été installé mais n'est pas fonctionnel car il nécessite des développements électroniques et logiciels supplémentaires.
Broche | Bouton/fonction |
---|---|
3 (fixe) | On/Off |
5 | Annuler |
6 | Capture |
13 | Volume + |
19 | Volume - |
26 | Vitesse de lecture + |
23 | Vitesse de lecture - |
21 (fixe) | Commande led |
20 | Play/pause |
16 | Avancer |
12 | Reculer |
7 | Niveau batterie (non implémenté) |
Circuit audio
Avec l'utilisation d'un module d'amplification "tout fait", le câblage du circuit audio peut se faire en suivant la documentation du module en question. La seule particularité intervient dans la connexion du jack 3.5mm (détaillé dans le schéma de principe plus haut).
Il s'agit d'utiliser une prise jack avec un contact supplémentaire qui est connecté avec la broche de contact de l'extrémité du jack lorque celui-ci n'est pas inséré. (voir Haur parleur et prise jack)
Durant le Fabrikarium, nous ne disposisions pas d'un circuit d'amplification. Il a donc été réalisé sur strip board à partir d'une puce LM386, suivant le schéma suivant.
Câblage des boutons
Les boutons sont reliés au port GPIO via plusieurs rangées de broches femelles et des câbles à plusieurs conducteurs.
Durée de fabrication du prototype final
Développement du Fabrikarium 2021
Design
Au regard du retour d'expérience sur les deux prototypes précédent au format "table", on décide d'abandonner l'idée et de revenir sur un boîtier directement posé sur la table.
Problème : nous ne disposons pas d'une nappe suffisamment longue pour la déporter par dessus la feuille.
Il est donc décidé de partir sur deux prototype :
- Prototype 1 - à plat: boîtier posé sur la table avec un bras articulé pour déporter la caméra au dessus de la feuille
- Prototype 2 - chevalet : boîtier posé sur un côté et sur deux pieds rétractables avec la caméra proche du Raspberry Pi mais qui permet néanmoins plus de stabilité.
Prototype 1
Prototype 2
Hardware
Changement de capteur
Testé et fonctionnel
Il y a des problème de qualité optique avec le capteur actuel pour laquelle une partie de la page est floue. On essaie donc une nouvelle raspicam version 2.1 avec 8 megapixels au lieu de 5, et les résultats semblent effectivement bien meilleurs.
Calcul théorique de la distance de prise de vue
D'après ce tutoriel, on peut calculer la distance de la caméra à la page (D) en fonction de la taille du capteur (y), de la distance focale (f) et de la taille de la page (Y) :
D = (f * Y) / y
Le capteur fait 1/4" soit 3,6 x 2,7 mm, avec une focale de 3,04 mm
direction | distance focale | taille du capteur | taille de la page | distance obtenue |
---|---|---|---|---|
Largeur | 3,04 | 2,7 | 240 | 236 |
Hauteur | 3,04 | 3,6 | 297 | 253 |
Hauteur + marge (15mm) | 3,04 | 3,6 | 330 | 280.5 |
On obtient une hauteur théorique du capteur de 28cm.
Éclairage leds
Testé et fonctionnel
Des leds avaient été ajoutée à la V1 puis retirées pour la V2. Elles semblent néanmoins indispensable si la lumière ambiante est insuffisante ou pour éviter les ombres projetées si elle est trop importante.
Pour le Fabrikarium, nous disposons de ruban de leds RVB adressables. L'utilisation de leds adressables complexifie un peu la partie logicielle mais simplifie le circuit puisqu'elle ne nécessite pas de circuit supplémentaire pour gérer la luminosité.
Nous nous appuyons sur la documentation de NeoPixels sur Raspberry Pi par Adafruit.
Après une série d'essais, il semble que seul la broche GPIO21
permet de faire fonctionner le ruban.
Haut parleur et prise jack 3.5mm
Testé et fonctionnel
La version 1 avait un haut parleur intégré.
La version 2 un haut parleur amplifié externe relié directement au Raspi par un jack stéréo 3,5mm ce qui rends la conception électronique beaucoup plus simple.
Pour cette version 3 nous souhaitons donner le choix à l'utilisateur.
Il y a donc un haut parleur interne, qui est désactivé lorsqu'un câble est connecté sur la prise jack du boîtier.
Documentation pour faire un by pass avec un jack
Fabrication d'une rallonge pour la nappe/câble du capteur
Triste échec
Malgré un courage, une abnégation et une dextérité hors normes, Jean-Jacques n'est pas parvenu à réaliser une rallonge fonctionnelle pour la nappe du capteur.
Gestion de la batterie
Non fonctionnel
Nous n'avons pas beaucoup avancé sur une des fonctionnalités attendues qui est la portabilité et la gestion de la charge de la batterie.
En effet, l'utilisation d'une batterie de type "Power Bank" ne permet pas de récupérer le taux de charge de la batterie. Il faudrait pour cela avoir la main sur le convertisseur DC/DC qui régule la tension de sortie.
Software
Contrôle de la lecture avec mplayer
Testé et fonctionnel
En amont du Fabrikarkium, la partie logiciel de lecture audio a été redéveloppée en utilisant mplayer
plutôt que aplay
. En effet, mplayer
peut être executé en tâche de fond, dans un processus à part, tout en restant contrôlable via son flux standard d'entrée stdin
.
On peut lancer mplayer
en tâche de fond avec la commande suivante :
mplayer -slave -idle
En python, on utiliser la méthode popen
pour lancer un nouveau processus, puis on peut ensuite écrire des commandes dans l'entrée standard du processus :
lancer mplayer en tâche de fond :
mplayer = os.p0pen() # c'est bien popen et non p0pen mais mediawiki ne me laisse pas l'écrire :(
charger un fichier audio "file.wav"
mplayer.write("load file.wav\n")
avancer de 10 secondes
mplayer.write("seek +10\n") mplayer.flush()
Ceci est réalisé dans PiTextReader
par la classe Player
définie dans le fichier player.py
.
Bouton On/Off
Testé et fonctionnel
En ajoutant une ligne dans le fichier de configuration du Raspi, il est possible de configurer la broche GPIO3 comme bouton On/Off d'un ordinateur. Cela pose cependant un problème : si l'extinction est gérée directement par le Raspi, on ne peut pas prévenir les fausses manipulations, ni même prévenir l'utilisateur que le Raspi est effectivement éteint.
L'astuce est donc de conserver la même broche que celle qui permet d'allumer le Raspi (GPIO3
) pour appeler une fonction dans PiTextReader
. Au premier appui, on peut donc demander à l'utilisateur d'appuyer une seconde fois pour confirmer l'extinction.
Pico TTs
Testé et fonctionnel
Après avoir utilisé espeack
pour les précédentes versions, nous utilisons maintenant PicoTTS, dont la qualité de synthèse est bien meilleure.
Pour transformer un fichier texte text.txt
en fichier audio text.wav
, on execute la commande suivante :
/usr/bin/pico2wave -l fr-FR -w /tmp/text.wav < /tmp/text.txt
La commande python pour réaliser cette opération est définie dans le fichier reader.py
Nettoyage du script
Testé et fonctionnel
Le script python principale est pitextreader.py
. Afin de faciliter les futurs développements et débogage, il est décidé de le rendre plus modulaire.
Séparation en plusieurs fichiers
pitextreader.py
est toujours le script principal, mais il ne contient plus qu'une fonction qui fait le lien entre l'application et les boutons du raspberry pi.app.py
contient le coeur du logiciel, c'est-à-dire l'objetsettings
qui gère les paramètres de lecture et d'enregistrement, et l'association entre les broches du raspberry pi et les fonctions de callbackconstantes.py
contient toute la configuration :- numéro des broches du GPIO
- liens vers les dossiers et fichiers (sons et fichier de sauvegarde de la configuration)
- toutes les commandes bash au format texte comme par exemple les commandes pour faire déclencher la prise de vue ou l'OCR.
logger.py
contient les outils de logs qui permettent d'écrire la sortie standard en même temps dans un fichier et dans la consolereader.py
contient les fonctions de prise de vue et de traitement des données jusqu'à l'obtention d'un fichier audio.player.py
contient un objet permettant le lire les fichiers audio et de modifier les paramètres de lecture en direct viamplayer
Comparaison des performances entre les Raspberry Pi 3 et 4
Testé et fonctionnel
Des tests ont été menés pour savoir quels étaient les gains de temps de traitement en passant d'un Raspberry Pi 3 à un Raspberry Pi 4. Les résultats les plus significatifs sont donnés dans le tableau suivant.
Document | Pi 3 | Pi 4 | PC |
---|---|---|---|
Lettre simple | 10s | 5s | 1s |
Article une colonne | 20s | 10s | 2s |
Article multi-colonne | 30s | 15s | 3s |
Le Raspberry Pi 4 permet donc de diviser le temps par 2 vis à vis du Raspberry Pi 3.
En comparant également les images bien cadrées et éclairées d'un scanner et celles issues de nos tests Fabrikarium "moins parfaites", le temps d’exécution est plus élevée de 8 à 20% suivant les cas.
Les résultats complets sont compilés dans le fichiers scripts/README.md
dans le dépôt du projet.
Conclusion du Fabrikarium
Cette cuvée 2021 a permis d'avancer significativement sur les points suivants :
- nouveaux designs plus stables et plus compacts en abandonnant le format table des deux précédentes versions,
- amélioration des performances de prise de vue, de lecture et amélioration de la qualité de la synthèse vocale avec l'utilisation de
picoTTS
, - ajout ou finalisation de fonctionnalité qui étaient attendues :
- contrôle fin de la lecture avec
mplayer
, - fonctionnement du bouton On/Off,
- contrôle de l'éclairage avec des leds adressables,
- circuit audio qui permet d'avoir un haut parleur intégré et une prise casque.
- contrôle fin de la lecture avec
Cependant, du fait des difficultés techniques rencontrées, aucun des deux prototypes n'était complètement fonctionnel. Les nouvelles fonctionnalités ont pu néanmoins être testées et démontrées avec le prototype de la version 2 ainsi qu'un banc de test temporaire.
Prototype 1
Le prototype 1 a été monté et presque entièrement câblé, mais nous ne disposions pas d'une nappe suffisamment longue pour le tester effectivement. Pour le finaliser, il reste à :
- soigner l'intégration des composants dans le boîtier et finaliser le câblage,
- fixe la caméra au bras mobile en la connectant avec une nappe suffisamment longue.
- fixer les leds au bras mobile.
Prototype 2
Le prototype 2 a été assemblé entièrement et nous avons pu tester son ergonomie pour le déploiement, mais les composants n'ont pas pu être intégrés.
Pistes d'amélioration
Design du prototype 1
Pour le prototype 1, nous avons déjà pu observer certaines limites :
- Il manque un moyen de sortir le bras de la caméra du boîtier. Une vis a été ajoutée sur le bras en attendant de revoir sa conception.
- Le support de la caméra peut être amélioré.
- L'intégration des composants peut être amélioré, notamment l'accès aux prises du raspberry pi et de la batterie
- Il manque l'intégration des leds dans le bras support.
- L'ouverture dans le boîtier est un peu trop courte une fois que la caméra est monté. Il semble que cela nécessite de rallonger également légèrement le boîtier.
Enfin, un dernier problème soulevé plus tard est l'orientation du capteur de la caméra par rapport à la page. En effet, avec la nappe dans l'alignement du bras, le capteur se retrouve tourné de 90° par rapport à l'orientation de la page. Il faut donc revoir la position de la page par rapport au bras (et donc le repère qui permet de la placer).
Ressources
- Comparaison de logiciels Text-to-Speech
Journal de bord
Mardi matin
Présentation du projet et tour de table
Définition des enjeux
- Design
- Ergonomie
- Marquage
- Optique
- Choix de l'optique
- éclairage
- Logiciel
- Séquencement
- Power On/Off
- OCR
- Gestion du format portrait / paysage
Répartition en 2 équipes et demi
- Équipe Design : Laurence, Dorian, Quentin, Audrey, Rémi
- Equipe optique : Deborah, Roger, Marie
- test de différentes optique et mise au point
- Équipe logiciel : Jean Jacques
- Remise en route du prototype V2
Mardi après-midi
Design : développement de deux versions
- Version penchée
- Version avec le boîtier posé sur la table
OCR
- Test de tesseract avec le nouveau capteur et raspberry pi 4.
- Mise en place d'une procédure de test avec 4 images
Leds
Ajout et contrôle de ruban led rgb
Bouton on/off
Allumer / éteindre le raspberry à partir du GPIO
Mercredi
Design
- (Re)design des boutons
- Dessin des deux versions
Code
- Refactoring PiTextReader
- Démarrage automatique
Électronique
- Haut-parleur et amplification
- Fabrication d'une longue nappe pour la caméra
Documentation
- Mise à jour du script d'installation
- Mise à jour de la page V1