Diferència entre revisions de la pàgina «STT: Transcripció àudio català (i castellà)»

De wikijoan
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «__TOC__ <pre> https://chatgpt.com/c/6aac108b-6940-83eb-9972-d8f7e76eefa2 sudo apt install ffmpeg ho hem de fer en un venv: mkdir model-whisper cd model-whisper pyth...».)
 
 
(Hi ha una revisió intermèdia del mateix usuari que no es mostren)
Línia 1: Línia 1:
 
__TOC__
 
__TOC__
−
<pre>
+
=Whisper=
−
https://chatgpt.com/c/6aac108b-6940-83eb-9972-d8f7e76eefa2
 
  
−
sudo apt install ffmpeg
+
* https://chatgpt.com/c/6aac108b-6940-83eb-9972-d8f7e76eefa2
  
 
ho hem de fer en un venv:
 
ho hem de fer en un venv:
−
 
+
<pre>
 
mkdir model-whisper
 
mkdir model-whisper
 
cd model-whisper
 
cd model-whisper
Línia 14: Línia 13:
 
() pip install -U pip
 
() pip install -U pip
 
() pip install -U openai-whisper
 
() pip install -U openai-whisper
−
 
+
</pre>
 
i ara ja podem fer una transcripció:
 
i ara ja podem fer una transcripció:
−
per posar el fitxer t0001.wav al servidor, recordem que tenim una unitat muntada en el portàtil: ~/servidorIA
 
  
−
hem de mirar si ja el tenim muntat:
+
==Recordatori punt de muntatge==
 +
per posar el fitxer t0001.wav al servidor, recordem que tenim una unitat muntada en el portàtil: ~/servidorIA. Hem de mirar si ja el tenim muntat:
 +
<pre>
 
mount | grep servidorIA
 
mount | grep servidorIA
 +
</pre>
  
 
si no està muntat el muntem:
 
si no està muntat el muntem:
 +
<pre>
 
$ sshfs joan@192.168.1.184:/home/joan/projectes ~/servidorIA
 
$ sshfs joan@192.168.1.184:/home/joan/projectes ~/servidorIA
 
$ sshfs joan@79.156.157.3:/home/joan/projectes ~/servidorIA2 -p 2222
 
$ sshfs joan@79.156.157.3:/home/joan/projectes ~/servidorIA2 -p 2222
−
 
+
</pre>
 
i si no es pot muntar perquè el directori no està buit, podem eliminar el contingut:
 
i si no es pot muntar perquè el directori no està buit, podem eliminar el contingut:
 +
<pre>
 
