Real-Time Speech, Audio, and Facial Analysis in Production AI Systems

Real-Time Speech, Audio, and Facial Analysis in Production AI Systems

Analyse en temps réel de la parole, de l’audio et du visage dans les systèmes d’IA en production

https://ift.tt/nt14wre

Le dernier post a couvert la fusion multimodale, l’alignement temporel et la résolution de conflits au niveau de l’architecture. Celui-ci entre dans le traitement effectif des modalités — comment vous gérez la parole, l’émotion liée à l’audio et l’analyse faciale dans des systèmes de production en temps réel.

Détection d’Activité Vocale — Avant Tout

La plupart des équipes passent directement à Whisper pour la conversion parole-texte. En production, vous avez besoin de la DVA d’abord.

La Détection d’Activité Vocale détermine quand quelqu’un parle réellement par opposition à le silence ou au bruit de fond. Sans cela, vous envoyez des morceaux audio silencieux à Whisper, gaspillant du calcul et obtenant des transcriptions hallucinées. Whisper est notoirement sujet à cela — donner du silence et il transcrira avec assurance des mots qui n’ont jamais été prononcés.

Silero VAD est l’option légère de référence. Fonctionne sur CPU, inférence en sub-millisecondes, et gère la segmentation dont vous avez besoin — quand le discours commence, quand il se termine, et tout ce qui se trouve entre pour ignorer.

L’ordre de la pipeline compte: audio brut → VAD → seules les portions de parole atteignent le modèle de transcription. Cela peut à lui seul réduire le calcul de Whisper de 30 à 60 % selon la quantité de silence et d’air mort dans vos flux audio. Dans les scénarios de télésanté ou de centres d’appels, c’est beaucoup d’air mort.

Parole vers Texte en Production

Whisper est le défaut. Mais quel Whisper compte ?

Whisper large-v3 — précision maximale, environ un modèle de 1,5 Go, trop lent pour le temps réel sur un seul GPU si vous traitez plusieurs flux simultanés.

Distil-Whisper — version distillée, 49 % de paramètres en moins, inférence 6x plus rapide, perte minimale de précision pour l’anglais. C’est ce que la plupart des systèmes de production devraient commencer à utiliser.

Faster-Whisper — backend CTranslate2, jusqu’à 4x plus rapide que l’implémentation OpenAI avec la même précision. Utilise la quantification int8 par défaut. Si vous auto-hébergez Whisper, utilisez ceci, pas le dépôt original.

Pour le streaming en temps réel, vous ne pouvez pas attendre que l’énoncé complet se termine pour transcrire. Vous avez besoin d’un traitement par blocs — typiquement des fenêtres de 2 à 5 secondes avec recouvrement. C’est comme si les mots que vous prononcez apparaissaient à l’écran pendant que vous parlez.

Le compromis ici : des blocs plus courts donnent des temps de réponse plus rapides mais une précision moindre sur les délimitations de mots. Des blocs plus longs améliorent la précision mais ajoutent de la latence.

Configuration pratique : blocs de 3 secondes avec recouvrement de 0,5 seconde, passant par Faster-Whisper avec pré-filtrage VAD. Cela atteint l’objectif de latence de 300–500 ms du budget du post précédent.

Gestion des Disfluences

La parole réelle est désordonnée. « Je… euh… comme, vous savez, assez bien je suppose ». Les systèmes de production doivent décider — gardez-vous les disfluences ou les retirez-vous ?

Pour les applications cliniques, conservez-les. Les schémas d’hésitation, les mots de remplissage et les autocontrôles portent des signaux diagnostiques. Une augmentation de la disfluence peut indiquer une charge cognitive, de l’anxiété ou des changements neurologiques. Un cadre professionnel n’en aura pas forcément besoin (pour la plupart) mais pas dans certaines zones sensibles.

Pour les applications générales, retirez-les dans une étape de post-traitement. Un modèle léger de nettoyage de texte ou même des règles basées sur des expressions régulières peuvent éliminer les remplisseurs sans perdre le sens.

Analyse d’Émotion Audio

Cela s’exécute sur le signal audio brut, séparé de la transcription. Vous n’analysez pas ce que quelqu’un a dit — vous analysez comment il l’a dit.

