Différences entre versions de « Projets:Read For Me V3 »

De wikilab
 
(37 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
{{Infobox projet
 +
|Image principale=RFM3 proto1 top.jpg
 +
|Description=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.
 +
|Porteur de projet=Francois LB
 +
|Contributeurs=LaurentM, Audrey, Roger, Marie, Déborah, Quentin, Florian, Rémi, Gigi35
 +
|Fabmanager=Delphine
 +
|Référent documentation=Delphine, Gigi35, LaurentM
 +
|Catégorie de handicap=Malvoyance
 +
|Etat d'avancement=En cours
 +
|Statut de la documentation=Partielle
 +
|Relecture de la documentation=Non vérifiée
 +
|Licence=by-sa
 +
|Projet date=2021-10-19
 +
|Nom humanlab=Humanlab_MHK
 +
}}
 
== Description du projet ==
 
== Description du projet ==
  
Ligne 25 : Ligne 40 :
 
2. Fonctionnalités  
 
2. Fonctionnalités  
 
* Améliorer le séquencement
 
* Améliorer le séquencement
* Améliorer l'OCR (multicolomne)
+
* Améliorer l'OCR (multi-colonne)
 +
* Faire fonctionner le dispositif sur batterie
 
* Rendre fonctionnel le bouton On/Off
 
* Rendre fonctionnel le bouton On/Off
 
* Ajouter un haut parleur
 
* Ajouter un haut parleur
Ligne 43 : Ligne 59 :
 
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]]
  
== Equipe (Porteur de projet et contributeurs) ==
+
== É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 54 : Ligne 70 :
 
== Matériel nécessaire et coût==
 
== Matériel nécessaire et coût==
  
* 1 Raspberry pi 4 ou 3 modèle B
 
* 1 caméra pour Raspberry Pi
 
* 1 batterie 5V USB avec deux sorties USB
 
* du ruban LED RVB addressable
 
* 1 enceinte
 
* 1 circuit d'amplification
 
* CP peuplier
 
* filament PLA pour impression 3d
 
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Ligne 71 : Ligne 79 :
 
!scope="col"| liens
 
!scope="col"| liens
 
|-
 
|-
| Raspberry pi 4
+
| Raspberry pi 3 ou 4, modèle B
| 60€
+
| 40/60€
 
| 1
 
| 1
| 60€
+
| 40/60€
 
