Public Access
This commit is contained in:
@@ -168,6 +168,25 @@ Meeting Assistant uses normal .NET configuration under the `MeetingAssistant` se
|
||||
"RecognitionStopTimeout": "00:00:10",
|
||||
"DiarizeIntermediateResults": true
|
||||
},
|
||||
"SpeakerIdentification": {
|
||||
"MinimumSampleSpeechDuration": "00:00:30",
|
||||
"MaximumSampleSegmentGap": "00:00:01",
|
||||
"PyannoteValidation": {
|
||||
"Enabled": false,
|
||||
"MinimumSingleSpeakerCoverage": 0.9,
|
||||
"MinimumMatchingKnownSnippetRatio": 0.5,
|
||||
"Diarization": {
|
||||
"Enabled": true,
|
||||
"DockerCommand": "docker",
|
||||
"Image": "meeting-assistant-pyannote:local",
|
||||
"BuildImage": true,
|
||||
"ModelsFolder": "%LOCALAPPDATA%\\MeetingAssistant\\Pyannote\\models",
|
||||
"Model": "pyannote/speaker-diarization-3.1",
|
||||
"TokenEnv": "HF_TOKEN",
|
||||
"CommandTimeout": "00:30:00"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Automation": {
|
||||
"RulesPath": "meeting-rules.local.yaml"
|
||||
},
|
||||
@@ -217,6 +236,8 @@ During recording, Meeting Assistant writes the mixed PCM stream to a temporary W
|
||||
|
||||
`azure-speech` streams captured PCM audio to Azure AI Speech using the Speech SDK `ConversationTranscriber`. Configure `AzureSpeech:Endpoint`, `Region`, `Language`, and either `Key` or `KeyEnv`; this repository uses `AZURE_SPEECH_KEY` by default and does not store the key in appsettings. `DiarizeIntermediateResults` enables diarization for intermediate and final conversation transcription results. Azure returns generic speaker IDs such as `Guest-1` and `Guest-2`, which Meeting Assistant writes directly into live transcript segments. `RecognitionStopTimeout` bounds SDK shutdown after the captured audio stream has been closed, which keeps short diagnostic runs from waiting indefinitely for final service events. Since Azure Speech emits diarized live transcript segments, the Azure pipeline keeps those segments as the finished transcript instead of running pyannote.
|
||||
|
||||
Speaker identity matching keeps candidate samples only after a diarized speaker has at least `SpeakerIdentification:MinimumSampleSpeechDuration` of continuous speech, defaulting to 30 seconds. Adjacent same-speaker segments may be combined when the gap is no larger than `MaximumSampleSegmentGap`, but a different speaker resets the pending span. `SpeakerIdentification:PyannoteValidation` is an optional secondary confidence layer. When enabled, pyannote rejects multi-speaker samples and must confirm an Azure-confirmed identity match before Meeting Assistant accepts it. It uses the same Docker-based pyannote runtime shape as local Whisper finalization and reads its Hugging Face token from the nested diarization options.
|
||||
|
||||
ASR backends are exposed downstream as speech recognition pipelines. A pipeline can initialize, wait for readiness, accept audio chunks, emit live transcript segments, and produce a finished transcript after capture completes. The configured implementation is selected from `Recording:TranscriptionProvider` and registered through DI so recording and diagnostic endpoints do not need to know whether the backend uses FunASR, Whisper.NET, Azure Speech, pyannote, or a later provider.
|
||||
|
||||
`POST /asr/transcribe-file` is a local diagnostic endpoint for the configured ASR backend. Send `{ "path": "C:\\path\\to\\sample.wav" }` with a 16-bit PCM WAV file to stream it through the configured speech recognition pipeline and return the emitted live transcript segments.
|
||||
|
||||
Reference in New Issue
Block a user