VoiceStreamAI هو خادم يستند إلى Python 3 وحل عميل JavaScript يتيح دفق الصوت والنسخ في الوقت الفعلي تقريبًا باستخدام WebSocket. يستخدم النظام نظام Huggingface's Voice Activity Detection (VAD) ونموذج Whisper الخاص بـ OpenAI (الهمس الأسرع هو النموذج الافتراضي) للتعرف على الكلام ومعالجته بشكل دقيق.
لن يرشدك هذا بالتفصيل حول كيفية استخدام 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 install -r requirements.txt
بالنسبة لجانب العميل، فأنت بحاجة إلى متصفح ويب حديث يدعم JavaScript.
يمكن تخصيص خادم VoiceStreamAI من خلال وسيطات سطر الأوامر، مما يسمح لك بتحديد إعدادات المكونات والمضيف والمنفذ وفقًا لاحتياجاتك.
--vad-type
: يحدد نوع مسار اكتشاف النشاط الصوتي (VAD) الذي سيتم استخدامه (الافتراضي: pyannote
) .--vad-args
: سلسلة JSON تحتوي على وسيطات إضافية لخط أنابيب VAD. (مطلوب pyannote
: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: يحدد نوع خط أنابيب التعرف التلقائي على الكلام (ASR) الذي سيتم استخدامه (الافتراضي: faster_whisper
).--asr-args
: سلسلة JSON تحتوي على وسيطات إضافية لخط أنابيب ASR (يمكن للمرء على سبيل المثال تغيير model_name
لـ whisper)--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، واستخدامها بواسطة عملاء محددين يقومون بتعيين مفتاح "process_strategy" في ملف التكوين.
يمكّن اكتشاف النشاط الصوتي (VAD) في VoiceStreamAI النظام من التمييز بين مقاطع الكلام وغير الكلام داخل التدفق الصوتي. الغرض الأساسي من تطبيق VAD هو تعزيز كفاءة ودقة عملية تحويل الكلام إلى نص:
يستخدم VoiceStreamAI نموذج Huggingface VAD لضمان اكتشاف موثوق للكلام في ظروف صوتية متنوعة.
تم تصميم إستراتيجية التخزين المؤقت لتحقيق التوازن بين المعالجة في الوقت الفعلي تقريبًا وضمان الالتقاط الكامل والدقيق لمقاطع الكلام. وإليك كيفية إدارة التخزين المؤقت:
في VoiceStreamAI ، يمكن أن يكون لكل عميل تكوين فريد يخصص عملية النسخ وفقًا لاحتياجاته الخاصة. يتم تحقيق هذا الإعداد المخصص من خلال نظام مراسلة حيث يرسل عميل JavaScript تفاصيل التكوين إلى خادم Python. يشرح هذا القسم كيفية تنظيم هذه التكوينات ونقلها.
يمكن أن يتضمن تكوين العميل معلمات مختلفة مثل تفضيلات اللغة وطول القطعة وإزاحة القطعة. على سبيل المثال:
language
: تحديد لغة النسخ. إذا تم التعيين على أي شيء آخر غير "متعدد اللغات"، فسيجبر ذلك على أن يكون استنتاج Whisper بهذه اللغةprocessing_strategy
: يحدد نوع المعالجة لهذا العميل، وهو نوع من نمط الإستراتيجية. الإستراتيجية في الوقت الحالي لا تستخدم OOP ولكن يتم تنفيذها في if/else في server.pychunk_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 أو Buffering جديدة، يمكنك اختبارها باستخدام:
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
أخيرًا، قم بالدفع وإنشاء طلب سحب.
هذا المشروع مفتوح للمساهمات. لا تتردد في تفرع المستودع وإرسال طلبات السحب.