| [https://www.kubii.fr/cartes-raspberry-pi/2771-nouveau-raspberry-pi-4-modele-b-2gb-0765756931175.html kubii.fr]
 
| [https://www.kubii.fr/cartes-raspberry-pi/2771-nouveau-raspberry-pi-4-modele-b-2gb-0765756931175.html kubii.fr]
 
|-
 
|-
Ligne 89 : Ligne 97 :
 
| [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 Cable pour module caméra
+
| Nappe câble pour module caméra
 
| 1€
 
| 1€
 
| 1
 
| 1
Ligne 99 : Ligne 107 :
 
| 1
 
| 1
 
| 14,90€
 
| 14,90€
| [https://www.gotronic.fr/art-module-ampli-audio-gravity-dfr0064-19310.htm gotronic] [https://wiki.dfrobot.com/386AMP_audio_amplifier_Module__SKU__DFR0064_ doc]
+
| [https://www.lextronic.fr/amplificateur-audio-mono-2-5-w-23485.html lextronic/adafruit] [https://www.gotronic.fr/art-module-ampli-audio-gravity-dfr0064-19310.htm gotronic] [https://wiki.dfrobot.com/386AMP_audio_amplifier_Module__SKU__DFR0064_ doc]
 
|-
 
|-
 
| Haut parleur 80mm 5W 4ohms
 
| Haut parleur 80mm 5W 4ohms
Ligne 119 : Ligne 127 :
 
|
 
|
 
|-
 
|-
| Ruban led 2 x 8cm
+
| Ruban led (15/20 cm)
 
| 5€
 
| 5€
 
| 1
 
| 1
Ligne 138 : Ligne 146 :
 
|}
 
|}
  
* Stripboard pour fixer les boutons poussoir au boitier.
+
* CP peuplier 3mm
* Quelques petites vis pour fixer le Raspi au boitier
+
* 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==
 
==Outils nécessaires==
Ligne 155 : Ligne 166 :
 
===Sources + fichiers machine===
 
===Sources + fichiers machine===
  
* '''[[Media:RFM3_boutons.zip|Boutons (sources Solidworks, .step et .stl)]]'''
+
* '''[[Media:RFM3_proto1.zip|Prototype 1 (sources Catia, fichier de découpe .dxf/.svg et fichier d'impression .stl)]]'''
  
* '''[[Media:RFM3_logo.zip|Logo (sources Solidworks, .step et .stl)]]'''
+
* '''[[Media:RFM3_proto2.zip|Prototype 2 (sources Solidworks, .step, fichier de découpe .dxf/.svg et fichier d'impression .stl)]]'''
  
 +
* '''[[Media:RFM3_boutons.zip|Boutons (sources Solidworks, .step et .stl)]]''' Les boutons en reliefs (identiques pour les deux prototypes)
  
 +
* '''[[Media:RFM3_logo.zip|Logo (sources Solidworks, .step et .stl)]]''' Un logo RFM en lettre ou en braille pour poser sur le boîtier.
  
 
===Remarque===
 
===Remarque===
Ligne 168 : Ligne 181 :
 
* <code>Solidworks</code> pour les boutons
 
* <code>Solidworks</code> pour les boutons
  
Les fichiers de sortie sont exploitables sans accès à ces logiciels (dxf pour les découpes et stl pour les impressions) mais c'est plus compliqué avec les fichier sources natifs de chaque logiciel.
+
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.
 
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.
Ligne 174 : Ligne 187 :
 
===Prototype 1===
 
===Prototype 1===
  
* '''[[Media:RFM3_proto1.zip|Prototype 1 (sources Catia, fichier de découpe .dxf/.svg et fichier d'impression .stl)]]'''
 
  
* Découpe CP 3mm pour le boitier (fichier <code>RFM_proto1_decoupe_boitier.dxf|svg</code>)
+
* 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 184 : Ligne 196 :
 
===Prototype 2===
 
===Prototype 2===
  
* '''[[Media:RFM3_proto2.zip|Prototype 2 (sources Solidworks, .step, fichier de découpe .dxf/.svg et fichier d'impression .stl)]]'''
 
  
* Découpe CP 3mm pour le boitier (fichier <code>RFM_proto2_decoupe_CP_3mm.svg</code>)
+
* 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 195 : Ligne 206 :
  
 
===Installation et configuration du Raspberry Pi===
 
===Installation et configuration du Raspberry Pi===
 +
 +
'''Création du système sur la carte sd'''
 +
 +
Nos développements sont faits 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 <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 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 [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 :
 +
 +
<pre>git clone https://github.com/myhumankit/PiTextReader.git</pre>
 +
 +
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>cd PiTextReader
 +
sudo sh install.sh
 +
</pre>
  
 
===Fabrication Prototype 1===
 
===Fabrication Prototype 1===
Ligne 200 : Ligne 236 :
 
'''1. Découpe et impression des pièces'''
 
'''1. Découpe et impression des pièces'''
  
Voir les fichiers source plus haut.
+
Voir les fichiers sources plus haut.
  
 
'''2. Assemblage du boîtier'''
 
'''2. Assemblage du boîtier'''
Ligne 206 : Ligne 242 :
 
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 boitier]][[File:RFM3_proto1_collage2.jpg|345px|Photo: collage du boitier]]  
+
[[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 220 : Ligne 256 :
 
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 boitier du prototype 2]]
+
[[File:RFM3_proto2_collage.jpg|700px|Photo: Assemblage du boîtier du prototype 2]]
 +
 
 +
Les jambes articulées sont assemblé avec des boulons de 3mm de diamètre. On pourra se référer au fichier sketchup fourni dans les sources pour l'assemblage.
 +
 
 +
[[File:RFM3_proto2_pied.jpg|700px|Photo: Assemblage des pieds du prototype 2]]
 +
 
 +
===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.
 +
 
 +
[[File:RFM3_circuit_principe.png|700px|Schéma de principe du circuit électronique]]
 +
 
 +
[[File:RFM3_gpio.png|700px|Schéma de connection des broches GPIO]]
 +
 
 +
 
 +
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.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!scope="col"| Broche
 +
!scope="col"| 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 [https://wikilab.myhumankit.org/index.php?title=Projets:Read_For_Me_V3#Haut_parleur_et_prise_jack_3.5mm Haur parleur et prise jack])
 +
 
 +
 
 +
[[File:RFM3_cablage_audio.jpg|700px|Photo du cablâge audio]]
 +
 
 +
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.
 +
 
 +
[[File:RFM3_circuit_audio_schema.png|700px|Schéma du circuit d'amplification]]
 +
 
  
===Cablâge===
+
'''Câblage des boutons'''
 +
 
 +
Les boutons sont soudés sur des plaques de prototypage : il est important de bien les plaquer contre la plaque de prototypage pour les boutons soient bien orientés et tous à la même hauetr. Les plaques sont ensuite collées en ajoutant une épaisseur de contreplaqué.
 +
 
 +
[[File:RFM3_boutons_pcb.jpg|700px|Photo: Boutons sur les plaques de prototypage]]
 +
 
 +
[[File:RFM3_boutons_collage.jpg|700px|Photo: Collage des boutons]]
 +
 
 +
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|]]
  
 
==Durée de fabrication du prototype final==
 
==Durée de fabrication du prototype final==
Ligne 230 : Ligne 358 :
 
===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 boitier directement posé sur la table.
+
Au regard du retour d'expérience sur les deux prototypes précédents 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 suffisament longue pour la déporter par dessus la feuille.
+
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 prototypes :
 
* 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 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 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é.
Ligne 247 : Ligne 375 :
  
 
[[File:RFM3_proto2_anim.gif| 700px | Dépliage du prototype 2]]
 
[[File:RFM3_proto2_anim.gif| 700px | Dépliage du prototype 2]]
 +
 +
==== Nouvelle version des boutons ====
 +
 +
Nous réalisons une nouvelle itération de design pour les boutons en reliefs.
 +
 +
[[File:RFM3_boutons.jpg|700px|Photos: boutons en reliers]]
  
 
===Hardware===
 
===Hardware===
  
 +
====Banc de test====
 +
 +
Afin de réaliser des tests de prise de vue et des différents développement, un carton de Jean-Jacques est sacrifié pour réaliser un banc de test.
  
====Changement de capteur==== <span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 
  
Il y a des problème de qualité optique avec le capteur actuel pour laquelle une partie de la page est floue.
+
[[File:RFM3_bancdessai.jpg|700px|Photo: banc de test pour la prise de vue]]
 +
 
 +
On utilise un platine de prototypage pour connecter rapidement des boutons pour les tests.
 +
 
 +
[[File:RFM3_bancdessai_top.jpg|700px|Photo: banc de test pour les boutons]]
 +
 
 +
====Changement de capteur====
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
 
 +
Il y a des problèmes 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.
 
On essaie donc une nouvelle raspicam version 2.1 avec 8 megapixels au lieu de 5, et les résultats semblent effectivement bien meilleurs.
  
====Éclairage leds==== <span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
+
'''Calcul théorique de la distance de prise de vue'''
 +
 
 +
[[File:RFM3_focale.jpg| 700px| Schéma : Calcul théorique de la focale]]
 +
 
 +
D'après [https://blog.i2s.fr/calculer-la-focale-de-lobjectif-de-votre-camera-0/ 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'''
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!scope="col"| direction
 +
!scope="col"| distance focale
 +
!scope="col"| taille du capteur
 +
!scope="col"| taille de la page
 +
!scope="col"| 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.
  
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.
+
====Éclairage leds====
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
  
Pour le Fabrikarium, nous disposons de ruban de leds RVB addressables. L'utilisation de leds addressables complexifie un peu la partie logicielle mais simplifie le circuit puisqu'elle ne necessite pas de circuit supplémentaire pour gérer la luminosité.
+
Des leds avaient été ajoutées à la V1 puis retirées pour la V2. Elles semblent néanmoins indispensables 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'elles ne nécessitent 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].
  
Après une série d'essais, il semble que seul la broche <code>GPIO21</code> permet de faire fonctionner le ruban.
+
Après une série d'essais, il semble que seule la broche <code>GPIO21</code> permet de faire fonctionner le ruban.
  
====Haut parleur et prise jack 3.5mm==== <span style="color:#FFFFFF; background:#FFA500; padding:5px">partiellement fonctionnel</span>
+
====Haut parleur et prise jack 3.5mm====
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
  
 
La version 1 avait un haut parleur intégré.
 
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 cable est connecté sur la prise jack du boitier.
+
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.
 +
 
 +
[[File:RFM3_jack.png|700px|Schéma: connection jack avec contact normalement fermé]]
  
 
[https://www.cuidevices.com/blog/understanding-audio-jack-switches-and-schematics Documentation pour faire un by pass avec un jack]
 
[https://www.cuidevices.com/blog/understanding-audio-jack-switches-and-schematics Documentation pour faire un by pass avec un jack]
  
====Fabrication d'une rallong pour la nappe/câble du capteur==== <span style="color:#FFFFFF; background:#CC0000; padding:5px">Non fonctionnel</span>
+
====Fabrication d'une rallonge pour la nappe/câble du capteur====
 +
<span style="color:#FFFFFF; background:#CC0000; padding:5px">Triste échec</span>
  
Malgré un courage, une abnégation et une dextérité hors norme, Jean-Jacques n'est pas parvenu à réaliser une rallonge fonctionnelle pour la nappe du capteur.
+
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]]
 +
 +
====Gestion de la batterie====
 +
<span style="color:#FFFFFF; background:#CC0000; padding:5px">Non fonctionnel</span>
 +
 +
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.
 +
 +
Pour cette raison, des mesures de consommation sur le 5 Volts ont été réalisées avec une carte PI3 mais aussi PI4. Dans les 2 cas, sont également alimentés l'amplificateur audio avec son haut-parleur, 28 leds pour l'éclairage et une carte de conversion analogique-numérique (4 entrées)
 +
 +
[[File:pi3_conso.png|400px|Consommation avec Raspberry PI3]]
 +
[[File:pi4_conso.png|400px|Consommation avec Raspberry PI4]]
 +
 +
La fréquence d'échantillonage (50 kHz) ne permet pas de présenter toutes les mesures : 10.000 mesures correspondent à un point du graphique. Les points rouges représentent la valeur maximale observée pendant les 0,2 seconde alors que le trait vertical noir est centré sur la valeur moyen et sa hauteur correspond à son écart-type.
 +
 +
Chaque division en abscisse représente 10 secondes. Les différentes phases de l'enregistrement sont :
 +
* une dizaine de secondes avant la mise sous tension
 +
* le démarrage de la raspberry (environ 30 secondes)
 +
* une phase d'inactivité uniquement pour la PI3 (environ 30 secondes)
 +
* une capture (allumage éclairage, capture d'image, traitement d'une image et conversion en audio du texte obtenu) : une trentaine de secondes pour la PI3 et une quinzaine de secondes pour la PI4.
 +
* la lecture audio du texte (environ 140 secondes)
 +
* l'arrêt de la carte (shutdown)
 +
* débranchement de l'alimentation au bout de 20 secondes uniquement pour la PI3.
 +
 +
 +
Pour pouvoir comparer le temps de traitement, c'est la même image qui est fournie aux deux cartes (et non celles capturées, qui pourraient varier en contraste, lumière, ...).
 +
 +
Le gain en temps de traitement est d'un rapport 2 entre la PI3 et la PI4 : passer de 30 secondes à 15 secondes est très appréciable.
 +
 +
Les niveaux de consommation sont comparables, à part pendant la phase pendant laquelle la carte est en shutdown.
 +
 +
Il faut considérer un courant maximal en pointe de 4 A (même si il y a peut-être eu saturation de l'entrée de l'oscilloscope) et un courant normal maximal de 2 A.
 +
 +
La consommation en shutdown est trop importante pour garantir une autonomie suffisante en mode veille : il faudra intégrer une commande de la raspberry vers le convertisseur pour couper plus efficacement la consommation.
  
 
===Software===
 
===Software===
  
==== Bouton On/Off ====
+
====Contrôle de la lecture avec mplayer====
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
En amont du Fabrikarkium, la partie logiciel de lecture audio a été redéveloppée en utilisant <code>mplayer</code> plutôt que <code>aplay</code>. En effet, <code> mplayer</code> peut être executé en tâche de fond, dans un processus à part, tout en restant contrôlable via son flux standard d'entrée <code>stdin</code>.
 +
 
 +
On peut lancer <code>mplayer</code> en tâche de fond avec la commande suivante :
 +
mplayer -slave -idle
 +
 
 +
En python, on utiliser la méthode <code>popen</code> pour lancer un nouveau processus. Si l'on précise le mode "w", on peut ensuite écrire des commandes dans l'entrée standard du processus :
 +
 
 +
lancer mplayer en tâche de fond :
 +
 
 +
mplayer = os.popen("mplayer -slave -idle","w")
 +
 
 +
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 <code>PiTextReader</code> par la classe <code>Player</code> définie dans le fichier <code>player.py</code>.
 +
 
 +
====Bouton On/Off====
 
<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 pblè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.
+
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.
  
==== Pico TTs ====
+
====Pico TTs====
 
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
  
Transformer un fichier texte <code>text.txt</code> en fichier audio <code>text.wav</code>
+
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 exécute la commande suivante :
 
<pre>
 
<pre>
 
/usr/bin/pico2wave -l fr-FR -w /tmp/text.wav < /tmp/text.txt
 
/usr/bin/pico2wave -l fr-FR -w /tmp/text.wav < /tmp/text.txt
 
</pre>
 
</pre>
 +
 +
La commande python pour réaliser cette opération est définie dans le fichier <code>reader.py</code>
  
 
====Nettoyage du script====
 
====Nettoyage du script====
 
<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 deboggage, il est décidé de le rendre plus modulaire.
+
Le script python principal 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=====
  
 
* <code>pitextreader.py</code> 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.
 
* <code>pitextreader.py</code> 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.
Ligne 313 : Ligne 569 :
 
* <code>logger.py</code> contient les outils de logs qui permettent d'écrire la sortie standard en même temps dans un fichier et dans la console
 
* <code>logger.py</code> contient les outils de logs qui permettent d'écrire la sortie standard en même temps dans un fichier et dans la console
 
* <code>reader.py</code> contient les fonctions de prise de vue et de traitement des données jusqu'à l'obtention d'un fichier audio.
 
* <code>reader.py</code> contient les fonctions de prise de vue et de traitement des données jusqu'à l'obtention d'un fichier audio.
* <code>player.py</code> contient un objet permettant le lire les fichiers audio et de modifier les paramètres de lecture en direct via <code>mplayer</code>
+
* <code>player.py</code> contient un objet permettant de lire les fichiers audio et de modifier les paramètres de lecture en direct via <code>mplayer</code>
 +
 
 +
====Comparaison des performances entre les Raspberry Pi 3 et 4====
 +
<span style="color:#FFFFFF; background:#00C000; padding:5px"> Testé et fonctionnel</span>
 +
 
 +
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.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
!scope="col"| Document
 +
!scope="col"| Pi 3
 +
!scope="col"| Pi 4
 +
!scope="col"| 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 <code>scripts/README.md</code> dans le dépôt du projet.
  
 
==Conclusion du Fabrikarium==
 
==Conclusion du Fabrikarium==
 +
 +
Cette cuvée Fabrikarium 2021 du projet Read For Me 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 <code>picoTTS</code>,
 +
* ajout ou finalisation de fonctionnalités qui étaient attendues :
 +
** contrôle fin de la lecture avec <code>mplayer</code>,
 +
** 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.
 +
 +
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,
 +
* fixer 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===
 +
 +
[[File:RFM3_proto1_top.jpg|700px|Photo: Prototype 1 final]]
 +
 +
'''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ée, 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.
 +
* Des charnières étaient prévues pour pouvoir accéder à l'intérieur du boîtier, mais cela ne fonctionne pas avec l'assemblage par créneaux.
 +
 +
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) ou prévoir un coude de la nappe au plus près du capteur.
 +
 +
===Présentation finale===
 +
 +
[[File:RFM3_presentation.pdf|700px|Fichier: Présentation finale]].
 +
 +
==Ressources==
 +
 +
- [https://circuitdigest.com/microcontroller-projects/best-text-to-speech-tts-converter-for-raspberry-pi-espeak-festival-google-tts-pico-and-pyttsx3 Comparaison de logiciels Text-to-Speech]
  
 
==Journal de bord==
 
==Journal de bord==
Ligne 352 : Ligne 689 :
  
 
* Version penchée  
 
* Version penchée  
* Version avec le boitier posé sur la table
+
* Version avec le boîtier posé sur la table
  
 
==== OCR ====
 
==== OCR ====

Version actuelle datée du 27 juillet 2022 à 14:44

Read For Me V3

RFM3 proto1 top.jpg

Informations
Description 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.
Catégorie Malvoyance
Etat d'avancement En cours
Techniques
Durée de fabrication
Coût matériel
Niveau
Licence by-sa
Date de création 2021-10-19
Équipe
Porteur de projet Francois LB
Contributeurs LaurentM, Audrey, Roger, Marie, Déborah, Quentin, Florian, Rémi, Gigi35
Fabmanager Delphine
Référent documentation Delphine, Gigi35, LaurentM
Nom humanlab Humanlab_MHK
Documentation
Statut de la documentation Partielle
Relecture de la documentation Non vérifiée

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

  • Puis développé lors de l'événement "Focus Vision" : Read_For_Me_V2

Photo: Prototype Read_For_Me version 2 / Focus Vision

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)

Photo de l'équipe

  • 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

Remarque

Trois logiciels propriétaires ont été utilisés pour les deux prototypes.

  • Catia pour le prototype 1
  • Sketchup pour le prototype 2
  • Solidworks 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)

Prototype 1 : fichier de découpe

  • Impression bras support de caméra en deux parties

Prototype 1 : impressions


Prototype 2

  • Découpe CP 3mm pour le boîtier (fichier RFM_proto2_decoupe_CP_3mm.svg)

Prototype 2 : fichier de découpe

  • Impression entretoises et support de caméra

Prototype 2 : impressions


Etapes de fabrication pas à pas

Installation et configuration du Raspberry Pi

Création du système sur la carte sd

Nos développements sont faits 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.

Photo: collage du boîtierPhoto: collage du boîtier

Fabrication Prototype 2

1. Découpe et impression des pièces

Voir les fichiers sources plus haut.

Photo: Impressions et quincaillerie pour le prototype2

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.

Photo: Assemblage du boîtier du prototype 2

Les jambes articulées sont assemblé avec des boulons de 3mm de diamètre. On pourra se référer au fichier sketchup fourni dans les sources pour l'assemblage.

Photo: Assemblage des pieds du prototype 2

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.

Schéma de principe du circuit électronique

Schéma de connection des broches GPIO


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)


Photo du cablâge audio

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.

Schéma du circuit d'amplification


Câblage des boutons

Les boutons sont soudés sur des plaques de prototypage : il est important de bien les plaquer contre la plaque de prototypage pour les boutons soient bien orientés et tous à la même hauetr. Les plaques sont ensuite collées en ajoutant une épaisseur de contreplaqué.

Photo: Boutons sur les plaques de prototypage

Photo: Collage des boutons

Les boutons sont reliés au port GPIO via plusieurs rangées de broches femelles et des câbles à plusieurs conducteurs.

RFM3 cablage boutons.jpg

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édents 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 prototypes :

  • 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

Photo du prototype 1

Prototype 2

Photo du prototype 2 Photo du prototype 2


Dépliage du prototype 2

Nouvelle version des boutons

Nous réalisons une nouvelle itération de design pour les boutons en reliefs.

Photos: boutons en reliers

Hardware

Banc de test

Afin de réaliser des tests de prise de vue et des différents développement, un carton de Jean-Jacques est sacrifié pour réaliser un banc de test.


Photo: banc de test pour la prise de vue

On utilise un platine de prototypage pour connecter rapidement des boutons pour les tests.

Photo: banc de test pour les boutons

Changement de capteur

Testé et fonctionnel


Il y a des problèmes 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

Schéma : Calcul théorique de la focale

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ées à la V1 puis retirées pour la V2. Elles semblent néanmoins indispensables 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'elles ne nécessitent 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 seule 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.

Schéma: connection jack avec contact normalement fermé

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.

Photo: Récupération d'un connecteur de nappe sur un RaspiPhoto: Connexion de la rallonge

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.

Pour cette raison, des mesures de consommation sur le 5 Volts ont été réalisées avec une carte PI3 mais aussi PI4. Dans les 2 cas, sont également alimentés l'amplificateur audio avec son haut-parleur, 28 leds pour l'éclairage et une carte de conversion analogique-numérique (4 entrées)

Consommation avec Raspberry PI3 Consommation avec Raspberry PI4

La fréquence d'échantillonage (50 kHz) ne permet pas de présenter toutes les mesures : 10.000 mesures correspondent à un point du graphique. Les points rouges représentent la valeur maximale observée pendant les 0,2 seconde alors que le trait vertical noir est centré sur la valeur moyen et sa hauteur correspond à son écart-type.

Chaque division en abscisse représente 10 secondes. Les différentes phases de l'enregistrement sont :

  • une dizaine de secondes avant la mise sous tension
  • le démarrage de la raspberry (environ 30 secondes)
  • une phase d'inactivité uniquement pour la PI3 (environ 30 secondes)
  • une capture (allumage éclairage, capture d'image, traitement d'une image et conversion en audio du texte obtenu) : une trentaine de secondes pour la PI3 et une quinzaine de secondes pour la PI4.
  • la lecture audio du texte (environ 140 secondes)
  • l'arrêt de la carte (shutdown)
  • débranchement de l'alimentation au bout de 20 secondes uniquement pour la PI3.


Pour pouvoir comparer le temps de traitement, c'est la même image qui est fournie aux deux cartes (et non celles capturées, qui pourraient varier en contraste, lumière, ...).

Le gain en temps de traitement est d'un rapport 2 entre la PI3 et la PI4 : passer de 30 secondes à 15 secondes est très appréciable.

Les niveaux de consommation sont comparables, à part pendant la phase pendant laquelle la carte est en shutdown.

Il faut considérer un courant maximal en pointe de 4 A (même si il y a peut-être eu saturation de l'entrée de l'oscilloscope) et un courant normal maximal de 2 A.

La consommation en shutdown est trop importante pour garantir une autonomie suffisante en mode veille : il faudra intégrer une commande de la raspberry vers le convertisseur pour couper plus efficacement la consommation.

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. Si l'on précise le mode "w", on peut ensuite écrire des commandes dans l'entrée standard du processus :

lancer mplayer en tâche de fond :

mplayer = os.popen("mplayer -slave -idle","w")

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 exécute 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 principal 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'objet settings qui gère les paramètres de lecture et d'enregistrement, et l'association entre les broches du raspberry pi et les fonctions de callback
  • constantes.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 console
  • reader.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 de lire les fichiers audio et de modifier les paramètres de lecture en direct via mplayer

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 Fabrikarium 2021 du projet Read For Me 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és 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.

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,
  • fixer 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

Photo: Prototype 1 final

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ée, 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.
  • Des charnières étaient prévues pour pouvoir accéder à l'intérieur du boîtier, mais cela ne fonctionne pas avec l'assemblage par créneaux.

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) ou prévoir un coude de la nappe au plus près du capteur.

Présentation finale

Fichier: Présentation finale.

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