Archives
-
Nous avons remarqué que vous n'utilisez PAS de bloqueur de publicités !
Pour préserver votre cerveau, et nettoyer le web nous vous conseillons l'installation d'un bloqueur.
uBlock Origin est l'une des extensions firefox la plus respectueuse de votre vie privée, n'hésitez pas à l'installer.
Liens à lire
- WAL - The Waveform Analysis Language 15 avril 2024Un langage de programmation pour analyser les traces VCD. — Permalink
- Festival international de Colmar - Colmar Symphonic Mob© 12 avril 2024Créé en 2014 par l'Orchestre symphonique allemand de Berlin , le Symphonic Mob© offre à tous ceux qui pratiquent un instrument, la possibilité de faire de la musique avec les musiciens d'un orchestre professionnel. Quiconque peut ainsi participer, peu importe l'âge ou le niveau, tout le monde est le bienvenu ! Il faut juste de […]
- Cute gravity-bending platformer ROTA is now free and open source | GamingOnLinux 11 avril 2024Always nice to see more developers open up their games. ROTA released back in 2022 is now not only free, but it's also been made open source by the dev. — Permalink
- Query Your C Code | Hackaday 9 avril 2024Un moteur SQL pour faire des recherches dans un code en langage C. Original, à voir si c'est utile. — Permalink
- L'étonnante baisse des réservations hôtelières pendant les JO 2024 | TF1 INFO 8 avril 2024Mhuahahaha ! Le fascisme ne fait plus recette — Permalink
- Vergers Cancel 5 avril 2024Faites gaffes quand vous dites «halte à la cancel culture» sinon vous n'aurez pas de kiwi ni de prune ;) — Permalink
- Unconventional uses of FPGAs | Voltage|Divide 22 mars 2024Trucs non conventionnels que l'on peut faire avec un FPGA. — Permalink
- xkcd: Moon Armor Index 19 mars 2024Quel serait l'épaisseur de la couche «d'armure» si l'on prenait les satellites de la planète et qu'on l'étalait sur sa surface. — Permalink
- Comment utiliser la commande dmesg sur Linux - malekal.com 18 mars 2024Pour éviter le sudo : sudo sysctl -w kernel.dmesg_restrict=0 — Permalink
- GitHub - RajSolai/TextSnatcher: How to Copy Text from Images ? Answer is TextSnatcher !. Perform OCR operations in seconds on Linux Desktop. - Liens en vrac de sebsauvage 15 mars 2024— Permalink
- WAL - The Waveform Analysis Language 15 avril 2024
Liens
- Front de Libération des FPGA soutenez la lutte ✊
- mon shaarli Mon shaarli (partage de liens)
Moi
- ARMadeus Systems La multinationnale de Linux embarqué
- ENSEIRB La meilleurs école du monde
- Mon précédent petit coin de web L’ancien site
Étiquettes
- alsace
- ARMadeus
- bagnole
- bash
- C
- casque
- colmar
- consommation
- courant
- cuisine
- dessin
- firefoxOS
- FPGA
- gd32vf
- geek
- gps
- gravitylight
- hack
- informatique
- koyot
- linux
- livre
- longan_nano
- montagne
- nucléaire
- openstreetmap
- parapente
- photo
- politique
- programmation
- python
- raspberrypi
- risc-v
- riscv
- rust
- sécurité routière
- vim
- vosge
- vélo
- vélo couché
- web
- écologie
- électricité
- électronique
- énergie
Les 5 derniers piaillements
- admin dans Déballage du CH32V003, le microcontrôleur à 0.1$
- Justin dans Déballage du CH32V003, le microcontrôleur à 0.1$
- admin dans Déballage du CH32V003, le microcontrôleur à 0.1$
- Andelf dans Déballage du CH32V003, le microcontrôleur à 0.1$
- titof2375 dans Prise en main du kit développement XT-ZB1 (BL702)
En C il peut être utile de connaître le nombre de valeur déclarées dans un enum (au hasard pour faire une boucle d’init) :
enum MonEnum {
en_arbre,
en_fleur,
en_raisin,
}
#define MONENUM_SIZE 3
for(int i=0; i < MONENUM_SIZE; i++){
faire_un_truc((enum MonEnum)i);
}
Langage du code : PHP (php)
Mais faire un #define
avec la taille à mettre à jour à chaque fois qu’on modifie l’enum c’est pénible et on oublie facilement.
Une méthode pour éviter ça est d’ajouter une valeurs dans l’enum à la fin de la liste. Puis de la caster en Int pour récupérer la taille :
enum MonEnum {
en_arbre = 0,
en_fleur,
en_raisin,
/* tricks pour récupérer la taille */
taille_de_MonEnum,
}
#define MONENUM_SIZE ((int)taille_de_MonEnum)
for(int i=0; i < MONENUM_SIZE; i++){
faire_un_truc((enum MonEnum)i);
}
Langage du code : PHP (php)
Il est préférable de bien initialiser la première valeur à 0 pour être sûr.
L’arlesienne de l’obligation du port du casque à vélo.
Trouvé sur Mastodon ici.
Une fiche trouvée sur touitteur pour fabriquer vos propres préparations et augmenter ainsi la valeur spirituelle de vos légumes.
Un programme pour apprendre ses tables de multiplications
En primaire on commence à apprendre ses tables de multiplications. Bien sûr on se sert des parents pour les réciter avant le contrôle. Cependant, les parents ça passe leurs temps à faire des commentaires. Alors pourquoi ne pas utiliser la machine pour les réciter sans jugement ?
C’est d’autant plus facile aujourd’hui avec la multitude de langages de haut niveau disponibles. Par exemple en python on peut tartiner un programme vite fait bien fait comme cela :
import random
maxcount = 10
count = maxcount
while count != 0:
a = random.randint(2, 9)
b = random.randint(2, 9)
res = input(f"{a} x {b} = ")
if (int(res) != int(a*b)):
print(f"NAN! C'était {a*b}")
count = maxcount
else:
print("Bien")
count = count - 1
print(f"Encore {count} multiplications à trouver")
print("BRAVO \o/")
Langage du code : PHP (php)
Le programme fonctionne plutôt bien, on peut ensuite l’améliorer et ajouter des défis.
Réponse parlée
Là, il faut un clavier pour répondre, ça suppose de savoir s’en servir. Et c’est plus long pour répondre. Si on veut faire un programme basé sur la vitesse et qui évite d’avoir à connaître l’usage du clavier on peut essayer de passer par la reconnaissance vocale avec la bibliothèque open-source Vosk par exemple. Ce logiciel a l’avantage de pouvoir s’utiliser hors ligne.
L’installation de vosk est d’une simplicité biblique :
$ sudo python3 -m pip install vosk
[sudo] Mot de passe de fabien :
Collecting vosk
Downloading vosk-0.3.45-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (7.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2/7.2 MB 22.7 MB/s eta 0:00:00
Collecting tqdm
Downloading tqdm-4.65.0-py3-none-any.whl (77 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 KB 13.6 MB/s eta 0:00:00
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from vosk) (2.25.1)
Collecting websockets
Downloading websockets-11.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (129 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 129.9/129.9 KB 6.6 MB/s eta 0:00:00
Collecting cffi>=1.0
Downloading cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (441 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 441.8/441.8 KB 11.6 MB/s eta 0:00:00
Collecting srt
Downloading srt-3.5.3.tar.gz (28 kB)
Preparing metadata (setup.py) ... done
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.7/118.7 KB 8.2 MB/s eta 0:00:00
Building wheels for collected packages: srt
Building wheel for srt (setup.py) ... done
Created wheel for srt: filename=srt-3.5.3-py3-none-any.whl size=22445 sha256=5d6b0eded4562ad3cdb720ee5932cf7a7c377a463690f0cfef649372d3501355
Stored in directory: /root/.cache/pip/wheels/d7/31/a1/18e1e7e8bfdafd19e6803d7eb919b563dd11de380e4304e332
Successfully built srt
Installing collected packages: websockets, tqdm, srt, pycparser, cffi, vosk
Successfully installed cffi-1.15.1 pycparser-2.21 srt-3.5.3 tqdm-4.65.0 vosk-0.3.45 websockets-11.0.3
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Langage du code : JavaScript (javascript)
On pourra ensuite essayer de convertir un échantillon de voix lisant ’42’ :
$ vosk-transcriber -l fr -i vosk/quarante-deux.mp3 -o quarante-deux.txt
vosk-model-small-fr-0.22.zip: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 40.3M/40.3M [00:02<00:00, 20.8MB/s]
LOG (VoskAPI:ReadDataFiles():model.cc:213) Decoding params beam=13 max-active=7000 lattice-beam=4
LOG (VoskAPI:ReadDataFiles():model.cc:216) Silence phones 1:2:3:4:5:6:7:8:9:10
LOG (VoskAPI:RemoveOrphanNodes():nnet-nnet.cc:948) Removed 0 orphan nodes.
LOG (VoskAPI:RemoveOrphanComponents():nnet-nnet.cc:847) Removing 0 orphan components.
LOG (VoskAPI:ReadDataFiles():model.cc:248) Loading i-vector extractor from /home/fabien/.cache/vosk/vosk-model-small-fr-0.22/ivector/final.ie
LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:183) Computing derived variables for iVector extractor
LOG (VoskAPI:ComputeDerivedVars():ivector-extractor.cc:204) Done.
LOG (VoskAPI:ReadDataFiles():model.cc:282) Loading HCL and G from /home/fabien/.cache/vosk/vosk-model-small-fr-0.22/graph/HCLr.fst /home/fabien/.cache/vosk/vosk-model-small-fr-0.22/graph/Gr.fst
LOG (VoskAPI:ReadDataFiles():model.cc:308) Loading winfo /home/fabien/.cache/vosk/vosk-model-small-fr-0.22/graph/phones/word_boundary.int
INFO:root:Recognizing vosk/quarante-deux.mp3
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:{'partial': 'quarante-deux'}
INFO:root:File quarante-deux.txt processing complete
INFO:root:Execution time: 0.766 sec; xRT 0.426
$ cat quarante-deux.txt
quarante-deux
Langage du code : JavaScript (javascript)
Bon pour le «offline» c’est pas tout à fait ça puisqu’il faut quand même télécharger le modèle pour la langue (ici ‘-l fr’ pour français). Mais, une fois téléchargé il n’y a plus à y revenir.
Testé sur d’autre échantillons ça marche relativement bien. Il nous reste quelque problèmes:
- Nous avons utilisé un échantillon sonore enregistré. Notre objectif est de pouvoir «écouter» la réponse sans avoir à utiliser le clavier.
- Le résultat est donné en texte, il va donc falloir le convertir en nombre.
test_microphone.py
Le projet Vosk propose un script en python pour tester son microphone. Ce script transcrit en temps réel le texte reconnue.
On peut reprendre le script et modifier la boucle d’affichage du texte pour convertir en nombre le texte reconnue puis vérifier que le calcul est bon.
Ça tombe bien car en python il y a un module qui fait la conversion texte en nombre : text2num
Text2num
Convertir un texte en un nombre est chose facile avec text2num:
$ sudo python3 -m pip install text2num
Collecting text2num
Downloading text2num-2.5.0.tar.gz (38 kB)
Preparing metadata (setup.py) ... done
Building wheels for collected packages: text2num
Building wheel for text2num (setup.py) ... done
Created wheel for text2num: filename=text2num-2.5.0-py3-none-any.whl size=58681 sha256=fd5ff29e88655c69c08cee37608129ffd7fbbed2cc96ef59ddc9ce4b77443bda
Stored in directory: /root/.cache/pip/wheels/49/b2/af/5db9aefd179867bbae782e4e1aefa78490377f561b4c97f34e
Successfully built text2num
Installing collected packages: text2num
Successfully installed text2num-2.5.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
Langage du code : JavaScript (javascript)
L’utilisation se fait de la manière suivante (dans une console ipython):
In [2]: from text_to_num import text2num
In [3]: text2num("quarante-deux", "fr")
Out[3]: 42
Langage du code : JavaScript (javascript)
Il reste à ajouter le module json de python pour convertir la sortie texte et nous avons notre squelette de programme de récitation des multiplications :
rec = KaldiRecognizer(model, args.samplerate)
count = MAX_OPERATION_NB
while count != 0:
print(f"Courage, plus que {count} opérations")
a = random.randint(2, 9)
b = random.randint(2, 9)
print(f"Combien font {a} x {b} ?")
while True:
data = q.get()
if rec.AcceptWaveform(data):
res = rec.Result()
textvalue = json.loads(res).get("text", None)
if textvalue is not None:
response = my_text_2_num(textvalue)
if textvalue.strip() == "":
print("alors ?")
elif response < 0:
print(f"J'ai pas compris ({textvalue})")
else:
print(f"(Ta réponse «{textvalue}» -> {response})")
if response == a * b:
print("Bien")
count -= 1
break
else:
print("Raté")
count = MAX_OPERATION_NB
break
Langage du code : PHP (php)
Le script quick & dirty est disponible sur mon dépot github. Le système fonctionne étonnamment bien, même avec un vieux lenovo Thinkpad T430.
Maintenant que le principe est validé on va pouvoir «gamifier» tout ça et faire de super jeux 🙂
Mais c’est une autre histoire.
Publié dans Non classé
Marqué avec multiplication, python, reconnaissance-vocale, vosk
Laisser un commentaire
.bashrc
# ouvrir un onglet de terminal dans le même répertoire
[[ -s "/etc/profile.d/vte.sh" ]] && . "/etc/profile.d/vte.sh"
Langage du code : PHP (php)
On devrait graduer les biberons en heures de sommeil et pas en mL.
L’arbre de la résidence voisine est vexé d’avoir été taillé : il fait des fuck à tout le monde !
Pour la prise en compte du Vélo dans la mise en 2×2 voies du contournement ouest de Colmar
Le CADR Colmar relais l’information d’Exa’Pousse :
——– Message du Cadr Colmar —————-
Amis cyclistes bonjour,
Nous relayons une information du collectif d’Eguisheim « Exa’Pousse », qui concerne tous les habitants de Colmar et environ…
Mardi 14 mars, Réunion publique à l’Arthuss à Wintzenheim à 18h30.
———- Forwarded message ———
Cher(ères) amis(es),
Vous savez que le projet de mise à 2X2 voies de l’axe routier D83 (contournement ouest de Colmar de Logelbach à Ricoh) est maintenant concret, la concertation publique est lancée, même si chacun pourra se poser la question de la cohérence d’une telle réalisation en 2023…
(Voir pour cela l’article DNA du 05/03/2023)
Depuis le début des réflexions sur ce contournement, Exa’Pousse (anciennement Eguisheim en Transition) est présent dans les instances pour faire entendre l’urgence de relier à vélo, de manière sécurisée, Eguisheim à Colmar.
Nous avons proposé un passage souterrain et la CEA, convaincue, a repris notre projet dans ses dernières présentations. Les services techniques de la CEA soutiennent fermement cette option, cependant il n’y a pour l’instant aucune délibération actée et le projet présenté dans les journaux n’indique pas ce passage inférieur pour rejoindre Colmar à Eguisheim à vélo.
C’est à nous tous de nous mobiliser, amis, voisins, famille, piétons, usagers du vélo et acteurs pour un monde avec moins voitures… pour nous faire entendre et appuyer ce projet de souterrain.
Il est indispensable de participer aux actions suivantes :
– de manière collective :
Mardi prochain 14 mars, présence à la réunion publique organisée à l’Arthuss à Wintzenheim à 18h30.
– de manière individuelle :
En se présentant à la mairie pour écrire nos doléances dans le registre prévu dans le cadre de l’enquête publique.
(horaires d’ouverture de la Mairie : Lundi, Jeudi, Vendredi : 10h-12h30 / 13h30-15h30, Mardi : 7h45-12h30 / 13h30-17h, Mercredi matin : 10h-12h)
Voici les idées et motivations à développer dans le registre pour défendre le projet du passage souterrain sécurisé :
– favoriser le déplacement à vélo vers Colmar de manière rapide et sécurisée
– franchissement de la RD 83 de manière sécurisée (à la place du rond-point des noyers particulièrement dangereux)
– poursuivre la piste cyclable venant du sud pour rejoindre Colmar, cohérence du réseau cyclable
– favoriser le tourisme vert
– diminuer la place de la voiture à Eguisheim, Colmar, et par la même la problématique du stationnement
Amicalement
L’équipe Exa’Pousse