Extraction de Caractéristiques

Les caractéristiques centrales qui portent le signal émotionnel dans l’audio :

Caractéristiques prosodiques — hauteur (F0), variabilité de la hauteur, vitesse de parole, schémas rythmiques. Hauteur plate et débit lent mènent souvent à la tristesse ou à la fatigue. Forte variabilité de hauteur avec débit rapide mènent à l’excitation ou à l’agitation.

Caractéristiques spectrales — MFCC (coefficients cepstraux en fréquences mél), centroïde spectral, flux spectral. Celles-ci capturent le timbre et la qualité tonale de la voix. Une voix tremblante a des caractéristiques spectrales distinctes d’une voix stable.

Caractéristiques de la qualité vocale — jitter (perturbation de la fréquence), shimmer (perturbation d’amplitude), ratio harmonique sur le bruit. Celles-ci capturent la tension physiologique des cordes vocales. Le stress et l’anxiété augmentent mesurablement jitter et shimmer.

Options de Modèles

wav2vec 2.0 — modèle de représentation vocale auto-supervisé. Affiner sur des jeux de données audio étiquetés émotionnellement (IEMOCAP, RAVDESS, MSP-IMPROV). Forte base de référence pour la détection d’émotion en production.

HuBERT — architecture similaire à wav2vec 2.0, souvent légèrement meilleur sur les tâches émotionnelles en aval. Origine de recherche Facebook/Meta.

SpeechBrain — boîte à outils open-source qui enveloppe ces modèles avec des recettes de reconnaissance émotionnelle pré-construites. Le chemin le plus rapide pour passer de zéro à un classificateur d’émotion fonctionnel.

CNN personnalisé sur spectrogrammes — convertir l’audio en mel-spectrogrammes et traiter la détection d’émotion comme un problème de classification d’images. Plus simple à entraîner et à déboguer. Potentiel inférieur à des approches basées sur des transformers mais étonnamment efficace pour des classifications binaires comme détresse vs pas de détresse.

Considération Pratique

Les modèles d’émotion entraînés sur des jeux de données joués (RAVDESS, la plupart d’IEMOCAP) obtiennent des performances inférieures sur des discours spontanés réels. L’écart est significatif. Une colère jouée sonne différemment d’une vraie colère. Si vous déployez dans un contexte clinique ou de service client, vous devez affiner sur des données naturalistes ou votre précision sera pauvre.

Analyse Faciale

Trois niveaux d’analyse faciale, chacun avec des coûts de calcul et une valeur de signal différente.

Détection du Visage

Avant d’analyser quoi que ce soit, il faut trouver le visage dans l’image. MTCNN et RetinaFace sont les standards. RetinaFace est plus précis, surtout avec des visages partiellement occlus (masques, mains couvrant le visage). Pour le temps réel, exécutez la détection toutes les 5–10 images, pas à chaque image — les visages ne téléportent pas entre les images. Suivez entre les détections avec un tracker léger comme SORT ou ByteTrack.

Détection des Points Faciaux

Détection de repères à 68 points ou 478 points (MediaPipe). Cartographie la géométrie du visage — position des sourcils, coins de la bouche, ouverture des yeux, tension de la mâchoire. C’est ce que l’analyse d’expression en aval utilise.

MediaPipe Face Mesh — 478 repères 3D, fonctionne sur CPU, capable en temps réel même sur mobile. C’est le standard de production pour la plupart des équipes. Maintenu par Google, bien documenté et étonnamment robuste.

dlib — 68 repères, plus ancien mais bien éprouvé. Légèrement moins précis que MediaPipe mais modes d’échec plus prévisibles.

Reconnaissance de l’Expression Faciale

Détection d’Unités d’Action (AU) — le système de codage des actions faciales (FACS) décompose les expressions en mouvements musculaires individuels. AU4 (abaissement du sourcil) + AU15 (abaisseur du coin de la bouche) = motif de tristesse. C’est plus granulaire et cliniquement utile que des étiquettes émotionnelles catégorielles. Modèles: OpenFace 2.0, JAA-Net, ou ResNets affiné sur des jeux de données étiquetés AU (BP4D, DISFA).

