Arxiu de la categoria: Raspberry Pi

L’hora catalana amb Festival (TTS, text to speech)

Estic treballant en un Magic Mirror, que li vull dotar de funcions de reconeixement de veu (STT, amb Pocketsphynx) i síntesi de veu (TTS, amb Festival). Vull que sigui un projecte una mica de cachondeo, i vull escollir bé els mòduls a instal·lar, i també programar-ne un.

Una cosa divertida que havia pensat és un mòdul que et digui l’hora catalana:

-Magic Mirror (li posarem un nom divertit), quina hora és?
-Són dos quarts i cinc de vuit.

He estat treballant amb el Festival (que s’instal·la sense problemes en una Raspberry Pi) i integrar-ho tot amb Node/Javascript, que és la tecnologia que utilitza MagicMirror.

En el video hi ha una mostra del que volem aconseguir:

Referències:

Tornem amb el OpenCV: detectar rectes

Després d’un temps sense fer res amb OpenCV, reprenc el projecte antic de l’aplicació de les rectes i cercles. M’explico, es tracta de fer un concurs per a nens per avaluar si són capaços de fer rectes i cercles perfectes. El problema és que ara la Maria i el Pere ja tenen 14 i 10 anys, potser ja són una mica ganàpies per això. Però cap problema, ho farem igualment amb d’altres nens més petits que tenim pel voltant.

Continuaré programant amb C++, per allò de programar més ràpid, però sóc conscient de què la mateixa aplicació la podríem fer amb Python, llenguatge amb què he programat bastant últimament.

Mostrem una captura on es veu clarament com detectem les rectes, dibuixem la recta de millor ajustament, i mostrem el valor de la correlació que ens dóna el valor de com és de bona la recta dibuixada. El següent pas serà fer el mateix amb cercles.

Magic Mirror amb la Raspberry Pi (Smart Mirror)

Aquest és un projecte divertit i senzill per fer amb la Raspberry Pi, molt adient ara per l’estiu. He estat configurant la Raspberry Pi i els diferents mòduls del projecte MagicMirror, i ja puc mostrar el video de com quedarà tot plegat. De totes maneres, el projecte l’hauré d’acabar més endavant quan decidim on podem col·locar el mirall i les dimensions que tindrà, doncs veig que comprar el 2-way mirror és la part més delicada, i un mirall ben gros se’n va del pressupost.

Un dels objectius per realitzar aquest projecte és que últimament m’estic conscienciant molt de com de malament parlem la nostra llengua (el català) i de com s’ha empobrit en general. Per tal de recuperar les expressions més genuïnes (defugint el calc del castellà allà on sigui possible), hi ha tot un moviment de conscienciació. Jo vull aportar el meu granet de sorra fent aquest mirall màgic que ens donarà una lliçó de bon català cada cop que ens mirem al mirall, per exemple quan ens rentem les dents.

Un dels mòduls per defecte de MagicMirror és la sindicació de continguts per tenir els titulars de les notícies del dia. Per exemple, el meu mirall està suscrit al diari ARA. Doncs bé, he adaptat aquest mòdul per crear el meu mòdul propi de MagicMirror (el_catala_com_cal). Ha estat bastant fàcil. Només cal crear i editar un fitxer XML amb les lliçons de català que vull visualitzar. De moment és això: un fitxer estàtic que hauré d’editar cada cop que vulgui afegir contingut.

Detecció dels dards: Primeres proves

Ja tinc el prototipus del moble, i ja puc començar a fer proves per a detectar els dards. Com es veu al video, la detecció és molt bona. Si ens fixem en la configuració, la webcam està en el mateix pla XY que la diana. Això crec que té avantatges en la detecció del dard; i desavantatges: necessitaré 2 webcams, i possiblement 3 webcams per posicionar amb fiabilitat el dard en la diana.

Utilitzem la llibreria OpenCV sobre C++, i el flux bàsic consisteix en fer una captura de la webcam; llençar el dard; i fer una altra captura. Aleshores es fa la diferència de les imatges; es converteix a binari; s’aplica una màscara per eliminar bona part del dard. En aquest moment hem de veure la part de baix del dard, i ben clarament la punta. Tenim un número limitat de punts blancs. Amb aquests punts calculem el moment, que seria el centre de gravetat dels punts. I fent un bucle sobre tots els punts puc detectar el punt més inferior, que seria la punta del dard. Finalment, per eliminar possibles errors, calculo la distància entre la punta i el moment, que ha de ser un valor petit.

