VoiceStreamAI 는 WebSocket을 사용하여 거의 실시간 오디오 스트리밍 및 녹음을 가능하게 하는 Python 3 기반 서버 및 JavaScript 클라이언트 솔루션입니다. 이 시스템은 정확한 음성 인식 및 처리를 위해 Huggingface의 VAD(음성 활동 감지)와 OpenAI의 Whisper 모델(빠른 속삭임이 기본값)을 사용합니다.
여기서는 docker에서 CUDA를 사용하는 방법에 대해 자세히 안내하지 않습니다. 예를 보려면 여기를 참조하세요.
그러나 다음은 Linux용 명령입니다.
distribution= $( . /etc/os-release ; echo $ID$VERSION_ID )
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
&& curl -s -L https://nvidia.github.io/libnvidia-container/ $distribution /libnvidia-container.list |
sed ' s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g ' |
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
다음을 사용하여 컨테이너 이미지를 빌드할 수 있습니다.
sudo docker build -t VoiceStreamAI .
VAD 토큰을 얻은 후(다음 섹션 참조) 다음을 실행하십시오.
sudo docker volume create huggingface_models
sudo docker run --gpus all -p 8765:8765 -v huggingface_models:/root/.cache/huggingface -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
"볼륨" 기능을 사용하면 컨테이너를 다시 실행할 때마다 포옹 얼굴 모델을 다시 다운로드하지 않아도 됩니다. 이것이 필요하지 않으면 다음을 사용하십시오.
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
VoiceStreamAI 서버를 설정하려면 Python 3.8 이상과 다음 패키지가 필요합니다.
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
pip를 사용하여 다음 패키지를 설치합니다.
pip install -r requirements.txt
클라이언트 측의 경우 JavaScript를 지원하는 최신 웹 브라우저가 필요합니다.
VoiceStreamAI 서버는 명령줄 인수를 통해 사용자 정의할 수 있으므로 필요에 따라 구성 요소, 호스트 및 포트 설정을 지정할 수 있습니다.
--vad-type
: 사용할 음성 활동 감지(VAD) 파이프라인 유형을 지정합니다(기본값: pyannote
).--vad-args
: VAD 파이프라인에 대한 추가 인수가 포함된 JSON 문자열입니다. ( pyannote
에 필요함: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: 사용할 ASR(자동 음성 인식) 파이프라인 유형을 지정합니다(기본값: faster_whisper
).--asr-args
: ASR 파이프라인에 대한 추가 인수가 포함된 JSON 문자열(예를 들어 속삭임의 경우 model_name
변경할 수 있음)--host
: WebSocket 서버의 호스트 주소를 설정합니다(기본값: 127.0.0.1
).--port
: 서버가 수신 대기하는 포트를 설정합니다(기본값: 8765
).--certfile
: 보안 웹소켓을 사용하는 경우 SSL 인증서(인증서 파일)의 경로(기본값: None
)--keyfile
: 보안 웹소켓을 사용하는 경우 SSL 키 파일의 경로(기본값: None
)표준 구성으로 서버를 실행하는 경우:
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
다음 명령을 사용하여 모든 명령줄 옵션을 볼 수 있습니다.
python3 -m src.main --help
client/index.html
파일을 엽니다.ws://localhost:8765
).VAD와 ASR 구성요소 모두 쉽게 확장하여 새로운 기술을 통합하고 HuggingFace 파이프라인과 다른 인터페이스를 갖춘 모델을 사용할 수 있습니다. 새로운 처리/청크 전략은 server.py에 추가할 수 있으며 구성에서 "processing_strategy" 키를 설정하는 특정 클라이언트에서 사용할 수 있습니다.
VoiceStreamAI 의 VAD(음성 활동 감지)를 통해 시스템은 오디오 스트림 내에서 음성 세그먼트와 음성 세그먼트가 아닌 세그먼트를 구별할 수 있습니다. VAD 구현의 주요 목적은 음성-텍스트 프로세스의 효율성과 정확성을 높이는 것입니다.
VoiceStreamAI Huggingface VAD 모델을 사용하여 다양한 오디오 조건에서 음성을 안정적으로 감지합니다.
버퍼링 전략은 거의 실시간 처리와 음성 세그먼트의 완전하고 정확한 캡처 간의 균형을 유지하도록 설계되었습니다. 버퍼링이 관리되는 방법은 다음과 같습니다.
VoiceStreamAI 에서 각 클라이언트는 특정 요구 사항에 맞게 전사 프로세스를 조정하는 고유한 구성을 가질 수 있습니다. 이러한 개인화된 설정은 JavaScript 클라이언트가 Python 서버에 구성 세부 정보를 보내는 메시징 시스템을 통해 이루어집니다. 이 섹션에서는 이러한 구성이 어떻게 구성되고 전송되는지 설명합니다.
클라이언트 구성에는 언어 기본 설정, 청크 길이, 청크 오프셋과 같은 다양한 매개변수가 포함될 수 있습니다. 예를 들어:
language
: 전사할 언어를 지정합니다. "다국어" 이외의 다른 것으로 설정하면 속삭임 추론이 해당 언어로 강제됩니다.processing_strategy
: 일종의 전략 패턴인 이 클라이언트에 대한 처리 유형을 지정합니다. 현재 전략은 OOP를 사용하지 않지만 server.py의 if/else로 구현됩니다.chunk_length_seconds
: 처리할 각 오디오 청크의 길이를 정의합니다.chunk_offset_seconds
: 오디오를 처리하는 데 필요한 각 청크 끝의 무음 시간을 결정합니다(processing_strategy nr 1에서 사용).초기화 : 클라이언트가 서버와의 연결을 초기화할 때 선택적으로 구성 메시지를 보낼 수 있습니다. 이 메시지는 클라이언트가 선호하는 설정을 나타내는 키-값 쌍이 포함된 JSON 개체입니다.
JavaScript 클라이언트 설정 : 데모 클라이언트에서는 사용자 인터페이스 요소(예: 드롭다운 및 입력 필드)에서 구성이 수집됩니다. 오디오 흐름이 시작되면 JSON 개체가 생성되어 WebSocket을 통해 서버로 전송됩니다. 예를 들어:
function sendAudioConfig ( ) {
const audioConfig = {
type : "config" ,
data : {
chunk_length_seconds : 5 ,
chunk_offset_seconds : 1 ,
processing_strategy : 1 ,
language : language ,
} ,
} ;
websocket . send ( JSON . stringify ( audioConfig ) ) ;
}
새로운 ASR, Vad 또는 버퍼링 전략을 구현할 때 다음을 사용하여 테스트할 수 있습니다.
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
예를 들어 VAD 인증 토큰에 대한 최종 변수가 제자리에 있는지 확인하십시오. 예를 들어 독립형 ASR에 대한 몇 가지 다른 테스트가 진행 중입니다.
현재 VoiceStreamAI 청크를 파일에 저장한 다음 모델을 통해 이러한 파일을 실행하여 오디오를 처리합니다.
이 저장소를 포크하고 복제하세요. 종속성 및 관련 도구를 설치합니다.
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
수정 사항을 저장소에 추가하고 코드 스타일 검사를 수동으로 실행하거나 IDE/편집기에 통합하세요.
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
마지막으로 풀 요청을 푸시하고 생성합니다.
이 프로젝트는 기여를 위해 열려 있습니다. 자유롭게 저장소를 포크하고 풀 요청을 제출하세요.