Cómo detectar deepfakes de voz y protegerte del fraude
📈 Google Trends revela que los deepfakes de voz están en auge: cómo detectarlos y protegerse
---
Introducción
En los últimos meses, las búsquedas de “deepfake voice” y “voice phishing” han crecido de forma constante en Google Trends, señalando que los ataques con voces sintéticas ya no son una amenaza de nicho. Con herramientas como ElevenLabs, Azure Speech o Google WaveNet al alcance de cualquier usuario, los estafadores pueden imitar la voz de un familiar, un ejecutivo o un agente de soporte con una calidad que engaña incluso a los oyentes más experimentados. En este artículo encontrarás:
1. Cómo reconocer una llamada falsificada en segundos.
2. Herramientas gratuitas y ejemplos de código para detectar deepfakes en tiempo real.
3. Pasos prácticos para actuar y reducir el riesgo en tu organización o en tu día a día.
---
1. ¿Cómo distinguir una llamada deepfake de una conversación real?
| Señal a observar | Por qué ocurre | Qué hacer |
|------------------|----------------|-----------|
| Entonación “plana” o cambios bruscos de pitch | Los modelos de TTS todavía luchan con la variación natural de la voz humana. | Presta atención a subidas y bajadas de tono que no siguen el patrón habitual del interlocutor. |
| Pausas artificiales o “latencia” entre palabras | La generación en tiempo real introduce pequeños retrasos mientras el modelo procesa el texto. | Si escuchas silencios de 200‑400 ms donde no debería haberlos, sospecha. |
| Artefactos de sonido (zumbidos, “silbidos” en consonantes) | Los algoritmos de síntesis pueden producir pequeñas distorsiones en fonemas fricativos. | Usa auriculares de buena calidad y busca esos ruidos sutiles. |
| Falta de “relleno” natural (muletillas, respiraciones) | Las voces sintéticas suelen omitir “uh”, “eh” o suspiros. | Pregunta algo inesperado que provoque una respuesta espontánea; si la respuesta suena demasiado “ensayada”, alerta. |
Los algoritmos de detección automática analizan espectrogramas y métricas de prosodia (pitch, jitter, shimmer) para identificar patrones que el oído humano no percibe.
---
2. Herramientas gratuitas y ejemplos de código
A continuación, tres opciones open‑source que puedes integrar en minutos. Todas funcionan en Linux/macOS/Windows y requieren solo Python 3.9+.
2.1 Resemblyzer – Comparación de embeddings de voz
# Instalación
pip install git+https://github.com/resemble-ai/Resemblyzer.git
from resemblyzer import VoiceEncoder, preprocess_wav
import numpy as np
import soundfile as sf
# Carga la muestra sospechosa y la referencia (grabación real del usuario)
wav_sospechosa, _ = preprocess_wav("call.wav")
wav_ref, _ = preprocess_wav("voice_reference.wav")
enc = VoiceEncoder()
emb_sospechosa = enc.embed_utterance(wav_sospechosa)
emb_ref = enc.embed_utterance(wav_ref)
# Cosine similarity: >0.85 → muy similar (posible deepfake)
similarity = np.inner(emb_sospechosa, emb_ref)
print(f"Similitud: {similarity:.3f}")
> Tip práctico: guarda una muestra corta (5 s) de la voz de cada empleado en un directorio seguro y ejecuta el script cada vez que recibas una llamada sospechosa.
2.2 DeepSpeech (Mozilla) – Transcripción y detección de anomalías
# Instalación (requiere CUDA opcional para velocidad)
pip install deepspeech
wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.pbmm
import deepspeech
import wave
import numpy as np
model = deepspeech.Model('deepspeech-0.9.3-models.pbmm')
def transcribe(path):
with wave.open(path, 'rb') as wf:
frames = wf.getnframes()
buffer = wf.readframes(frames)
data = np.frombuffer(buffer, dtype=np.int16)
return model.stt(data)
texto = transcribe('call.wav')
print("Transcripción:", texto)
# Busca palabras fuera de contexto o frases incoherentes → posible deepfake
2.3 Kaldi + VoiceID – Creación de perfiles de hablantes
# Instalación rápida vía Docker (evita complicaciones de compilación)
docker run -it --rm kaldi/kaldi:latest /bin/bash
Dentro del contenedor, sigue la guía oficial de VoiceID para entrenar un modelo con tus grabaciones de referencia y luego ejecutar:
Supongamos que ya tienes un modelo entrenado llamado speaker_model
online2-wav-nnet3-latgen-faster \
--online=false \
--do-endpointing=false \
--frame-subsampling-factor=3 \
--acoustic-scale=1.0 \
speaker_model/graph/HCLG.fst \
speaker_model/graph/words.txt \
speaker_model/graph/phones.txt \
speaker_model/graph/phones/word_boundary.int \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/graph/phones/word_boundary.txt \
speaker_model/
---
Herramienta mencionada: Groq Cloud
Mentions
Cómo detectar deepfakes de voz y protegerte del fraude 📈 Google Trends revela que los deepfakes de voz están en auge: cómo detectarlos y protegerse --- Introducción En los últimos meses, las búsquedas de “deepfake voice” y “voice phishing” han crecido de forma constante en Google Trends, señalando que los ataques con voces sintéticas ya no son una amenaza de nicho. Con herramientas como ElevenLabs, Azure Speech o Google WaveNet al alcance de cualquier usuario, los estafadores pueden imitar la voz de un familiar, un ejecutivo o un agente de soporte con una calidad que engaña incluso a los oyentes más experimentados. En este artículo encontrarás: 1. Cómo reconocer una llamada falsificada en segundos. 2. Herramientas gratuitas y ejemplos de código para detectar deepfakes en tiempo real. 3. Pasos prácticos para actuar y reducir el riesgo en tu organización o en tu día a día. --- 1. ¿Cómo distinguir una llamada deepfake de una conversación real? | Señal a observar | Por qué ocurre | Qué hacer | |------------------|----------------|-----------| | Entonación “plana” o cambios bruscos de pitch | Los modelos de TTS todavía luchan con la variación natural de la voz humana. | Presta atención a subidas y bajadas de tono que no siguen el patrón habitual del interlocutor. | | Pausas artificiales o “latencia” entre palabras | La generación en tiempo real introduce pequeños retrasos mientras el modelo procesa el texto. | Si escuchas silencios de 200‑400 ms donde no debería haberlos, sospecha. | | Artefactos de sonido (zumbidos, “silbidos” en consonantes) | Los algoritmos de síntesis pueden producir pequeñas distorsiones en fonemas fricativos. | Usa auriculares de buena calidad y busca esos ruidos sutiles. | | Falta de “relleno” natural (muletillas, respiraciones) | Las voces sintéticas suelen omitir “uh”, “eh” o suspiros. | Pregunta algo inesperado que provoque una respuesta espontánea; si la respuesta suena demasiado “ensayada”, alerta. | Los algoritmos de detección automática analizan espectrogramas y métricas de prosodia (pitch, jitter, shimmer) para identificar patrones que el oído humano no percibe. --- 2. Herramientas gratuitas y ejemplos de código A continuación, tres opciones open‑source que puedes integrar en minutos. Todas funcionan en Linux/macOS/Windows y requieren solo Python 3.9+. 2.1 Resemblyzer – Comparación de embeddings de voz # Instalación pip install git+https://github.com/resemble-ai/Resemblyzer.git from resemblyzer import VoiceEncoder, preprocess_wav import numpy as np import soundfile as sf # Carga la muestra sospechosa y la referencia (grabación real del usuario) wav_sospechosa, _ = preprocess_wav("call.wav") wav_ref, _ = preprocess_wav("voice_reference.wav") enc = VoiceEncoder() emb_sospechosa = enc.embed_utterance(wav_sospechosa) emb_ref = enc.embed_utterance(wav_ref) # Cosine similarity: >0.85 → muy similar (posible deepfake) similarity = np.inner(emb_sospechosa, emb_ref) print(f"Similitud: {similarity:.3f}") > Tip práctico: guarda una muestra corta (5 s) de la voz de cada empleado en un directorio seguro y ejecuta el script cada vez que recibas una llamada sospechosa. 2.2 DeepSpeech (Mozilla) – Transcripción y detección de anomalías # Instalación (requiere CUDA opcional para velocidad) pip install deepspeech wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.pbmm import deepspeech import wave import numpy as np model = deepspeech.Model('deepspeech-0.9.3-models.pbmm') def transcribe(path): with wave.open(path, 'rb') as wf: frames = wf.getnframes() buffer = wf.readframes(frames) data = np.frombuffer(buffer, dtype=np.int16) return model.stt(data) texto = transcribe('call.wav') print("Transcripción:", texto) # Busca palabras fuera de contexto o frases incoherentes → posible deepfake 2.3 Kaldi + VoiceID – Creación de perfiles de hablantes # Instalación rápida vía Docker (evita complicaciones de compilación) docker run -it --rm kaldi/kaldi:latest /bin/bash Dentro del contenedor, sigue la guía oficial de VoiceID para entrenar un modelo con tus grabaciones de referencia y luego ejecutar: Supongamos que ya tienes un modelo entrenado llamado speaker_model online2-wav-nnet3-latgen-faster \ --online=false \ --do-endpointing=false \ --frame-subsampling-factor=3 \ --acoustic-scale=1.0 \ speaker_model/graph/HCLG.fst \ speaker_model/graph/words.txt \ speaker_model/graph/phones.txt \ speaker_model/graph/phones/word_boundary.int \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/graph/phones/word_boundary.txt \ speaker_model/ --- Herramienta mencionada: Groq Cloud
😤 录音转文字按分钟收费,长音频用不起。DeepSpeech 是离线语音识别,能跑在自己设备上,音频不用传出去。两万六千星。 mozilla/DeepSpeech