Encara queda molta feina per fer. D’una banda, s’ha de traduir la detecció del dard als possibles sectors on està el dard. Després afegir una altra webcam. I si afegeixo una tercera webcam, segurament necessitaré algun USB Hub. L’objectiu és utilitzar una sola Raspberry Pi 3 en tot el projecte.

Prototipus de diana de dards II

Fa uns dies vaig construir el primer prototipus de moble, i ja vam fer unes quantes proves per detectar els dards. He tret bastantes conclusions del primer prototipus, i he arribat a la conclusió de què s’ha de fer un nou moble, amb unes noves dimensions.

La primera consideració és la distància de la webcam a la diana. Amb la webcam amb què estic fent les proves (Creative Live! Cam Sync HD), la distància de la webcam al centre de la diana ha de ser com a mínim de 46 cm. Un altre tema important és que el pla de la càmera ha de coincidir exactament amb el pla XY de la diana (aquesta és la manera com jo abordo la posició de les càmeres, evidentment necessitaré dues càmeres, o potser tres). La il·luminació ha de ser uniforme, i sobretot, la construcció ha de ser sòlida. La clau està en què quan faig la sostracció entre una captura i la següent (en la què s’ha llençat un dard), la diferència entre les imatges ha de ser realment la detecció del nou dard (no ha d’haver-hi cap mena de soroll).

Ja he estat fent proves amb el nou prototipus, i val a dir que els resultats han estat molt bons (faré un post i un video properament), o sigui que puc afrontar amb optimisme la part més crítica del projecte.

Com es veu en la imatge, la idea que tinc del moble és integrar una pantalla de 15 polzades just a a sota de la diana, i ficar-hi també els tres o quatre botons que necessitaré per interactuar amb el software. La part del software la tinc bastant avançada, però ara m’he de centrar més en la detecció dels dards.

Un altre tema que he de fer els propers dies és convertir la posició del dard a la puntuació de la diana. No cal dir que amb una sola càmera (en el mateix pla XY que la diana) això és impossible, es necessitaran dues càmeres mínim.

Prototipus de diana de dards amb bona il.luminació

A veure si dono una empenta al projecte de la diana electrònica. He avançat bastant en el software. Vaig fer proves en el seu dia amb la llibreria OpenCV, i ara és el moment d’atacar la part crítica del problema, que és la detecció fiable dels darts.

Com que el problema és bastant crític, el primer serà tenir la diana amb unes condicions de llum ben controlades, amb il·luminació uniforme i sense ombres. Per fer-ho, he fet una estructura de fusta amb tira de LEDs pels costats, com es veu a la foto. El següent pas serà aconseguir unes webcams decents. De moment les proves les he fet amb una webcam molt senzilla amb resolució de 480px. Estic esperant una webcam de 720px, que a part d’una millor resolució espero que tingui una millor qualitat. Finalment també disposo d’una RaspiCam NoIR (la càmera d’infrarrojos pròpia de la Raspberry Pi). Aquesta sí que té una bona resolució i qualitat, el problema és que no és USB, i per tant en una Raspberry Pi només hi pot haver una càmera RaspiCam.

La meva idea inicial és utilitzar una sola Raspberry Pi 3, amb dues webcams USB connectades. Es tracta d’anar fent proves i anar controlant totes les variables i causístiques que es puguin donar. Per sort, en tot aquest procés no estic sol, sinó que hi ha més gent engrescada en la construcció d’una diana eletrònica amb dards de punta de ferro. Concretament el projecte https://github.com/hanneshoettinger/opencv-steel-darts i la discussió que es genera en el grup de Facebook de https://www.facebook.com/groups/281778298914107/. Feia anys que no entrava al Facebook, ja veig que les properes setmanes seré un assidu.

Ja aniré explicant les meves aventures i avenços.

Nova màquina: recreativa arcade vertical

Aquesta setmana he acabat una nova màquina, una recreativa vertical. Curiosament, és la segona que faig seguides. A mi aquest format m’agrada molt, ja veig que no sóc l’únic.

Com a novetat, he mirat de perfeccionar el tema del vidre que protegeix la pantalla, i el vidre del marquee retroil·luminat. La idea és que amb la fresadora s’ha de fer ranures, i el vidre va encastat dins d’aquestes ranures. El vidre es pinta per darrere, seguint el marc de la pantalla. Queda un resultat molt professional.

recreativa dards v0.0.8

Ja tinc ganes de fer aquesta nova recreativa: una màquina de darts amb detecció automàtica dels darts i la seva puntuació. Però no dards amb punta de plàstic. Ha de ser un dartboard original de suro amb dards de punta metàl·lica.