rm -rf ~/servidorIA/*
 
rm -rf ~/servidorIA/*
−
 
+
</pre>
−
i aleshores ja podem muntar
+
i aleshores ja podem muntar. O bé millor muntar-ho sense haver d'eliminar el contingut:
−
 
+
<pre>
−
o bé millor muntar-ho sense haver d'eliminar el contingut:
 
 
sshfs -o nonempty joan@192.168.1.184:/home/joan/projectes ~/servidorIA
 
sshfs -o nonempty joan@192.168.1.184:/home/joan/projectes ~/servidorIA
−
 
+
</pre>
 
per desmuntar-lo:
 
per desmuntar-lo:
 +
<pre>
 
fusermount -u ~/servidorIA
 
fusermount -u ~/servidorIA
 +
</pre>
  
−
i en el servidor:
+
i en el servidor copiem el wav de la carpeta compartida al directori de treball:
 +
<pre>
 
$ mv /home/joan/projectes/t0001.wav .
 
$ mv /home/joan/projectes/t0001.wav .
 +
</pre>
 +
==Executar whisper==
 +
I ara ja podem fer la transcripció:
 +
<pre>
 
whisper t0001.wav --language Catalan --model turbo
 
whisper t0001.wav --language Catalan --model turbo
 +
 
100%|██████████████████████████████████████| 1.51G/1.51G [00:14<00:00, 114MiB/s]
 
100%|██████████████████████████████████████| 1.51G/1.51G [00:14<00:00, 114MiB/s]
 
[00:00.000 --> 00:01.160]  Gràcies per ser amb nosaltres.
 
[00:00.000 --> 00:01.160]  Gràcies per ser amb nosaltres.
Línia 47: Línia 57:
 
[00:14.160 --> 00:17.600]  perquè són persones que no sabem mai escoltar-nos.
 
[00:14.160 --> 00:17.600]  perquè són persones que no sabem mai escoltar-nos.
 
...
 
...
 +
</pre>
  
 +
<pre>
 
whisper t0001.wav --language Catalan --model turbo --output_format txt
 
whisper t0001.wav --language Catalan --model turbo --output_format txt
 +
</pre>
  
−
amb un script python: prova_whisper.py:
+
Amb un script python: ''prova_whisper.py'':
  
 +
<pre>
 
import whisper
 
import whisper
  
Línia 62: Línia 76:
  
 
print(result["text"])
 
print(result["text"])
−
 
+
</pre>
 +
<pre>
 
$ python3 prova_whisper.py
 
$ python3 prova_whisper.py
 +
</pre>
  
 
I una cosa important si el que busques és català amb la màxima qualitat
 
I una cosa important si el que busques és català amb la màxima qualitat
Línia 70: Línia 86:
  
 
Per instal·lar aquest model:
 
Per instal·lar aquest model:
 +
<pre>
 
() pip install torch transformers accelerate
 
() pip install torch transformers accelerate
 +
</pre>
  
−
creem el fitxer nano transcribe.py:
+
creem el fitxer ''transcribe.py'':
−
 
+
<pre>
 
import torch
 
import torch
 
from transformers import pipeline
 
from transformers import pipeline
Línia 88: Línia 106:
  
 
print(result["text"])
 
print(result["text"])
−
 
+
</pre>
 +
<pre>
 
$ python3 transcribe.py  
 
$ python3 transcribe.py  
 
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
 
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
Línia 95: Línia 114:
 
model.safetensors.index.json: 100%|███████████████████████████████████████████████████
 
model.safetensors.index.json: 100%|███████████████████████████████████████████████████
 
...
 
...
 +
</pre>
 
el primer que fa és descarregar el model
 
el primer que fa és descarregar el model
  
 
ValueError: You have passed more than 3000 mel input features (> 30 seconds) which automatically enables long-form generation
 
ValueError: You have passed more than 3000 mel input features (> 30 seconds) which automatically enables long-form generation
 +
 
(li he passat un àudio de més de 30 segons, però funcionaria).
 
(li he passat un àudio de més de 30 segons, però funcionaria).
 +
 
Ho provo amb el /home/joan/projectes/NLP_catala/gravar_so_intern/samples/t0014/c993.wav i funciona correctament: el número de seguidors a youtube en directe
 
Ho provo amb el /home/joan/projectes/NLP_catala/gravar_so_intern/samples/t0014/c993.wav i funciona correctament: el número de seguidors a youtube en directe
  
 
la segona vegada que ho executo ja no caldrà descarregar el model. El que fa és carregar els pesos del model. Recordar que estic treballant en un venv, amb tots els avantatges que això comporta.
 
la segona vegada que ho executo ja no caldrà descarregar el model. El que fa és carregar els pesos del model. Recordar que estic treballant en un venv, amb tots els avantatges que això comporta.
−
</pre>
 
  
−
{Autor}, octubre 2026
+
{{Autor}}, octubre 2026

Revisió de 20:00, 10 oct 2026

Whisper

ho hem de fer en un venv:

mkdir model-whisper
cd model-whisper
python3 -m venv whisper-env
source whisper-env/bin/activate

() pip install -U pip
() pip install -U openai-whisper

i ara ja podem fer una transcripció:

Recordatori punt de muntatge

per posar el fitxer t0001.wav al servidor, recordem que tenim una unitat muntada en el portàtil: ~/servidorIA. Hem de mirar si ja el tenim muntat:

mount | grep servidorIA

si no està muntat el muntem:

$ sshfs joan@192.168.1.184:/home/joan/projectes ~/servidorIA
$ sshfs joan@79.156.157.3:/home/joan/projectes ~/servidorIA2 -p 2222

i si no es pot muntar perquè el directori no està buit, podem eliminar el contingut:

rm -rf ~/servidorIA/*

i aleshores ja podem muntar. O bé millor muntar-ho sense haver d'eliminar el contingut:

sshfs -o nonempty joan@192.168.1.184:/home/joan/projectes ~/servidorIA

per desmuntar-lo:

fusermount -u ~/servidorIA

i en el servidor copiem el wav de la carpeta compartida al directori de treball:

$ mv /home/joan/projectes/t0001.wav .

Executar whisper

I ara ja podem fer la transcripció:

whisper t0001.wav --language Catalan --model turbo

100%|██████████████████████████████████████| 1.51G/1.51G [00:14<00:00, 114MiB/s]
[00:00.000 --> 00:01.160]  Gràcies per ser amb nosaltres.
[00:01.760 --> 00:02.040]  Hola.
[00:02.280 --> 00:06.400]  Helen, pot ser un problema ser crònicament amables i complements?
[00:07.100 --> 00:10.580]  Sí, perquè quan parlem de ser crònicament amables i complements
[00:10.580 --> 00:14.160]  estem parlant que ens estem traient a nosaltres
[00:14.160 --> 00:17.600]  perquè són persones que no sabem mai escoltar-nos.
...
whisper t0001.wav --language Catalan --model turbo --output_format txt

Amb un script python: prova_whisper.py:

import whisper

model = whisper.load_model("turbo")

result = model.transcribe(
    "t0001.wav",
    language="ca"
)

print(result["text"])
$ python3 prova_whisper.py

I una cosa important si el que busques és català amb la màxima qualitat

Existeix també un model específic de català, whisper-large-v3-ca-3catparla, desenvolupat pel Projecte AINA, entrenat específicament per a reconeixement automàtic de veu en català.

Per instal·lar aquest model:

() pip install torch transformers accelerate

creem el fitxer transcribe.py:

import torch
from transformers import pipeline

model_name = "projecte-aina/whisper-large-v3-ca-3catparla"

pipe = pipeline(
    "automatic-speech-recognition",
    model=model_name,
    device=0 if torch.cuda.is_available() else -1,
)

result = pipe("t0001.wav")

print(result["text"])
$ python3 transcribe.py 
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
config.json: 100%|█████████████████████████████████████████████████████████████████████████████████| 1.35k/1.35k [00:00<00:00, 6.20MB/s]
pytorch_model.bin.index.json: 100%|██████████████████████████████████████████████████████████████████| 112k/112k [00:00<00:00, 35.7MB/s]
model.safetensors.index.json: 100%|███████████████████████████████████████████████████
...

el primer que fa és descarregar el model

ValueError: You have passed more than 3000 mel input features (> 30 seconds) which automatically enables long-form generation

(li he passat un àudio de més de 30 segons, però funcionaria).

Ho provo amb el /home/joan/projectes/NLP_catala/gravar_so_intern/samples/t0014/c993.wav i funciona correctament: el número de seguidors a youtube en directe

la segona vegada que ho executo ja no caldrà descarregar el model. El que fa és carregar els pesos del model. Recordar que estic treballant en un venv, amb tots els avantatges que això comporta.


creat per Joan Quintana Compte, octubre 2026