Tutorial 11: ¿Qué es Whisper AI y Cómo Funciona?

 

Tutorial 11: ¿Qué es Whisper AI y Cómo Funciona?

¡Hola y bienvenido de nuevo!

En esta lección vamos a explorar qué es Whisper AI, cómo funciona y cómo podemos aprovecharlo en nuestra aplicación. Esto nos ayudará a entender mejor la tecnología que estamos utilizando y todas sus posibilidades.


📋 Contenido del Tutorial

  1. Introducción a Whisper AI

  2. Capacidades de Whisper AI

  3. Casos de uso prácticos

  4. La API de Whisper AI

  5. Arquitectura de Whisper

  6. Comparativa con otros ASR

  7. Implementación en nuestra aplicación

  8. Próximos pasos


🤖 1. Introducción a Whisper AI

¿Qué es Whisper AI?

Whisper AI es un sistema de reconocimiento automático del habla (ASR - Automatic Speech Recognition) desarrollado por OpenAI, la misma empresa que creó ChatGPT.

Características principales

CaracterísticaDetalle
Entrenamiento680,000+ horas de datos multilingües
IdiomasSoporte para más de 100 idiomas
TecnologíaRed neuronal transformer de código abierto
PrecisiónCompetitiva con sistemas comerciales
AccesoGratuito y de código abierto

¿Cómo se entrenó Whisper?

text
1. Recopilación de datos
   ↓
2. 680,000 horas de audio multilingüe
   ↓
3. Datos de la web (públicos)
   ↓
4. Modelo transformer entrenado
   ↓
5. Capacidad de transcripción y traducción

Ventajas de Whisper

VentajaExplicación
MultilingüeFunciona en más de 100 idiomas
RobustoFunciona bien con acentos y ruido
PrecisiónComparable a sistemas comerciales
TraducciónPuede traducir a inglés automáticamente
Código abiertoGratuito y modificable
LocalSe puede ejecutar sin conexión a internet

🎯 2. Capacidades de Whisper AI

Lo que puede hacer Whisper

🎙️ Transcripción de Audio

python
# Ejemplo de transcripción simple
Audio: "Hello and welcome to my channel"
Texto: "Hello and welcome to my channel"

🌍 Traducción Automática

python
# Ejemplo de traducción
Audio (Español): "Hola, ¿cómo estás?"
Texto (Inglés): "Hello, how are you?"

📝 Generación de Subtítulos

python
# Subtítulos con marcas de tiempo
00:00:00.000 --> 00:00:05.000
Hello and welcome

00:00:05.000 --> 00:00:10.000
To my YouTube channel

Idiomas soportados

IdiomaCódigoPrecisión
EspañolesMuy alta
InglésenExcelente
FrancésfrMuy alta
AlemándeMuy alta
ChinozhAlta
JaponésjaAlta
RusoruAlta
+ 90 idiomas más-Variable

Formatos de audio soportados

FormatoExtensiónUso común
MP3.mp3Audio comprimido
MP4.mp4Video comprimido
WAV.wavAudio sin comprimir
WEBM.webmVideo web
M4A.m4aAudio avanzado
FLAC.flacAudio sin pérdida

💼 3. Casos de uso prácticos

Periodismo y Medios

javascript
// Una periodista usa Whisper para transcribir entrevistas
const entrevista = "audio/entrevista_espanol.mp3";
const transcripcion = await whisper.transcribe(entrevista);
// Resultado: Texto completo de la entrevista en español

Beneficios:

  • ✅ Sin necesidad de traductor

  • ✅ Rápido y preciso

  • ✅ Buscable y editable

Educación

python
# Un estudiante transcribe clases
lecture_audio = "clase_historia.mp3"
notes = whisper.transcribe(lecture_audio)
# Resultado: Notas completas de la clase

Beneficios:

  • ✅ Enfoque en la clase, no en tomar notas

  • ✅ Revisión posterior del contenido

  • ✅ Accesibilidad para estudiantes con discapacidad

