{"id":7209,"date":"2021-12-21T08:54:29","date_gmt":"2021-12-21T07:54:29","guid":{"rendered":"https:\/\/telefab.fr\/?p=7209"},"modified":"2026-04-30T17:33:31","modified_gmt":"2026-04-30T15:33:31","slug":"transcripen-presentation-de-la-solution-technique","status":"publish","type":"post","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/transcripen-presentation-de-la-solution-technique\/","title":{"rendered":"Transcripen &#8211; Pr\u00e9sentation de la Solution Technique"},"content":{"rendered":"<p><strong>I\/ Contexte<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">Dans le cadre de notre sp\u00e9cialisation en conception d\u2019objets communicants (TAF CooC) dans notre formation \u00e0 l\u2019IMT Atlantique, nous avions pour objectif de cr\u00e9er de la valeur par les besoins actuels des entreprises et de l\u2019industrie \u00e0 l\u2019aide d\u2019objets communicants. En d\u2019autres termes, nous devions r\u00e9aliser un objet communicant qui r\u00e9ponde \u00e0 un besoin utilisateur.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Chacun des membres du groupe \u00e9tant en lien quotidien avec des \u00e9tudiants et \/ ou journalistes, nous avons relev\u00e9, lors de notre \u00e9tude terrain, un probl\u00e8me r\u00e9current chez ces deux types d\u2019individus, qui sont confront\u00e9s au quotidien \u00e0 de nombreuses conf\u00e9rences et de nombreux \u00e9changes oraux longs, voire fastidieux, et pendant lesquels les personnes en question ne peuvent pas \u00eatre passives (n\u00e9cessit\u00e9 de r\u00e9flexion \/ compr\u00e9hension \/ rebondir sur des questions, \u2026) et prendre l\u2019int\u00e9gralit\u00e9 de l\u2019oral en note. Nous avons donc d\u00e9cid\u00e9 de r\u00e9pondre \u00e0 la probl\u00e9matique suivante pendant ce projet : Comment permettre aux interlocuteurs d\u2019un \u00e9change, \u00e0 l\u2019aide d\u2019un objet connect\u00e9, de r\u00e9cup\u00e9rer l\u2019ensemble des informations v\u00e9hicul\u00e9es pendant ce-dernier ?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Apr\u00e8s nos \u00e9tudes terrains, nous avons imagin\u00e9, puis prototyp\u00e9 un stylo \/ micro connect\u00e9 qui enregistre un oral lorsque l\u2019utilisateur le d\u00e9cide (\u00e0 l\u2019aide d\u2019un bouton) et envoie sur l\u2019ordinateur de l\u2019utilisateur, via une application, les audios enregistr\u00e9s sur le stylo \/ micro sous format texte (transcrits). Gr\u00e2ce \u00e0 cet objet, l\u2019utilisateur peut totalement se concentrer pendant l\u2019oral et n\u2019a plus \u00e0 prendre en note les informations v\u00e9hicul\u00e9es. Cette phase de prototypage de ce stylo \/ micro connect\u00e9 s\u2019est effectu\u00e9e \u00e0 l\u2019aide d\u2019une m\u00e9thode agile (SCRUM) sur 3 semaines.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dans cet article, nous allons aborder les d\u00e9tails de la phase de prototypage, afin de vous fournir une explication la plus pr\u00e9cise possible de notre prototype (choix du mat\u00e9riel, sch\u00e9ma du montage, l\u2019enregistrement audio, l\u2019interface utilisateur, la transmission du fichier audio de la raspberry \u00e0 l\u2019interface, l\u2019algorithme de transcription utilis\u00e9 ainsi les r\u00e9sultats obtenus. Nous aborderons ensuite le r\u00e9sultat obtenu \u00e0 la fin de ces 3 semaines. Enfin, nous aborderons les perspectives d\u2019\u00e9volution de notre projet.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le code (comment\u00e9 pr\u00e9cis\u00e9ment) pour l\u2019ensemble du prototype est disponible sur le lien Github suivant : <\/span><a href=\"https:\/\/github.com\/camillebrl\/Transcripen\"><span style=\"font-weight: 400;\">https:\/\/github.com\/camillebrl\/Transcripen<\/span><\/a><span style=\"font-weight: 400;\">. Vous trouverez \u00e9galement, dans ce Github, une documentation d\u00e9taill\u00e9e de l\u2019ensemble des \u00e9l\u00e9ments \u00e0 installer sur la raspberry, ses configurations, \u2026<\/span><\/p>\n<p><strong>II\/ R\u00e9alisation<\/strong><\/p>\n<p><strong>A. Choix du mat\u00e9riel d\u00e9taill\u00e9s et sch\u00e9ma du montage final<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Le choix de la Raspberry pi vs Arduino : Alors qu\u2019Arduino est un microcontr\u00f4leur qui ne peut ex\u00e9cuter que du code compil\u00e9, la Raspberry pi fonctionne aussi comme syst\u00e8me autonome : si l&rsquo;Arduino est la plus adapt\u00e9e pour faire de la gestion de LEDs, de capteurs simples (temp\u00e9rature, luminosit\u00e9, distance&#8230;), elle ne l\u2019est pas pour la gestion de multim\u00e9dias tels que les audios notamment. La Raspberry Pi est plus adapt\u00e9e pour cela. C\u2019est pourquoi nous avons, pour ce projet qui consiste en un enregistrement et une gestion de fichiers audios, opt\u00e9 pour une Raspberry Pi.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Choix du type de Raspberry Pi : la Raspberry Pi Zero est la plus petite sur le march\u00e9 aujourd\u2019hui (\u00e0 l\u2019exception de la Raspberry Pi Pico qui n\u2019a pas d\u2019entr\u00e9e de carte m\u00e9moire int\u00e9gr\u00e9, ni de port usb, donc trop pas adapt\u00e9e \u00e0 notre projet). Puisque nous avions des contraintes de taille du mat\u00e9riel, afin d\u2019int\u00e9grer ce-dernier dans un stylo, nous avons opt\u00e9 pour la carte la plus petite possible, d\u2019o\u00f9 notre choix de la Raspberry Pi Zero. Par ailleurs, il existe 2 types de Raspberry Pi Zero : la W et la simple. Puisque nous avions besoin de Wifi pour notre projet (envoie des fichiers audio \u00e0 l\u2019application), nous avons opt\u00e9 pour la Raspberry Pi Zero W qui est dot\u00e9e de la wifi, contrairement \u00e0 la Raspberry Pi Zero.<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-4.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7210 size-medium\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-4-300x300.png\" alt=\"\" width=\"300\" height=\"300\" \/><\/a><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">La carte SD: nous avons opt\u00e9 pour une carte SD de 32Gb pour la Raspberry. Effectivement, celle-ci est indispensable \u00e0 la Raspberry: non seulement elle nous permet de stocker les fichiers audios des enregistrements, mais elle est surtout indispensable \u00e0 la Raspberry (c\u2019est sur cette-derni\u00e8re que se trouve l\u2019OS de la Raspberry et l\u2019ensemble de ses configurations)<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Breadboard + fils + bouton poussoir + r\u00e9sistance<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-2-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7212\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-2-1-225x300.png\" alt=\"\" width=\"225\" height=\"300\" \/><\/a><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-1-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7211\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-1-1-225x300.png\" alt=\"\" width=\"225\" height=\"300\" \/><\/a><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Le microphone utilis\u00e9 est un Microphone Jack 3,5mm nous y avons int\u00e9gr\u00e9 un convertisseur analogique num\u00e9rique a la suite de la prise jack, en effet le microphone produit un signal analogique, hors la carte Raspberry ne traite que les signaux num\u00e9riques. L\u2019ensemble des composants est d\u00e9taill\u00e9 ci dessous :<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Microphone Jack, 3,5 cm. 3 Poles.\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-3-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7213\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-3-1-300x51.png\" alt=\"\" width=\"300\" height=\"51\" \/><\/a><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Convertisseur analogique \/ num\u00e9rique : 15 cm de c\u00e2ble. Fait la conversion analogique \/ num\u00e9rique, int\u00e9gr\u00e9 une carte son\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-5.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7215\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-5-264x300.png\" alt=\"\" width=\"264\" height=\"300\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-4-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7214\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-4-1-234x300.png\" alt=\"\" width=\"234\" height=\"300\" \/><\/a><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Adaptateur c\u00e2ble micro USB \/ USB m\u00e2le:\u00a0<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-6.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7216 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-6-300x282.png\" alt=\"\" width=\"300\" height=\"282\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Entr\u00e9e: 5V | Sortie: 5 V, c\u00e2ble de 12cm.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Le sch\u00e9ma \u00e9lectronique final de notre objet connect\u00e9 est pr\u00e9sent\u00e9 ci-dessous:<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-7.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7217 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-7-300x159.png\" alt=\"\" width=\"300\" height=\"159\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Par ailleurs, nous avons int\u00e9gr\u00e9 ces composants dans notre objet final, qui prenait la forme d\u2019un stylo. Ci-dessous les images de notre objet final:<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-7219\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-10-209x300.png\" alt=\"\" width=\"209\" height=\"300\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-8.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7218\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-8.png\" alt=\"\" width=\"151\" height=\"212\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-9.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7229\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-9.png\" alt=\"\" width=\"78\" height=\"237\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Pour le construire, nous avons cr\u00e9\u00e9 un prototype sur Tinkercad pr\u00e9sent\u00e9 ci-dessous:<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-12.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7221 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-12-269x300.png\" alt=\"\" width=\"269\" height=\"300\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-13.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7222 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-13-300x188.png\" alt=\"\" width=\"300\" height=\"188\" \/><\/a> <a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7220 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-11-300x169.png\" alt=\"\" width=\"300\" height=\"169\" \/><\/a><\/p>\n<p><strong>B. L\u2019enregistrement audio sur la raspberry<\/strong><\/p>\n<ol>\n<li><em><span style=\"font-weight: 400;\">Le montage du dispositif d\u2019enregistrement<\/span><\/em><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Pour enregistrer des audios \u00e0 l\u2019aide de notre micro branch\u00e9 en micro-usb \u00e0 notre Raspberry Pi Zero W, nous avons utilis\u00e9 2 biblioth\u00e8ques python, indispensables \u00e0 cet \u00e9gard: Pyaudio et Pydub. PyAudio fournit des liaisons Python pour PortAudio, la biblioth\u00e8que de r\u00e9f\u00e9rence qui g\u00e8re les entr\u00e9e\/sortie usb d&rsquo;audio sur toutes les plateformes (dont la Raspberry). Quant \u00e0 Pydub, elle permet de manipuler un fichier audio simplement (ouverture de l&rsquo;audio, augmentation \/ diminution du volume de l&rsquo;audio, segmentation de l&rsquo;audio, calcul de la dur\u00e9e de l&rsquo;audio, et toute autre manipulation possible sur un audio. La librairie est en open-source sur <\/span><a href=\"https:\/\/github.com\/jiaaro\/pydub\"><span style=\"font-weight: 400;\">https:\/\/github.com\/jiaaro\/pydub<\/span><\/a><span style=\"font-weight: 400;\">). Pour utiliser pydub, il faut installer ffmpeg\/avlib.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour effectuer l\u2019enregistrement de l\u2019audio, il est important de prendre en compte plusieurs \u00e9l\u00e9ments :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">La d\u00e9tection du port sur lequel est branch\u00e9 le micro \u00e0 la Raspberry : Afin d\u2019identifier ce port, nous avons utilis\u00e9 la librairie Pyaudio, qui nous a permis, gr\u00e2ce \u00e0 sa fonction <\/span><i><span style=\"font-weight: 400;\">get_device_info_by_index<\/span><\/i><span style=\"font-weight: 400;\">, de trouver le port correspondant au micro.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Le nombre d\u2019images collect\u00e9es par seconde par d\u00e9faut par le micro : Une fois que nous avons identifi\u00e9 l\u2019indice du port correspondant au micro, nous avons pu afficher son \u201c<\/span><i><span style=\"font-weight: 400;\">defaultSampleRate<\/span><\/i><span style=\"font-weight: 400;\">\u201d, qui \u00e9tait, dans notre cas, de 48000Hz.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Le fait que Pyaudio d\u00e9coupe les donn\u00e9es en <\/span><i><span style=\"font-weight: 400;\">CHUNKS<\/span><\/i><span style=\"font-weight: 400;\"> (trames), au lieu d&rsquo;avoir une quantit\u00e9 continue d&rsquo;audio, afin de limiter la puissance de traitement requise (RAM), puisque la Raspberry a une RAM assez faible (512M pour notre Raspberry Pi Zero W). D\u00e8s lors, nous devions d\u00e9finir le nombre de <\/span><i><span style=\"font-weight: 400;\">CHUNKS<\/span><\/i><span style=\"font-weight: 400;\"> (trames) dans lesquelles nos signaux seront divis\u00e9s (il s\u2019agit d\u2019une puissance de 2).\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une fois que nous avons identifi\u00e9 ces param\u00e8tres, nous avons pu instancier un <\/span><i><span style=\"font-weight: 400;\">stream<\/span><\/i><span style=\"font-weight: 400;\"> (ligne 28 de final_algo.py du Github) qui nous permet ensuite, lorsqu\u2019on appelle la fonction <\/span><i><span style=\"font-weight: 400;\">stream.read<\/span><\/i><span style=\"font-weight: 400;\">, d\u2019enregistrer l\u2019audio (ligne 52 du Github).<\/span><\/li>\n<\/ul>\n<p><em><span style=\"font-weight: 400;\">2. Le montage du dispositif du bouton pour lancer l\u2019enregistrement<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019objectif du bouton est de permettre \u00e0 l\u2019utilisateur de choisir quand il veut enregistrer et quand il veut d\u2019arr\u00eater d\u2019enregistrer. Un bouton se connecte \u00e0 une Raspberry Pi \u00e0 l\u2019aide de ses ports GPIO. Les ports GPIO sont des ports physiques se pr\u00e9sentant g\u00e9n\u00e9ralement sous forme de picots m\u00e9talliques carr\u00e9s qui permettent de transmettre un signal \u00e9lectrique. Un port GPIO transmet un signal relativement binaire (pas de courant ou du courant). Dans le cas de notre Raspberry Pi Zero W, les ports GPIO travaillent en 3.3V et environ 20 mA. En d\u2019autres termes, les ports GPIO du Raspberry PI permettent d\u2019envoyer du courant (et donc, des informations) \u00e0 nos composants (les sorties, ici, la Led (que l\u2019on verra ci-dessous)) et r\u00e9cup\u00e9rer du courant (et des informations) de ceux-ci (les entr\u00e9es, ici le bouton poussoir). Les ports GPIO de la Raspberry se pr\u00e9sentent comme ci contre.<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7224 alignleft\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-15-186x300.png\" alt=\"\" width=\"186\" height=\"300\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Ils sont num\u00e9rot\u00e9s de 1 \u00e0 40, en partant du haut \u00e0 gauche quand vous tenez la Raspberry pi ports GPIO \u00e0 droite. Cette num\u00e9rotation de 1 \u00e0 40 est le mode de num\u00e9rotation dit \u00ab Board \u00bb. Un autre mode de num\u00e9rotation existe, qui repose sur l\u2019adressage processeur, appel\u00e9 mode \u00ab BCM \u00bb (on prend en compte les chiffres apr\u00e8s \u201cGPIO\u201d comme \u201cGPIO 25\u201d. On remarque qu\u2019il existe des ports de diff\u00e9rents types : des ports de puissance (5v et 3.3v), des ports g\u00e9n\u00e9raux (GPIO), des ports PCM (Pulse-code Modulation) permettant une repr\u00e9sentation num\u00e9rique de l&rsquo;analogique \u00e9chantillonn\u00e9 (forme de sortie audio num\u00e9rique), des ports UART (prend des octets de donn\u00e9es et transmet les bits individuels de mani\u00e8re s\u00e9quentielle), des ports I2C1 (permettent une communication bifilaire avec une vari\u00e9t\u00e9 de capteurs et de dispositifs externes), et des ports SPI (relient plusieurs dispositifs compatibles \u00e0 un seul ensemble de broches en leur attribuant des broches de s\u00e9lection de puce diff\u00e9rentes). Nous avons d\u00e9cid\u00e9 d\u2019utiliser les ports g\u00e9n\u00e9raux de la Raspberry pour notre montage (soit les ports GPIO), ainsi que le port 3.3v pour le bouton poussoir, par simplicit\u00e9.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour utiliser les ports GPIO de la raspberry, il faut utiliser une librarie python. Il en existe plusieurs, mais la plus connue (celle pour laquelle il y a le plus d&rsquo;exemple sur internet) est Rpi.GPIO. Ainsi, nous avons utilis\u00e9 la librairie RPi.GPIO pour interagir avec notre montage via notre code Python. Nous devions ainsi indiquer au programme quel \u00e9tait le port de r\u00e9cup\u00e9ration du courant (input) et le port de sortie (envoi du courant). Pour se faire, nous avons utilis\u00e9 la fonction <\/span><i><span style=\"font-weight: 400;\">setup<\/span><\/i><span style=\"font-weight: 400;\">, avec comme attributs <\/span><i><span style=\"font-weight: 400;\">GPIO.IN<\/span><\/i><span style=\"font-weight: 400;\"> et <\/span><i><span style=\"font-weight: 400;\">GPIO.OUT<\/span><\/i><span style=\"font-weight: 400;\"> pour indiquer respectivement le port d\u2019entr\u00e9e et de sortie de courant.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ici, nous devions prendre en compte le fait qu\u2019une entr\u00e9e GPIO flotte entre 0 et 1 (fonction <\/span><i><span style=\"font-weight: 400;\">input<\/span><\/i><span style=\"font-weight: 400;\">). Par d\u00e9faut dans la librairie, elle ne peut prendre que 1 ou 0 comme valeurs (True ou False). Aussi, lorsque l&rsquo;utilisateur appuie sur le bouton, il y a plusieurs entr\u00e9es qui arrivent dans la seconde qui suit (entre 0 et 1), qui sont arrondies \u00e0 1. Afin de ne pas confondre une entr\u00e9e \u00e0 1 correspondant \u00e0 l\u2019appui sur le bouton par l\u2019utilisateur et une entr\u00e9e \u00e0 1 correspondant \u00e0 un courant suivant l\u2019appui sur le bouton, nous avons d\u00e9cid\u00e9 qu\u2019on consid\u00e9rait que l\u2019entr\u00e9e ne correspondait \u00e0 un appui sur le bouton que s\u2019il n\u2019y avait pas d\u2019autre courant re\u00e7u dans les 2 secondes pr\u00e9c\u00e9dant la r\u00e9ception du courant. Ainsi, si l\u2019utilisateur appuie sur le bouton 2x en 2 secondes, voire plus, on ne consid\u00e8re pas que ce-dernier a appuy\u00e9.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">D\u00e8s lors, il \u00e9tait important, particuli\u00e8rement suite \u00e0 ce que nous venons d\u2019expliquer ci-dessus, de pr\u00e9venir l\u2019utilisateur lorsqu\u2019il enregistre et lorsqu\u2019il a fini d\u2019enregistrer, c&rsquo;est-\u00e0-dire si son appui sur le bouton a bien \u00e9t\u00e9 pris en compte ou non. C\u2019est pourquoi nous avons mis en place une Led, qui s\u2019allume lorsque l\u2019utilisateur appuie sur le bouton, et s\u2019\u00e9teint lorsque l\u2019on consid\u00e8re que l\u2019utilisateur a rappuy\u00e9 dessus. En d\u2019autres termes, la Led pr\u00e9vient l\u2019utilisateur quand l\u2019enregistrement d\u00e9bute (quand on le lance) et quand l\u2019enregistrement se termine (quand on l\u2019arr\u00eate).\u00a0<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">3. Le montage du dispositif de la led pour indiquer \u00e0 l\u2019utilisateur quand l\u2019enregistrement est lanc\u00e9<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">De la m\u00eame mani\u00e8re que le bouton, la Led est branch\u00e9e aux ports GPIO de la Raspberry Pi Zero W. Cependant, contrairement au bouton poussoir d\u00e9crit ci-dessus, nous ne r\u00e9cup\u00e9rons pas le courant (l\u2019information) de la Led, mais on lui envoie du courant (de l\u2019information) pour l\u2019allumer ou l\u2019\u00e9teindre. Alors que l\u2019on utilisait la fonction <\/span><i><span style=\"font-weight: 400;\">input<\/span><\/i><span style=\"font-weight: 400;\"> pour r\u00e9cup\u00e9rer les informations issues du bouton poussoir ci-dessus, nous voulons envoyer des informations \u00e0 la Led. Pour ce faire, nous utilisons la fonction <\/span><i><span style=\"font-weight: 400;\">output<\/span><\/i><span style=\"font-weight: 400;\">. Il suffit ensuite de mettre le pin en question (celui qui est li\u00e9 \u00e0 la Led) \u00e0 <\/span><i><span style=\"font-weight: 400;\">True<\/span><\/i><span style=\"font-weight: 400;\"> lorsqu\u2019on veut l\u2019allumer, et \u00e0 <\/span><i><span style=\"font-weight: 400;\">False<\/span><\/i><span style=\"font-weight: 400;\"> lorsqu\u2019on veut l\u2019\u00e9teindre. Ainsi, on allume ce-dernier lorsque l\u2019on consid\u00e8re que le bouton poussoir a \u00e9t\u00e9 appuy\u00e9, et on l\u2019\u00e9teint lorsqu\u2019on consid\u00e8re qu\u2019il a \u00e9t\u00e9 de nouveau allum\u00e9 (\u00e0 l\u2019aide d\u2019une variable <\/span><i><span style=\"font-weight: 400;\">isPressed<\/span><\/i><span style=\"font-weight: 400;\"> que l\u2019on a d\u00e9fini en amont, \u00e0 qui l\u2019on attribue l\u2019oppos\u00e9 (<\/span><i><span style=\"font-weight: 400;\">not isPressed<\/span><\/i><span style=\"font-weight: 400;\">) d\u00e8s lors que l\u2019on consid\u00e8re que le bouton a \u00e9t\u00e9 appuy\u00e9.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">4. Explication d\u00e9taill\u00e9e du fonctionnement du montage final<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">Les parties 1, 2 et 3 ont ensuite \u00e9t\u00e9 li\u00e9es. En d\u2019autres termes, lorsque l\u2019utilisateur appuie sur le bouton, non seulement la Led s\u2019allume, mais \u00e9galement l\u2019enregistrement se lance. Lorsqu\u2019il rappuie sur le bouton, la Led s\u2019\u00e9teint et l\u2019enregistrement s\u2019arr\u00eate. Si la Led est allum\u00e9, c\u2019est que l\u2019enregistrement est n\u00e9cessairement en route. Si cette-derni\u00e8re n\u2019est pas allum\u00e9e, c\u2019est que l\u2019enregistrement ne l\u2019est pas.\u00a0<\/span><\/p>\n<p><strong>C. L\u2019application<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">Pour l\u2019application, le code est disponible sur le d\u00e9p\u00f4t suivant: <\/span><a href=\"https:\/\/github.com\/yac-ai\/django_transcripen.git\"><span style=\"font-weight: 400;\">https:\/\/github.com\/yac-ai\/django_transcripen.git<\/span><\/a><span style=\"font-weight: 400;\"> .Pour un d\u00e9veloppement rapide, le framework Django est utilis\u00e9, bas\u00e9 sur le langage de programmation Python. La raison de ce choix est d\u00fb au fait que nous avions d\u00e9j\u00e0 de l\u2019exp\u00e9rience dessus. Et, vu qu\u2019il fallait aller tr\u00e8s vite, ce choix \u00e9tait plus s\u00fbr. Pour ce projet, on a cr\u00e9\u00e9 un environnement virtuel; son avantage d\u2019un environnement virtuel est l\u2019isolation des environnements de d\u00e9veloppement avec des librairies install\u00e9es diff\u00e9rentes pour chaque projet. Ainsi, nous pouvons installer une certaine version de Python, diff\u00e9rente de celle install\u00e9e dans l\u2019ordinateur et pour nos potentiels autres objets, et les librairies souhait\u00e9es. La cr\u00e9ation et l\u2019activation se font par les commandes suivantes:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">python -m venv \/home\/yacine\/.virtualens\/djangodev<\/span><\/p>\n<p><span style=\"font-weight: 400;\">#yacine \u00e9tant le nom de votre utilisateur #cmd de cr\u00e9ation<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\"> source <\/span><span style=\"font-weight: 400;\">~ \/.virtualenvs\/djangodev\/bin\/activate #cmd d&rsquo;activation<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0Le framework poss\u00e8de un serveur Apache int\u00e9gr\u00e9, en phase de d\u00e9veloppement. Et l\u2019avantage du serveur Apache est la possibilit\u00e9 de visualiser le fonctionnement du site web. Aussi, \u00e0 la r\u00e9cup\u00e9ration du d\u00e9p\u00f4t git, il faudra se positionner dans le r\u00e9pertoire transcripen_project et lancez la commande suivante qui va activer le serveur apache:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">python manage.py runserver<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sommairement, le projet comprend ainsi, dans le dossier transcripen_project\/transcripen, les vues qui permettent de traiter les donn\u00e9es de chaque page( dans le fichier <\/span><i><span style=\"font-weight: 400;\">views.py<\/span><\/i><span style=\"font-weight: 400;\">), les urls qui sont reli\u00e9s \u00e0 ces vues (dans le fichier <\/span><i><span style=\"font-weight: 400;\">urls.py<\/span><\/i><span style=\"font-weight: 400;\">) et les templates des pages qui contiennent le code html de ces pages(dans le dossier <\/span><i><span style=\"font-weight: 400;\">templates<\/span><\/i><span style=\"font-weight: 400;\">).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pour avoir plus d\u2019informations sur le framework et son fonctionnement, vous pouvez voir r\u00e9f\u00e9rer au lien suivant: <\/span><a href=\"https:\/\/docs.djangoproject.com\/fr\/4.0\/\"><span style=\"font-weight: 400;\">https:\/\/docs.djangoproject.com\/fr\/4.0\/<\/span><\/a><span style=\"font-weight: 400;\"> . La documentation est tr\u00e8s bien faite et facile \u00e0 comprendre.<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-16.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7228 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-16-300x178.png\" alt=\"\" width=\"300\" height=\"178\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>D. La transmission des fichiers audio de la raspberry \u00e0 l\u2019application<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">Notre projet Transcripen consiste en un stylo enregistreur qui communique avec une application sur l\u2019ordinateur pour que cette derni\u00e8re transcrive l\u2019\u00e9change. Le stylo est un objet connect\u00e9 qui doit par cons\u00e9quent s\u2019appuyer sur une transmission sans fil dont notre choix s\u2019est port\u00e9 sur le Wi-Fi. <\/span><span style=\"font-weight: 400;\">Il existe diff\u00e9rents modes de mise en r\u00e9seau en Wi-Fi. Pour Transcripen, nous avons opt\u00e9 pour le mode d\u2019infrastructure. Ainsi, l\u2019ordinateur sur lequel tourne l&rsquo;application et le raspberry contenu dans le stylo sont connect\u00e9s entre eux dans un r\u00e9seau local via un point d\u2019acc\u00e8s ou un routeur. Ainsi, nous avons nos deux \u00e9quipements qui sont dans le m\u00eame sous-r\u00e9seau et qui peuvent communiquer facilement.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La norme 802.11 utilise des ondes \u00e9lectromagn\u00e9tiques pour une liaison sans fil avec la couche physique qui d\u00e9finit la modulation des ondes radio\u00e9lectriques et les caract\u00e9ristiques de la signalisation pour la transmission de donn\u00e9es, et la couche liaison de donn\u00e9es qui d\u00e9finit l\u2019interface entre le bus de la machine et la couche physique. La troisi\u00e8me couche, celle qui est responsable du transport des messages complets de bout en bout (soit de processus a\u0300 processus) au travers du re\u0301seau est assur\u00e9e ici par le protocole TCP.<\/span><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-17.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7227 alignright\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-17-186x300.png\" alt=\"\" width=\"186\" height=\"300\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Pour permettre cette transmission, nous avons utilis\u00e9 les sockets TCP. Concr\u00e8tement, un socket repr\u00e9sente l\u2019association entre IP et Port. L\u2019IP identifie la machine et le port une application. Dans notre projet, le serveur tourne dans le stylo et le client est int\u00e9gr\u00e9 dans l\u2019application. Ainsi, le serveur est activ\u00e9 \u00e0 intervalle de temps r\u00e9gulier dans la raspberry pour permettre, d\u00e8s qu\u2019elle d\u00e9tecte le client de lancer la transmission.\u00a0 Dans notre cas, le serveur se charge d\u2019envoyer l\u2019audio et le client re\u00e7oit le fichier en plusieurs paquets de 1024 octets.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ce choix est d\u00fb principalement \u00e0 la facilit\u00e9 d\u2019int\u00e9gration et au fait que c\u2019\u00e9tait une des comp\u00e9tences d\u00e9j\u00e0 acquises dans l\u2019\u00e9quipe.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0E.\u00a0Algorithme de transcription d\u2019un fichier audio en fichier texte<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019algorithme est disponible sur le Github du projet, dans la rubrique: <\/span><a href=\"https:\/\/github.com\/camillebrl\/Transcripen\/blob\/main\/application\/transcription_text\/algo_speech_recognition.py\"><span style=\"font-weight: 400;\">https:\/\/github.com\/camillebrl\/Transcripen\/blob\/main\/application\/transcription_text\/algo_speech_recognition.py<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous avons cr\u00e9\u00e9\u00a0 une classe qui a pour attributs le chemin d&rsquo;un fichier audio .wav ainsi que sa langue et qui renvoie le texte correspondant \u00e0 la transcription du fichier audio en question. Cette classe effectue un \u00ab\u00a0pr\u00e9processing\u00a0\u00bb de l&rsquo;audio d&rsquo;entr\u00e9e (calcul de la dur\u00e9e de l&rsquo;audio, d\u00e9coupage en sous-audios de 10s), et applique \u00e0 l&rsquo;audio pr\u00e9process\u00e9 l&rsquo;algorithme de Speech Recognition d\u00e9velopp\u00e9 par Google et accessible simplement via une API (incluse dans la librarie speech_recognition disponible sur Github <\/span><a href=\"https:\/\/github.com\/Uberi\/speech_recognition\"><span style=\"font-weight: 400;\">https:\/\/github.com\/Uberi\/speech_recognition<\/span><\/a><span style=\"font-weight: 400;\">).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nous utilisons pour cela plusieurs libraires, notamment Pydub, qui est une librairie permettant de manipuler un fichier audio simplement (ouverture de l&rsquo;audio, augmentation \/ diminuaiton du volume de l&rsquo;audio, segmentation de l&rsquo;audio, calcul de la dur\u00e9e de l&rsquo;audio, et toute autre manipulation possible sur un audio. La librairie est en open-source sur https:\/\/github.com\/jiaaro\/pydub). Pour utiliser pydub, il faut installer ffmpeg\/avlib. nous utilisons aussi la librairie speech_recognition (https:\/\/github.com\/Uberi\/speech_recognition) qui effectue de la reconnaissance vocale via diverses APIs, en ligne et hors ligne, notamment CMU Sphinx, Google Cloud Speech, WIT.ai, Microsoft Azure Speech, Houndify, IBM Speech to Text, ou encore Snowboy Hotword Detection. Les diff\u00e9rents r\u00e9seaux ont \u00e9t\u00e9 entra\u00een\u00e9 sur des audios dont la taille de d\u00e9passe pas les 50 secondes. D\u00e8s lors, nous avons d\u00e9coup\u00e9 le fichier audio en sous-audios de 10s.\u00a0<\/span><\/p>\n<ol>\n<li><em><span style=\"font-weight: 400;\">Le d\u00e9coupage de l\u2019audio<\/span><\/em><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Pour d\u00e9couper l\u2019audio en slots de 10s, on a tout d\u2019abord r\u00e9cup\u00e9r\u00e9 la dur\u00e9e de l\u2019audio \u00e0 l\u2019aide de la fonction <\/span><i><span style=\"font-weight: 400;\">duraction_seconds<\/span><\/i><span style=\"font-weight: 400;\"> de Pydub. On divise ensuite la dur\u00e9e totale en n sous ensembles de 10 secondes. Pour ce faire, nous utilisons la fonction <\/span><i><span style=\"font-weight: 400;\">range<\/span><\/i><span style=\"font-weight: 400;\"> de python (<\/span><i><span style=\"font-weight: 400;\">range(0, nombre total de secondes de l\u2019audio, 10)<\/span><\/i><span style=\"font-weight: 400;\">. On it\u00e8re (<\/span><i><span style=\"font-weight: 400;\">for i<\/span><\/i><span style=\"font-weight: 400;\">) sur toutes les valeurs de cette liste, c&rsquo;est-\u00e0-dire sur les secondes de l\u2019audio. On coupe ensuite l\u2019audio entre la seconde i et la seconde i + 10. Afin d\u2019\u00e9viter qu\u2019il y ait des coupures de mots qui g\u00eaneraient la transcription de chaque slot d\u2019audio, on prend 1 seconde avant et 1 seconde apr\u00e8s de l\u2019audio (plus de d\u00e9tails dans la documentation de l\u2019algorithme sur <\/span><a href=\"https:\/\/github.com\/camillebrl\/Transcripen\/blob\/main\/application\/transcription_text\/algo_speech_recognition.py\"><span style=\"font-weight: 400;\">https:\/\/github.com\/camillebrl\/Transcripen\/blob\/main\/application\/transcription_text\/algo_speech_recognition.py<\/span><\/a><span style=\"font-weight: 400;\"> en lignes 49 \u00e0 55). Une fois le slot d\u2019audio r\u00e9cup\u00e9r\u00e9, on l\u2019exporte.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">2. L\u2019application de l\u2019algorithme sur les slots de 10 (exactement 11 \u00e0 12s d\u2019audio)<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">Sur ce slot d\u2019audio, on applique la fonction <\/span><i><span style=\"font-weight: 400;\">recognize_google<\/span><\/i><span style=\"font-weight: 400;\"> (appel de l\u2019API Google qui n\u2019a pas de limite d\u2019appel) sur le slot d\u2019audio, et en d\u00e9finissant la langue. On a en retour un <\/span><i><span style=\"font-weight: 400;\">string<\/span><\/i><span style=\"font-weight: 400;\"> correspondant \u00e0 la transcription de l\u2019audio du slot.<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">3. La concat\u00e9nation finale du r\u00e9sultat<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019algorithme est donc appliqu\u00e9 sur chaque slot d\u2019audio (on supprime le .wav du slot \u00e0 chaque fois que l\u2019on a obtenu la transcription de l\u2019audio). On ajoute les transcriptions de chaque slot dans un string g\u00e9n\u00e9ral (variable de la classe <\/span><i><span style=\"font-weight: 400;\">final_result<\/span><\/i><span style=\"font-weight: 400;\">). On obtient ensuite la transcription de l\u2019audio tout entier.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>III\/ R\u00e9sultats<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">La d\u00e9monstration pr\u00e9sente des r\u00e9sultats concluants sur de nombreux point :\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Bien qu\u2019\u00e9tant de volume cons\u00e9quent, l\u2019objet pr\u00e9sent\u00e9 est bien portable, auto-aliment\u00e9 et communique sans fil.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">L\u2019enregistrement de l\u2019audio se d\u00e9roule sans r\u00e9els probl\u00e8mes, la qualit\u00e9 de l\u2019enregistrement est tr\u00e8s satisfaisante pour une distance \u00e0 l\u2019objet d\u2019environ 50 cm. Cela est tout \u00e0 fait coh\u00e9rent avec le contexte d\u2019un \u00e9change entre 2 personnes.\u00a0\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">L\u2019application re\u00e7oit bien le fichier audio, le transcrit et l\u2019affiche sur l\u2019application Web. La transcription est assez satisfaisante, bien que tous les mots ne soient pas r\u00e9ellement transcrits parfaitement. L\u2019esprit et la forme globale de l\u2019\u00e9change est bien retranscrit par la solution est ceci \u00e9tait l\u2019objectif principal<\/span><\/li>\n<\/ul>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-18.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7226 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-18-300x96.png\" alt=\"\" width=\"300\" height=\"96\" \/><\/a><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-19.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-7225 aligncenter\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2021\/12\/unnamed-19-300x169.png\" alt=\"\" width=\"300\" height=\"169\" \/><\/a><\/p>\n<p><strong>IV\/ Perspectives<\/strong><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Automatisation du lancement de nos algorithmes lorsque la Raspberry boote: Nous n\u2019avons pas configur\u00e9 une ex\u00e9cution du script de mani\u00e8re automatique par manque de temps. Si nous avions eu une semaine suppl\u00e9mentaire (soit un sprint de plus), nous aurions pu mettre cela en place. D\u00e8s lors, nous \u00e9tions oblig\u00e9 de lancer les commandes \u201c<\/span><i><span style=\"font-weight: 400;\">python3 final_algo.py<\/span><\/i><span style=\"font-weight: 400;\">\u201d en se connectant en SSH \u00e0 la Raspberry afin de le faire tourner. Nous aurions pu effectuer une configuration du d\u00e9marrage de la Raspberry afin que celle-ci lance automatiquement notre algorithme. Pour ce faire, nous aurions pu d\u00e9finir un contrab qui permet, apr\u00e8s chaque d\u00e9marrage, d\u2019ex\u00e9cuter automatiquement un script, \u00e0 l\u2019aide de la ligne \u201c<\/span><i><span style=\"font-weight: 400;\">@reboot\u00a0 \/home\/user\/final_algo.sh<\/span><\/i><span style=\"font-weight: 400;\">\u201d.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Miniaturisation: La principale am\u00e9lioration possible serait de r\u00e9duire consid\u00e9rablement la taille de nos composants. Dans un premier temps la carte Raspberry Pi Zero pourrait \u00eatre remplac\u00e9e au profit d\u2019une carte plus petite int\u00e9grant uniquement les ports (seulement 4 port de donn\u00e9, un port d\u2019alimentation) dont nous avons besoins et un circuit imprim\u00e9 ne contenant uniquement nos algorithmes utilis\u00e9 pour le service rendu. Du c\u00f4t\u00e9 de la batterie sa taille pourrait \u00eatre diminu\u00e9e \u00e9galement en r\u00e9duisant sa capacit\u00e9. Des tests devront \u00eatre effectu\u00e9s sur les performances \u00e9nerg\u00e9tiques des diff\u00e9rents composants afin de calculer pr\u00e9cis\u00e9ment la capacit\u00e9 n\u00e9cessaire de notre batterie, pour information la Raspberry Pi Zero W requiert\u00a0 5V pour environ 300 mA. En conclusion, plus la taille des composants se r\u00e9duit, plus leur prix de production et de d\u00e9veloppement augmente.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Ajout d\u2019un bouton pour surligner les moments importants de l\u2019audio: En plus de transcrire l\u2019audio en texte, nous aurions pu<\/span>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">2 algorithmes tournent : un qui transcrit le tout, un autre juste le moment indiqu\u00e9, et on fait une recherche dans le document de l\u00e0 o\u00f9 se situe le paragraphe en question, et on y met un effet dessus<\/span><\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Ajout d\u2019un algorithme de diff\u00e9renciation des interlocuteurs : il existe un ensemble d\u2019algorithmes disponibles (notamment de Google) qui permettent d\u2019effectuer une diff\u00e9renciation d\u2019interlocuteurs d\u2019un audio. Nous aurions pu l\u2019ajouter \u00e0 notre projet si nous avions eu davantage de temps. Cependant, puisque nous travaillons sur des slots d\u2019audios et puisque les algorithmes sont entra\u00een\u00e9s sur des audios de courte dur\u00e9e, nous ne savons pas comment nous aurions pu traiter cela. De nombreuses recherches ont \u00e9t\u00e9 effectu\u00e9es sur le sujet (sur de longs audios) que nous aurions pu \u00e9tudier, si nous avions eu davantage de temps.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Possibilit\u00e9 de configurer le cloud: le choix du wifi reste un bon choix. Mais <\/span><span style=\"font-weight: 400;\">on pourrait consid\u00e9rer le Cloud qui permettrait de stocker les audios et de r\u00e9cup\u00e9rer tous les audios enregistr\u00e9s dans l\u2019application web.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I\/ Contexte Dans le cadre de notre sp\u00e9cialisation en conception d\u2019objets communicants (TAF CooC) dans notre formation \u00e0 l\u2019IMT Atlantique, nous avions pour objectif de cr\u00e9er de la valeur par les besoins actuels des entreprises et de l\u2019industrie \u00e0 l\u2019aide d\u2019objets communicants. En d\u2019autres termes, nous devions r\u00e9aliser un objet communicant qui r\u00e9ponde \u00e0 un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[113],"tags":[],"class_list":["post-7209","post","type-post","status-publish","format-standard","hentry","category-couad"],"acf":{"article_projet":[10677]},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/7209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/comments?post=7209"}],"version-history":[{"count":2,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/7209\/revisions"}],"predecessor-version":[{"id":10679,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/7209\/revisions\/10679"}],"acf:post":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/10677"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=7209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=7209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tags?post=7209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}