Desert Ant Labs

Who

Quién dijo quéBeta

Etiqueta a los hablantes de una grabación y mira exactamente cuándo empieza y deja de hablar cada persona, todo en el dispositivo.

Marca quién dijo qué en audio y vídeo.

Who está pensado para podcasts, entrevistas, llamadas y reuniones, y admite grabaciones de cualquier duración. Una entrevista de 50 minutos se procesa en 3 s en un MacBook Pro, todo en el dispositivo. Usa las marcas de tiempo para etiquetar una transcripción por hablante, saltar a la siguiente intervención de un invitado o cortar cada vez que cambia el hablante.

Who numera a los hablantes en el orden en que intervienen por primera vez y, cuando dos personas hablan a la vez, las marca a las dos. Who procesa cada fragmento de cinco minutos de una sola pasada y empareja las voces de un fragmento a otro.

En las grabaciones de reuniones de AMI, Who etiqueta a los hablantes con una tasa de error del 12,6%, inferior al 13,1% de pyannote en una GPU de servidor y al 19,4% de FluidAudio en el mismo Mac. Además, Who es el doble de rápido que FluidAudio.

Una hora de audio en 4 s.

Who funciona a 950x en tiempo real en un MacBook Pro con M5 Pro, a través del SDK. En las reuniones de AMI, la tasa de error de diarización de Who es del 12,6%, frente al 13,1% de pyannote y el 19,4% de FluidAudio.

950x
Más rápido que el tiempo real
MacBook Pro (M5 Pro), float16, a través del SDK
12,6%
Tasa de error de diarización
Reuniones de AMI, 16 grabaciones, cuanto más baja, mejor; pyannote 13,1%
2,1x
Más rápido que FluidAudio
una adaptación de pyannote a Core ML, en el mismo Mac
81 MB
Descarga
float16; 42 MB con pesos de 8 bits

Conjuntos de prueba completos en un mismo MacBook Pro (M5 Pro), con las grabaciones de una en una. Los tiempos de Who incluyen la carga del modelo. FluidAudio tarda 73 s en AMI según su propio cronómetro y 79 s contando la carga de sus modelos.

Conjunto de pruebaTiempo de WhoWho, tiempo realFluidAudio, tiempo real
AMI test, 544 minutes34 s950x445x
VoxConverse test, 43.5 hours165 s948x426x

Tasa de error de diarización en grabaciones completas, cuanto más baja, mejor. Las mismas grabaciones y el mismo sistema de puntuación en todas las filas

ModeloAMIVoxConverse, hasta 4 hablantesNOTSOFAR-1, hasta 4 hablantesEarnings-21DiPCo
Who, on the Neural Engine12,6%8,4%16,2%27,7%41,1%
pyannote community-1, PyTorch13,1%7,3%18,7%7,3%33,4%
FluidAudio, Core ML19,4%9,6%32,7%12,0%42,7%

Who va por delante en los dos conjuntos de reuniones, AMI y NOTSOFAR-1, y queda por detrás de pyannote en los otros tres: las llamadas de Earnings-21 llegan a 20 hablantes, y Who obtiene un 24,7% en VoxConverse con nueve o más hablantes. Ejecutamos pyannote en GPU de servidor, y Who y FluidAudio en el Neural Engine del M5 Pro. Las puntuaciones de pyannote y FluidAudio son ejecuciones propias y no figuran en la ficha del modelo.

Casos de uso

Marca quién dijo qué en audio y vídeo.

Etiqueta una transcripción por hablante

Combina Who con Voz y cada línea de la transcripción muestra quién la dijo. Quien la lee sigue la conversación en vez de toparse con un bloque de texto anónimo.

Salta a la siguiente intervención de un invitado

Filtra una entrevista o una reunión de dos horas por un solo hablante y ve directamente a sus turnos en lugar de recorrer la línea de tiempo. La grabación no sale del dispositivo.

Corta cada vez que cambia el hablante

Alterna el ángulo de cámara en una entrevista con dos cámaras o en un podcast en vídeo cuando toma la palabra otra persona. Cada turno tiene un tiempo de inicio y otro de fin, así que cada cambio de hablante es un punto de corte.

Deja fuera las risas

Quita las risas del público y la voz que dijo una sola frase desde el otro lado de la sala. Who descarta a los hablantes que no llegan al porcentaje de la grabación que fijes y vuelve a numerar al resto.

Qué hace el modelo

  • Who etiqueta hasta cuatro hablantes en cada fragmento de cinco minutos, y más a lo largo de toda la grabación, emparejando las voces de un fragmento a otro.
  • Cada turno es un tramo de habla de un solo hablante, con un número de hablante y tiempos de inicio y fin en segundos, con una precisión de 10 ms. Los turnos de distintos hablantes se solapan cuando las personas se pisan al hablar.
  • En el SDK, Who numera a los hablantes desde cero, en el orden en que intervienen por primera vez, y no identifica a nadie por su nombre.
  • Dos grafos de Core ML en el Neural Engine procesan cada fragmento: un codificador y un grafo de consultas. Un tercer grafo crea una huella de voz de cada hablante a partir de los momentos en que habla solo, y Who empareja a cada hablante a lo largo de toda la grabación de una vez.
  • Un hablante con menos de un segundo de habla en solitario no tiene huella de voz propia y se une al hablante más cercano en el tiempo. Un segundo de risa dentro del turno de otra persona se asigna a esa persona.
  • 950x en tiempo real en un MacBook Pro con M5 Pro, a través del SDK: 544 minutos de reuniones de AMI en 34 s. La versión de 8 bits funciona a 953x.
  • Memoria a través del SDK: 275 MB con el modelo cargado y un pico de 336 MB en una grabación de 8 minutos, 437 MB en una de 34 minutos y 927 MB en una de 2,65 horas.
  • La descarga de Core ML ocupa 81 MB en float16 o 42 MB con pesos de 8 bits, y las dos versiones tienen la misma tasa de error en las reuniones de AMI, el 12,6%. La versión de 8 bits no ahorra memoria, porque el Neural Engine descomprime los pesos al cargarlos.
  • Who también está disponible en una versión LiteRT de 49 MB, que el SDK ejecuta en Android, Linux y Windows, y en una versión ONNX de 99 MB, que los SDK todavía no ejecutan. Solo con la CPU, la versión LiteRT procesa 544 minutos de audio en 87 s en el M5 Pro y en 191 s en un servidor AMD EPYC de 24 núcleos, según mediciones hechas fuera del SDK.
  • keepingSpeakers(minimumShare:) descarta a los hablantes que no llegan a un porcentaje de la grabación y vuelve a numerar al resto, así que las risas, los aplausos y las cortinillas desaparecen. Con un 5%, el filtro eliminó las risas y al público en los podcasts que probamos. En un informativo con muchos hablantes que intervienen poco, deja el porcentaje bajo o desactiva el filtro.
  • Diariza un archivo de audio por URL o ruta, o pasa muestras mono a cualquier frecuencia de muestreo. El SDK la convierte por ti.
  • El SDK descarga los pesos de Hugging Face en el primer uso y los guarda en caché. download(progress:) los obtiene por adelantado, y Who(directory:) funciona sin conexión desde una carpeta que gestionas tú.

Primeros pasos

Añade quién dijo qué a tu app de iOS or macOS or Android con unas pocas líneas de código. Docs de Who.

iOS, macOS
Instalación
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0")
// target dependency
.product(name: "Who", package: "desert-ant-core")
Ejemplo - Swift
import Who

let who = Who()                       // downloads on first use
let result = try await who.diarize(contentsOf: url)

result.speakerCount                   // 3
for turn in result.turns {
    print(turn.speaker, turn.start, turn.end)   // 0 12.4 15.9
}
Crea con un prompt
Add Who from Desert Ant Labs to this Swift project (iOS, macOS).

What it does: etiquetado de hablantes en el dispositivo para audio y vídeo.

SDK:

Swift (iOS, macOS)
Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core.git", from: "4.0.0")
// target dependency
.product(name: "Who", package: "desert-ant-core")

