Una setmana barallant-me amb el #Pitxu per millorar l'entrada d'àudio, per al final descobrir que el Mac amb el que programo no li agrada grabar en 16 knHz.

Estic intentant filtrar el so per tal de millorar l'àudio d'entrada, per a que la transcripció s'entengui millor i el chatbot et respongui el que toca.

... i els filtres no em funcionaven. Res. I em vaig liar a dibuixar gràfiques de so, espectrogrames, i tot de conversions matemàtiques, I fins que no vaig caure en guardar el so i escoltar-me, no em vaig adonar que el so d'entrada era horrible.

"Això sembla un error en la freqüència"... Així que vaig tornar a deixar la freqüència a 48 kHz que al Mac li agrada grabar i vinga, tot encaixa.

Així que ja torno altra cop a l'inici, a filtrar el so, i veure si puc fer que l'àudio d'entrada quedi net de soroll de fons.

... en Python, que ja té tela.

Diguem que estic a punt de marcar un bon milestone amb el projecte #Pitxu.

A falta del botó extern d'encesa, que encara no sé on posar, la cosa hauria d'acabar així.

Hi han "side quests" pendents, com mirar de fer funcionar el tàctil de la pantalla i tenir accions directes (com que calli quan entra en una explicació llarga fora de tema, o conectar a una wifi que no tingui predefinida)

El tema ventilació m'ha portat de cap, però sembla estable a 50°C.

Deixo aquí una demo ràpida. Perdoneu la diferència de volum entre els dos interlocutors, a casa estan tots dormint.

Marededéusinyó, 4 dies per fer que els ventiladors de la caixa del #Pitxu funcionin a diferents velocitats segons la temperatura, i en silenci.

He après molt aquesta dies. A nivell més de vida, aquest típic soroll d'aparell elèctric (el típic que ens fa canviar-lo per vell) és degut a que emet una freqüència audible, moltes vegades per error, com era el meu cas

Primer he conectat els ventiladors. Funcionen al 100%.
Després el pin de control. Tirar de llibreria GPIO per encendre'ls i apagar-los a certa temperatura.
Després aprendre d'Hysteresis, que és això de que ventili fins mes abaix del llindar per què no s'estigui encenent i apagant cada 5 segons.
Després convertir-lo a PWM, que permet variar la velocitat per que faci menys soroll.
Descobrir com funciona, i que a freqüències baixes el "zumbit" toca els ous. Massa.
Aprendre que s'ha d'usar una freqüència no-audible (~25kHz), i que la llibreria que uso explota a més de 10kHz, i el soroll no mola.
Resulta que totes les llibreries Python fan PWM per software, cal fer-ho per hardware.
La mare que va parir el Kernel de Linux, els overlays, i sa puta mare.

M'he fet un overlay jo mateix, ja tinc els canals que necessito, i ja puc moure els ventiladors a la freqüència que vull.

El #Pitxu ja respira en silenci, i prèn grans bocanades d'aire quan ho necessita.

Entre la millora del micro, el que estic cohent per canviar de #Vosk a #Whisper, i que el hardware aguanti com toca tota la infra, ja començo a tenir ganes de posar-me amb els models altra cop.

@techsimplified it is, completely! I find that having my hands free to do actions (and queries) is indeed a game changer. I'm just bumping my head to make the STT to work smooth.

This project in the pic is a satellite device from my main #Pitxu ongoing built, chaining STT > Chatbot > TTS. As a satellite, it just captures sound, sends it to the "server" and plays the answer. It is a #RaspberryPiZero2 so it can't really hold all the engines needed.

As per tooling, the whole pack uses:
- #Vosk (now tinkering with #Whisper)
- #Gemini (now tinkering with #Ollama offline)
- #Piper

But a big chunk of my brain goes to the UX hardware:
- screen for a more human interaction
- soundcard I/O (gosh RPi is not yet polished here)
- GPIO buttons, UPS, PWM fan cases,...

Provant el #Pitxu amb diferents combinacions de hardware m'ha portat a descobrir que m'agrada el format #RaspberryPiZero2 + UPS + #WhispayHat, que em dóna el més bàsic per tenir un mini-ordenador autònom amb so i pantalla (i un botó). És molt contingut i portable, se li pot fer una caixeta amb una impressora 3D (fàcil ) i pot quedar molt cuco.