Classification des émotions catégorielles — associe directement les visages à des étiquettes émotionnelles (heureux, triste, en colère, peur, surpris, dégoûté, neutre). Plus simple à mettre en œuvre mais perd du nuance. Un sourire forcé et un sourire véritable se classent tous les deux comme « heureux » — la détection d’AU les distingue (les sourires véritables incluent AU6, élévateur des pommettes; les sourires forcés ne l’incluent pas).

Pour les applications cliniques, utilisez la détection d’AU. La granularité au niveau des muscles est là où se trouve la valeur diagnostique.

Cadence de Cadre et Traitement

Vous n’avez pas besoin de traiter chaque image. Les expressions faciales évoluent lentement par rapport aux cadences vidéo. Traiter toutes les 3e ou 5e image à 30 ips vous donne 6–10 analyses par seconde — plus que suffisant pour capter les transitions d’expression.

C’est une optimisation majeure des coûts. À 30 ips, vous traitez 1 800 images par minute par patient. À chaque 5e image, cela tombe à 360. Même signal clinique, 80 % de calcul en moins.

Stratégie de Service du Modèle

Exécuter Whisper, un modèle d’émotion et un modèle faciale en même temps soulève une question pratique : où chaque modèle vit-il ?

Répartition GPU — Whisper (surtout large-v3) nécessite un GPU. Les modèles d’émotion audio sont assez petits pour CPU si vous utilisez l’extraction de caractéristiques + classificateur léger. La détection du visage et l’extraction de points (MediaPipe) fonctionnent sur CPU. Les modèles de reconnaissance d’expression bénéficient du GPU mais peuvent fonctionner sur CPU avec une latence acceptable s’ils sont quantifiés.

Répartition pratique pour la plupart des équipes : Whisper sur GPU, émotion audio sur CPU, analyse faciale sur CPU (MediaPipe + modèle d’expression quantifié). Cela vous permet de servir les trois modalities sur une seule instance GPU au lieu de trois.

Quantification — la quantification INT8 via ONNX Runtime diminue le temps d’inférence de 2–3x avec une perte de précision négligeable pour la plupart des modèles d’émotion et d’expression. Whisper en bénéficie aussi — Faster-Whisper utilise CTranslate2 qui applique la quantification par défaut.

Ajustement de la taille de lot — si vous traitez plusieurs sessions simultanées, regroupez les demandes d’inférence pour vos modèles résidents sur GPU. Un lot de 4–8 blocs Whisper traités ensemble est nettement plus efficace que 4–8 inférences séquentielles uniques. C’est la différence entre supporter 10 sessions concurrentes et 50 sur le même matériel.

Quand utiliser ONNX Runtime vs PyTorch natif — ONNX pour tout modèle en inférence production. PyTorch pour l’entraînement et l’expérimentation. ONNX Runtime avec le fournisseur d’exécution TensorRT sur les GPU NVIDIA offre les meilleures performances d’inférence. L’étape de conversion ajoute une complexité initiale mais se rentabilise immédiatement en latence et en débit.

Mettre Tout Ensemble

Le pipeline complet par modalité pour une entrée audio-vidéo unique :

Audio brut → VAD (CPU, <1 ms) → segments de parole → Whisper (GPU, 300–500 ms) → transcription + horodatage

Audio brut → extraction de caractéristiques (CPU, 50 ms) → modèle d’émotion (CPU, 100–200 ms) → étiquette d’émotion + confiance

Images vidéo → détection du visage toutes les 5 images (CPU, 20 ms) → extraction de repères (CPU, 10 ms) → modèle d’expression/AU (CPU/GPU, 50–100 ms) → étiquettes d’expression + confiance

Toutes les trois s’exécutent en parallèle. Les résultats alimentent la fusion de la publication précédente. Le temps réel total reste dans le budget de 2 secondes puisque rien n’attend sur autre chose.

Ceci est la couche d’implémentation.

Le prochain post porte sur l’évaluation, la surveillance et ce qui se passe lorsque ces modèles se dégradent en production. À bientôt.

April 13, 2026 at 10:39PM