Per a la detecció dels dards hi havia la possibilitat d’utilitzar una malla resistiva i poder posicionar on llencem els dards. Però crec que no seria de fiar. El millor serà utilitzar visió per computadora amb OpenCV. Ja parlaré sobre el tema més endavant.

De moment he estat treballant amb la lògica dels diferents jocs de dards que hi ha. Els més populars són: 301, 501, Count Up, Cricket, Round the Clock, Halve it. I ara ja puc presentar la primera versió de l’aplicació, no funcional, que només funciona a la consola de Linux. Aquesta versió simula partides reals de fins a 4 jugadors: primer esculls el joc; després número de jugadors; després assignes els usuaris; comencem a jugar al joc seleccionat passant per les diferents rondes (cada ronda són tres tirades dels dards). I així anem registrant la puntuació fins que arribem al guanyador.

En les següent versions del programa (escrit amb C++) s’haurà d’implementar tota la part de OpenCV, i finalment tota la part de SDL (llibreria gràfica). Tot haurà de córrer en una Raspberry Pi 3, de manera que el desenvolupament el faig en el portàtil, però assegurant la portabilitat a la RPi3. Aquest hauria de ser el projecte estrella d’aquest semestre. És una idea que em persegueix de fa tres anys. De fet no és una idea original, hi ha diversos projectes que utilitzen dards amb punta de ferro i taulells de suro o fibra, en comptes de les dianes electròniques amb puntes de plàstic. Potser ara el projecte més similar seria open-cv-steeldarts, que s’està desenvolupant amb Python i que encara no és plenament funcional. Li donaré una ullada sobretot pel tema de la calibració i detecció dels dards.

Enllaços:

Joc del Simon. Extraescolar de Robòtica al Balmes

Ja hem acabat l’extraescolar de Robòtica al Balmes. Aquest any hem programat el joc del Simon amb una Raspberry Pi. Tota la documentació (i la programació didàctica) està a la wiki [1].

Durant aquestes 13 sessions hem anat treballant sobre diferents temes, que ens portaven a l’objectiu final de fer un prototipus de Simon:

  • Hem programat el script amb Python, viatjant per les diferents versions a mida que necessitàvem incorporar noves funcionalitats.
  • Hem connectat botons i LEDs als pins GPIO de la RPi.
  • Hem vist com, utilitzant transistors, podem disparar des dels pins GPIO senyals de 12V per encendre tires de LEDs blancs.
  • Hem discutit sobre l’alimentació de tot el sistema, i alternatives.
  • Hem discutit sobre com produir el so i la seva amplificació.
  • Hem dissenyat el moble final, utilitzant eines de fabricació digital com l’impressora 3D i la fresadora CNC.

Al final ha sigut un curs molt multidisciplinar, hem tocat moltes coses, tot i que per manca de temps, coneixements i d’infraestructura, moltes coses les ha implementat el professor i les ha mostrat a classe. Però al final l’experiència ha sigut enriquidora per tots.

El resultat final es pot veure a la foto i en aquest video:

Referències:

Amstrad PCW8256. Provant l’emulador Joyce



Aquests últims dies he reviscut l’ordinador Amstrad PCW8256 que teníem per casa els cap al 1986. El feia servir el meu pare per escriure, però també el féiem servir pels treballs de l’insti. Anava amb una pantalla monocroma verda, el teclat i la impressora d’agulles. Tota l’electrònica estava en el monitor, fins i tot la placa de l’impressora. I en el monitor també hi havia la disketera de 3”, que tenia dues cares.

He instal·lat el Joyce a la Raspberry Pi, i m’ha agradat molt reviure aquest sistema. Evidentment, s’ha d’escollir l’opció de lletres verdes, simulant la pantalla de fósfor verd.

L’ordinador venia amb dos disketes, que eren discs d’arrencada. El primer era el CP/M, el sistema operatiu, des del qual es podia accedir a l’intèrpret de Basic (Mallard Basic). El segon diskette, també bootable, era el Locoscript, que és el processador de textos amb què venia. He fet un document amb LocoScript sobre els rius de Catalunya, simulant com si fos un treball de l’insti.

També he jugat una estona al Tetris. L’emulador emula molt bé la màquina original. Si vols jugar al Tetris, has de fer eject del disket inserit (el CP/M)(el SO ja està carregat a la RAM), i ficar el disket del Tetris (Insert). Aleshores, ja des de la línia de comandes, ja es pot cridar a l’executable i jugar al Tetris, com es veu en la imatge.

Quins temps aquells! El link a la wiki: