Saltearse al contenido

Comandos de voz

ARGUS incluye un detector de comandos de voz que vigila cada transcripción PTT finalizada en busca de patrones de frase específicos. Cuando se encuentra una coincidencia, el comando correspondiente se dispara inmediatamente — suelta una flag, activa RTH, levanta la master caution, marca un objetivo avistado.

A diferencia del stub de reconocimiento de voz en muchas apps, este está realmente implementado — el servicio vive en voice-command-detector.service.ts y está conectado al stream de transcripción producido durante cualquier ráfaga PTT mientras la misión tenga transcripción habilitada.

Activarlo

  1. La misión debe tener Transcription habilitada en su conjunto de funcionalidades (ver el paso Features en crear-misión). Sin transcripción, no hay stream de texto contra el que hacer matching.
  2. En la consola de operación, abre el drawer de ajustes y activa Voice Commands. Cuatro sub-conmutadores te permiten habilitar/deshabilitar respuestas individuales de emergencia y notificación.

Una vez activado, cada release de PTT produce una transcripción que fluye a través del detector; cualquier frase reconocida se convierte en un evento DetectedVoiceCommand.

Los 17 comandos

Las frases hacen matching como subcadena insensible a mayúsculas contra el texto completo de la transcripción. No necesitas decir solo la frase — decir “okay equipo, launch drones al sector 4” hace match con LAUNCH_DRONES vía la subcadena “launch drones”.

Control de misión

ComandoFrases que lo disparan
LAUNCH_DRONES”launch drone”, “launch drones”, “deploy drone”, “deploy drones”
RETURN_TO_HOME”return to home”, “return home”, “come back”, “rth”
LAND_DRONE”land the drone”, “land drone”, “initiate landing”
CANCEL_MISSION”cancel mission”, “abort mission”, “cancel operation”
HOLD_POSITION”hold position”, “hover”, “stay there”
SEARCH_AREA”search area”, “search this area”, “begin search”, “start search”

Cámara / medios

ComandoFrases
TAKE_PICTURE”take picture”, “take a picture”, “take photo”, “capture image”
START_RECORDING”start recording”, “begin recording”, “start video”
STOP_RECORDING”stop recording”, “end recording”, “stop video”
ZOOM_IN”zoom in”
ZOOM_OUT”zoom out”

Reporte situacional

ComandoFrases
PERSON_SPOTTED”person spotted”, “i see someone”, “person detected”, “found someone”, “target spotted”
ANIMAL_SPOTTED”animal spotted”, “animal detected”, “i see an animal”
VEHICLE_SPOTTED”vehicle spotted”, “vehicle detected”, “car spotted”
DROP_FLAG”drop flag”, “mark location”, “drop marker”, “mark this”, “flag this”
ALL_CLEAR”all clear”, “area clear”, “sector clear”

Emergencia (multilingüe)

El comando EMERGENCY es el más amplio — 43 variantes de frase en inglés, español y transliteración al árabe. Todas disparan el mismo evento:

  • Inglés: “emergency”, “mayday”, “sos”, “help needed”, “help me”, “distress”, “man down”, “officer down”, “under fire”, “being attacked”, “require assistance”, “need backup”, “need help”, “send help”, …
  • Español: “emergencia”, “emergencia sos”, “ayuda”, “auxilio”, “socorro”, …
  • Árabe (transliterado): “musaada”, “tawari”, “najda”, “istighatha”, …

Dado que la lista se busca por subcadena, el detector es muy indulgente — una sola palabra gritada (“mayday!”) dentro de una ráfaga de habla pánica igual se dispara.

Qué se dispara con cada comando

Cada comando emite un evento DetectedVoiceCommand con:

  • command — el nombre canónico (p. ej. RETURN_TO_HOME).
  • label — etiqueta legible para mostrar en la UI.
  • transcription — el texto completo de transcripción donde se encontró el match.
  • peerId — el peer que produjo la transcripción.
  • commsId — el ID del canal de comms al que pertenecía la ráfaga.

Ese evento se despacha a:

  1. La burbuja de transcripción PTT — muestra una insignia de comando de voz junto a la transcripción (icono record_voice_over, etiqueta = nombre del comando).
  2. La línea de tiempo de la misión — una entrada voice.command con el payload completo.
  3. Manejadores específicos por comando (solo si el sub-conmutador relevante está on en el drawer de ajustes):
    • EMERGENCY → alerta crítica de master-caution + apuntado de gimbal opcional + overlay de beacon de distress opcional en el mapa.
    • DROP_FLAG → abre el selector de flag en la ubicación mapeada del hablante (si se conoce).
    • PERSON_SPOTTED / ANIMAL_SPOTTED / VEHICLE_SPOTTED → auto-flag con el tipo coincidente.
    • LAUNCH_DRONES / RETURN_TO_HOME / LAND_DRONE / HOLD_POSITION / CANCEL_MISSION — acotados al comandante; los no-comandantes ven un toast “command heard” pero no se dispara nada sin el bit de comandante.

Fiabilidad + latencia

  • Latencia: polling de ~500 ms de la transcripción en vivo + detección en cada ráfaga finalizada. Normalmente verás la insignia en menos de un segundo tras soltar el PTT.
  • Exactitud: depende enteramente de la calidad de la transcripción. Habla clara + mic de auriculares ≈ 95 %. Audio de calidad de radio + ruido de fondo ≈ 70-80 %.
  • Falsos positivos: el matching por subcadena significa que “don’t mark this” contiene “mark this” → haría match con DROP_FLAG. La lista de frases de emergencia es la más propensa a falsos positivos; mantenla deshabilitada en escenarios de entrenamiento donde alguien pueda decir “mayday” como ejemplo.

Alias de voz (aún no configurables en la app)

La lista de comandos está codificada en voice-command-detector.service.ts. No hay una página de “alias de voz” orientada al usuario; añadir una frase nueva o un idioma requiere un cambio de código + redespliegue. Esto es deliberado para la v1 — las frases personalizadas de forma libre aumentaban las tasas de falsos positivos en las primeras pruebas — pero se planifica una UI curada de “añadir frase”.

Si necesitas urgentemente una frase personalizada para una operación de campo, escribe al soporte con la frase + el comando al que debería mapear y podemos publicar un hotfix.

Lo que los comandos de voz no pueden hacer

  • Sin escucha continua — el detector solo corre sobre ráfagas PTT transcritas. Susurrar al micrófono sin mantener PTT no hace match con nada.
  • Sin comandos encadenados — “RTH and drop flag” hará match con RTH O DROP_FLAG (la primera subcadena encontrada), no con ambos. Pulsa PTT dos veces para dos comandos.
  • Sin identificación de hablante — el detector no sabe quién dijo qué más allá del peer ID. Si dos operadores dicen “RTH” al mismo tiempo, obtendrás dos eventos.

Privacidad

  • La transcripción corre en el agente en la nube (ver transcripción).
  • El detector en sí es puramente del lado del cliente — ningún audio ni texto de transcripción se envía a ningún sitio por el paso de detección.
  • Los eventos emitidos van a la línea de tiempo de la misión (persistente) y a la burbuja de transcripción (efímera).
  • Si tu organización tiene auto-redact PII habilitado en la transcripción, los comandos de voz igual se disparan pero la transcripción mostrada en la burbuja tiene las redacciones aplicadas.

Relacionado