Reference:
- Model page: https://desertant.com/models/who/
- Full catalog and other models: https://desertant.com/llms.txt

Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.
Android
Instalación
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")
Ejemplo - Kotlin
import ai.desertant.who.Who

val who = Who(context)                       // downloads on first use
val result = who.diarize(samples, 16_000.0)

result.speakerCount                          // 3
for (turn in result.turns) {
    println("${turn.speaker} ${turn.start} ${turn.end}")   // 0 12.4 15.9
}
who.close()
Crea con un prompt
Add Who from Desert Ant Labs to this Kotlin project (Android).

What it does: etiquetado de hablantes en el dispositivo para audio y vídeo.

SDK:

Kotlin (Android)
Repo: https://github.com/Desert-Ant-Labs/desert-ant-core#readme
// build.gradle.kts (Maven Central)
implementation("ai.desertant:who:4.0.0")

Reference:
- Model page: https://desertant.com/models/who/
- Full catalog and other models: https://desertant.com/llms.txt

Add the SDK, then follow its README for the exact API and current version. Do not invent API names or method signatures; confirm them against the README.

Especificaciones

Velocidad
950x en tiempo real en un MacBook Pro (M5 Pro), una entrevista de 50 minutos en 3 s
Exactitud
Tasa de error de diarización del 12,6% en reuniones de AMI; del 8,4% en VoxConverse con hasta 4 hablantes
Hablantes
Hasta 4 en cada fragmento de cinco minutos, y más a lo largo de una grabación de cualquier duración
Salida
Turnos por hablante con tiempos de inicio y fin en segundos, con una precisión de 10 ms; se conserva el habla solapada
Tamaño en el dispositivo
81 MB Core ML (float16, por defecto); 42 MB con pesos de 8 bits
Memoria
275 MB con el modelo cargado; pico de 927 MB en una grabación de 2,65 horas
Plataformas
iOS 18+, macOS 15+, tvOS 18+, visionOS 2+ (Core ML); Android, Linux y Windows (LiteRT, en la CPU)

Who funciona mejor con audio de micrófono cercano, como podcasts, entrevistas y llamadas remotas en las que cada persona tiene su propio micrófono. Lejos del micrófono, a Who se le escapa más habla: entre el 19 y el 21% en conversaciones de grupo grabadas desde el otro lado de la sala, frente al 8% en reuniones con auriculares con micrófono.

Cuando dos personas hablan a la vez es cuando más habla se le escapa a Who. En VoxConverse, la tasa de error es del 8% con uno o dos hablantes, del 17% con entre cinco y ocho y del 25% con nueve o más.

En las llamadas de Earnings-21, con hasta 20 hablantes que intervienen brevemente, Who asigna el 16% del habla al hablante equivocado. Who etiqueta a los hablantes con un número, no con su nombre, y no transcribe; para una transcripción etiquetada por hablante, combina Who con Voz.

En Android, Linux y Windows, Who se ejecuta en la CPU, entre tres y siete veces más despacio que en el Neural Engine. Who todavía no funciona en el navegador ni en Node.

Preguntas frecuentes

¿Qué es Who?

Etiqueta a los hablantes de una grabación y mira exactamente cuándo empieza y deja de hablar cada persona, todo en el dispositivo.

¿Who se ejecuta en el dispositivo?

Sí. Who se ejecuta en el dispositivo, sin llamadas a servidor, así que los datos se quedan con el usuario.

¿Qué plataformas admite Who?

Who se distribuye como un SDK nativo en el dispositivo para Swift, Kotlin.

¿Cuánto cuesta Who?

Cada modelo es gratis hasta 100 000 dispositivos activos mensuales. La inferencia es ilimitada. Contáctanos para licencias personalizadas.

¿Qué precisión o velocidad tiene Who?

Who funciona a 950x en tiempo real en un MacBook Pro con M5 Pro, a través del SDK. En las reuniones de AMI, la tasa de error de diarización de Who es del 12,6%, frente al 13,1% de pyannote y el 19,4% de FluidAudio.

Recursos