Podcasting

javascript
// Un podcaster crea subtítulos automáticos
podcast = "episodio_100.mp3"
subtitles = whisper.transcribe(podcast, output="srt")
// Resultado: Archivo .srt para subtítulos

Beneficios:

  • ✅ Mayor alcance de audiencia

  • ✅ Contenido accesible

  • ✅ Mejor SEO

Negocios

python
# Una empresa transcribe llamadas de clientes
calls = ["llamada_1.mp3", "llamada_2.mp3"]
for call in calls:
    transcription = whisper.transcribe(call)
    analyze_sentiment(transcription)

Beneficios:

  • ✅ Mejor entendimiento del cliente

  • ✅ Análisis de sentimiento

  • ✅ Mejora de productos y servicios

Aplicaciones para discapacidad

javascript
// Ayuda para personas con discapacidad auditiva
real_time_audio = get_microphone_input();
text = whisper.transcribe(real_time_audio);
display_subtitles(text);

Beneficios:

  • ✅ Comunicación más efectiva

  • ✅ Inclusión

  • ✅ Accesibilidad


🔌 4. La API de Whisper AI

Endpoints de la API

1. Transcriptions (Transcripciones)

http
POST /v1/audio/transcriptions
Host: api.openai.com
Authorization: Bearer YOUR_API_KEY
Content-Type: multipart/form-data

{
  "audio": "@audio.mp3",
  "language": "es",
  "response_format": "json"
}

Respuesta:

json
{
  "id": "1234567890",
  "text": "Hola y bienvenido a mi canal de YouTube",
  "language": "es"
}

2. Translations (Traducciones)

http
POST /v1/audio/translations
Host: api.openai.com
Authorization: Bearer YOUR_API_KEY
Content-Type: multipart/form-data

{
  "audio": "@audio_espanol.mp3"
}

Respuesta:

json
{
  "id": "1234567890",
  "text": "Hello and welcome to my YouTube channel"
}

Parámetros de la API

ParámetroDescripciónEjemplo
audioArchivo de audio a procesar@audio.mp3
languageIdioma del audioes, en, fr
response_formatFormato de respuestajson, text, srt, vtt
temperatureCreatividad del modelo0.0 - 1.0
promptGuía para la transcripciónTexto opcional

Ejemplo de código Python

python
import openai

# Configurar la API key
openai.api_key = "YOUR_API_KEY"

# Transcribir un archivo de audio
def transcribe_audio(file_path):
    with open(file_path, "rb") as audio_file:
        transcript = openai.Audio.transcribe(
            model="whisper-1",
            file=audio_file,
            language="es"
        )
    return transcript["text"]

# Usar la función
texto = transcribe_audio("mi_video.mp4")
print(texto)

Ejemplo de código JavaScript (Node.js)

javascript
const fs = require('fs');
const { Configuration, OpenAIApi } = require('openai');

const configuration = new Configuration({
    apiKey: 'YOUR_API_KEY'
});
const openai = new OpenAIApi(configuration);

async function transcribeAudio(filePath) {
    const audioFile = fs.createReadStream(filePath);
    
    const response = await openai.createTranscription(
        audioFile,
        'whisper-1',
        undefined,
        'json',
        0,
        'es'
    );
    
    return response.data.text;
}

// Usar la función
transcribeAudio('mi_video.mp4')
    .then(text => console.log(text));

🏗️ 5. Arquitectura de Whisper

Estructura del modelo