Passa que no tira. Els models de STT i TTS s'encallen, i el Chatbot #Gemini ja el fregeix del tot. Ni l"overclock ni la swap han ajudat gaire.

Avui parlant amb el @miguelflorido ha sortit la idea d'aixecar uns endpoints al Pitxu, per que executi la transcripció #speechtotext i la resposta del #chatbot. Així, el que carrega més la màquina ho fa la RPi5 amb el #AIHat+2, i la RPiZ2W fa de simple client grabant àudio, reproduint la veu, i mostrant per pantalla. El reste ho envia per HTTP.

En un parell d'hores he tingut un #Flask en un thread escoltant peticions, i les proves amb el #Postman són molt bones a la Wifi de casa.

Em molaria molt tenir un #miniPitxu a la butxaca.

El #Pitxu està millorant molt. Aquestes últimes setmanes han estat la primera baralla seria amb el hardware.

Tot comença per un bon input. Si el micròfon o el dictat no funciona bé, ja pots tenir un chatbot de puta mare que la experiència d'usuari serà pèssima.

I el sabor de boca de les demos que he fet fins ara són totes d'experiència d'usuari. Lent i poc acurat per entendre't. Si t'adaptes tu, llavors alucines, però no és natural.

Estic estirant l'entrar a sac al tema dels models offline per millorar el tema input abans. I no serà per ganes de fotre-li mà al #RaspberryPiAiHat+2 que tinc ja endollat.

Ostia puta l'ALSA, el PulseAudio, el PortAudio, i la mare que els va parir a tots.

Una puta setmana per entendre i posar pau al sistema de so al #Pitxu.

Al final, enviant a la merda el PulseAudio, deixar el sistema només amb ALSA, i que el Python circuli per PortAudio.

I com a bonus, fixar els índexs de les Targes de So per què el ALSA no em trolegi a cada reinici del sistema.

Ostia ja!

L'altre dia, fent una mica d'espeleologia cibernètica, vaig trobar un paio que havia fet quelcom similar al #Pitxu en un format més petit.

Feia servir un #PiSugar #Whisplay HAT en una #RaspberryPi5 i una imatge que ells mateixos distribueixen: baixar, cremar en una SD i au, i funcionava prou bé.

M'he adonat que fa uns mesos jo també vaig comprar un Whisplay HAT per un altre projecte, i ara en un calaix. Vaig muntar-lo sobre una altra RPi 5 que tinc per aquí, clonar el codi del Pitxu, anular tot el que no tinc (e-ink i Matriu de LEDs) i a probar...

Marededéusinyó, ara tinc 2 Pitxus... Aquest petit necessita que li programi la pantalla, que només parla i escolta, però funciona!!!!

Estic entusiasmat amb aquest projecte #Pitxu que estic fent. Ja sóc capaç de mantenir una conversa on m'explica quin problema tinc amb la potència i la impedància entre la tarja de so i els altaveus passius, li discuteixo les solucions, i em proposa alternatives. Al final, li demano que m'envii un resum de la conversa al mail i ho llegeixo després amb calma per posar fil a l'agulla.

Amb converses així, amb en #Pitxu, ja he solucionat uns quants problemes, donant-me ell mateix la solució.

El viatge de tornada de Nadal va ser la "demo d'entrega" per al projecte #kleine. Rep senyal de GPS, genera un track en KML de la ruta, mostra la velocitat i l'altura, s'encén i s'apaga com toca, i el sistema és prou estable per la fase de test i elucubracions noves.

Torno al #Pitxu per liar-me amb #Ollama, i a part del fustre del rendiment dels LLMs a la Raspberry (dóna per article apart), he descobert uns bugs que no esperava

He acabat pagant el primer Paid Tier de Gemini per saber quin és el cost real de tenir un #chatbot sempre encès, mentre segueixo l'odissea de fer-ho offline 100% amb #Ollama.

...i mentre ho intento, aquests bugs tontos que surten del no-res em fan la guitza.

Només em faltava que la Núria ha tingut la primera trobada al el Pitxu i li ha agafat por. No li agrada, suposo que és la matriu de leds vermells i la fisonomia de cara que igual no és la més children-friendly.

Aix, la vida del developer d'estar per casa.