text
┌─────────────────────────────────────────────┐
│           WHISPER AI MODEL                   │
├─────────────────────────────────────────────┤
│                                             │
│  ┌──────────────────────────────────┐       │
│  │     Audio Input (MP3, WAV)       │       │
│  └──────────────────────────────────┘       │
│                    ↓                        │
│  ┌──────────────────────────────────┐       │
│  │    Feature Extraction (Spectro)   │       │
│  └──────────────────────────────────┘       │
│                    ↓                        │
│  ┌──────────────────────────────────┐       │
│  │    Transformer Encoder            │       │
│  │    (680k horas de entrenamiento)  │       │
│  └──────────────────────────────────┘       │
│                    ↓                        │
│  ┌──────────────────────────────────┐       │
│  │    Transformer Decoder            │       │
│  └──────────────────────────────────┘       │
│                    ↓                        │
│  ┌──────────────────────────────────┐       │
│  │    Text Output (Transcripción)    │       │
│  └──────────────────────────────────┘       │
│                                             │
└─────────────────────────────────────────────┘

Tamaños de modelo

ModeloParámetrosTamañoVelocidadPrecisión
Tiny39M39 MBMuy rápidaBaja
Base74M74 MBRápidaBuena
Small244M244 MBModeradaMuy buena
Medium769M769 MBLentaAlta
Large1.5B1.5 GBMuy lentaExcelente

Procesamiento de audio

python
# Flujo de procesamiento de audio
def process_audio(audio_file):
    # 1. Cargar el audio
    audio = load_audio(audio_file)
    
    # 2. Extraer características (espectrograma)
    features = extract_features(audio)
    
    # 3. Pasar por el modelo
    predictions = model(features)
    
    # 4. Decodificar a texto
    text = decode_predictions(predictions)
    
    return text

📊 6. Comparativa con otros ASR

Whisper vs Competencia

CaracterísticaWhisperGoogle CloudAWS TranscribeAzure Speech
PrecioGratis (local)PagoPagoPago
Idiomas100+125+100+100+
PrecisiónMuy altaMuy altaAltaMuy alta
Código abierto
Offline
Traducción
Subtítulos

Ventajas de Whisper

VentajaExplicación
GratuitoNo requiere suscripción ni pago por uso
PrivacidadLos datos no salen de tu servidor
FlexibilidadPuedes modificar el código
Sin dependenciasNo necesitas conexión a internet
MultilingüeSoporte para la mayoría de idiomas

Limitaciones de Whisper

LimitaciónExplicación
HardwareRequiere CPU/GPU potente para modelos grandes
TiempoProcesamiento más lento que servicios en la nube
MantenimientoTú eres responsable del servidor
ActualizacionesDependes de la comunidad de OpenAI

💻 7. Implementación en nuestra aplicación

Estructura actual del proyecto

text
whisper/
├── backend/
│   ├── init.php
│   └── classes/
│       ├── DB.php
│       └── Whisper.php
├── files/                    # Archivos subidos
├── frontend/
│   ├── css/
│   ├── images/
│   └── js/
├── index.php
└── view.php

Cómo vamos a usar Whisper

php
// En la clase Whisper (futuro método)
public function transcribe($filePath) {
    // 1. Verificar que el archivo existe
    if (!file_exists($filePath)) {
        return false;
    }
    
    // 2. Ejecutar el comando Whisper
    $command = "whisper " . escapeshellarg($filePath) . 
               " --model small" .
               " --language Spanish" .
               " 2>&1";
    
    // 3. Capturar la salida
    exec($command, $output, $returnCode);
    
    // 4. Procesar el resultado
    if ($returnCode === 0) {
        // Leer el archivo de transcripción generado
        $txtFile = str_replace('.mp4', '.txt', $filePath);
        if (file_exists($txtFile)) {
            return file_get_contents($txtFile);
        }
    }
    
    return false;
}

Integración con la base de datos

php
// Guardar la transcripción en la base de datos
public function saveTranscription($fileId, $content) {
    $sql = "UPDATE files SET content = :content WHERE ID = :id";
    $stmt = $this->DB->prepare($sql);
    return $stmt->execute([
        ':content' => $content,
        ':id' => $fileId
    ]);
}

Ejemplo de flujo completo

text
1. Usuario sube un video (video.mp4)
   ↓
2. PHP guarda el archivo en files/
   ↓
3. PHP guarda la información en la base de datos
   ↓
4. PHP ejecuta Whisper en el archivo
   ↓
5. Whisper genera: video.txt y video.srt
   ↓
6. PHP lee el archivo .txt
   ↓
7. PHP guarda el texto en la base de datos
   ↓
8. El usuario ve la transcripción en la página

🎯 8. Próximos pasos

Lo que hemos aprendido

✅ Qué es Whisper AI y sus capacidades
✅ Casos de uso prácticos
✅ La API de Whisper AI
✅ Arquitectura del modelo
✅ Comparativa con otros ASR
✅ Cómo implementarlo en nuestra aplicación

Lo que viene en la próxima lección

En la siguiente lección vamos a:

  1. Ejecutar Whisper desde PHP

  2. Procesar el resultado de la transcripción

  3. Guardar la transcripción en la base de datos

  4. Mostrar el resultado al usuario

Avance del código de la próxima lección

php
public function transcribe($filePath) {
    // Generar nombres de archivo
    $baseName = pathinfo($filePath, PATHINFO_FILENAME);
    $txtFile = dirname($filePath) . '/' . $baseName . '.txt';
    
    // Ejecutar Whisper
    $command = "whisper " . escapeshellarg($filePath) . 
               " --model small" .
               " --language Spanish" .
               " --output_dir " . escapeshellarg(dirname($filePath));
    
    exec($command, $output, $returnCode);
    
    // Leer el resultado
    if (file_exists($txtFile)) {
        return file_get_contents($txtFile);
    }
    
    return false;
}

📖 9. Recursos adicionales

Documentación oficial

RecursoEnlace
OpenAI Whispergithub.com/openai/whisper
Documentación APIplatform.openai.com/docs/guides/speech-to-text
Paper de investigaciónarxiv.org/abs/2212.04356
Modelos preentrenadoshuggingface.co/openai/whisper

Tutoriales recomendados

  1. Python: Cómo usar Whisper con Python

  2. JavaScript: Integrar Whisper en aplicaciones web

  3. Docker: Ejecutar Whisper en contenedores

  4. GPU: Acelerar Whisper con GPU


❓ Preguntas frecuentes

¿Whisper es gratuito?

  • Sí, Whisper es de código abierto y gratuito

  • Puedes usarlo sin pagar nada

¿Necesito conexión a internet?

  • No, Whisper funciona completamente offline

  • Los datos nunca salen de tu servidor

¿Qué idiomas soporta?

  • Más de 100 idiomas incluyendo español, inglés, francés, etc.

¿Qué precisión tiene?

  • Muy alta, comparable a sistemas comerciales como Google Cloud

¿Puedo traducir automáticamente?

  • Sí, Whisper puede traducir a inglés automáticamente

¿Qué tan rápido es?

  • Depende del modelo y hardware, pero es bastante rápido en CPU modernas


🎓 Ejercicio práctico

Ejercicio 1: Probar Whisper en la terminal

bash
# Instalar Whisper
pip install openai-whisper

# Probar con un archivo de ejemplo
whisper audio_ejemplo.mp3 --model small --language Spanish

Ejercicio 2: Crear un script de prueba

python
# test_whisper.py
import whisper

model = whisper.load_model("small")
result = model.transcribe("mi_audio.mp3", language="Spanish")
print(result["text"])

Ejercicio 3: Explorar diferentes modelos

bash
# Probar diferentes modelos
whisper audio.mp3 --model tiny   # Rápido pero menos preciso
whisper audio.mp3 --model small  # Equilibrio
whisper audio.mp3 --model large  # Precisión máxima

¡Excelente trabajo! Ahora entiendes qué es Whisper AI y cómo funciona. En la próxima lección, integraremos Whisper con nuestra aplicación PHP para transcribir archivos automáticamente.

Comentarios

Entradas más populares de este blog

Cómo usar Whisper para sacar el texto de un video

Tutorial 18: Creando la Página de Visualización de Archivos Recientes