
تحديث (2024-05-28): لقد اندمجت للتو في إعادة كتابة كبرى من Whisperwriter! لقد انتقلنا من استخدام tkinter إلى استخدام PyQt5 لواجهة المستخدم ، وأضفوا نافذة إعدادات جديدة للتكوين ، ووضع تسجيل مستمر جديد ، ودعم واجهة برمجة تطبيقات محلية ، وأكثر من ذلك! يرجى التحلي بالصبر وأنا أعمل على أي أخطاء ربما تم تقديمها في هذه العملية. إذا واجهت أي مشاكل ، يرجى فتح مشكلة جديدة!
WhisperWriter هو تطبيق صغير للكلام إلى نص يستخدم طراز Whisper من Openai لتحويل التسجيلات التلقائية من ميكروفون المستخدم إلى النافذة النشطة.
بمجرد بدء تشغيله ، يعمل البرنامج النصي في الخلفية وينتظر الضغط على اختصار لوحة المفاتيح ( ctrl+shift+space بشكل افتراضي). عند الضغط على الاختصار ، يبدأ التطبيق في التسجيل من الميكروفون. هناك أربعة أوضاع تسجيل للاختيار من بينها:
continuous (افتراضي): سيتوقف التسجيل بعد توقف طويل بما يكفي في خطابك. سيقوم التطبيق بنسخ النص ثم البدء في التسجيل مرة أخرى. للتوقف عن الاستماع ، اضغط على اختصار لوحة المفاتيح مرة أخرى.voice_activity_detection : سيتوقف التسجيل بعد توقف طويل بما فيه الكفاية في خطابك. لن يبدأ التسجيل حتى يتم الضغط على اختصار لوحة المفاتيح مرة أخرى.press_to_toggle عند الضغط على اختصار لوحة المفاتيح مرة أخرى. لن يبدأ التسجيل حتى يتم الضغط على اختصار لوحة المفاتيح مرة أخرى.hold_to_record حتى يتم إصدار اختصار لوحة المفاتيح. لن يبدأ التسجيل حتى يتم وضع اختصار لوحة المفاتيح مرة أخرى. يمكنك تغيير اختصار لوحة المفاتيح ( activation_key ) ووضع التسجيل في خيارات التكوين. أثناء التسجيل والنسخ ، يتم عرض نافذة حالة صغيرة تعرض المرحلة الحالية من العملية (ولكن يمكن إيقاف تشغيل هذا). بمجرد اكتمال النسخ ، سيتم كتابة النص المكتوب تلقائيًا إلى النافذة النشطة.
يمكن إما أن يتم النسخ محليًا من خلال حزمة Python الأسرع أو من خلال طلب إلى API من Openai. بشكل افتراضي ، سيستخدم التطبيق نموذجًا محليًا ، ولكن يمكنك تغيير هذا في خيارات التكوين. إذا اخترت استخدام API ، فستحتاج إما إلى توفير مفتاح Openai API أو تغيير نقطة نهاية عنوان URL الأساسي.
حقيقة ممتعة: تم تبديل الزوجين تقريبًا من الإصدار الأولي للمشروع مع ChatGPT-4 و Github Copilot باستخدام VS Code. عمليا كل سطر ، بما في ذلك معظم هذه القراءة ، كتب من قبل الذكاء الاصطناعي. بعد الانتهاء من النموذج الأولي ، تم استخدام Whisperwriter لكتابة الكثير من المطالبات أيضًا!
قبل أن تتمكن من تشغيل هذا التطبيق ، ستحتاج إلى تثبيت البرنامج التالي:
3.11 : https://www.python.org/downloads/ إذا كنت ترغب في التشغيل faster-whisper على وحدة معالجة الرسومات الخاصة بك ، فستحتاج أيضًا إلى تثبيت مكتبات Nvidia التالية:
تم أخذ أدناه مباشرة من readme faster-whisper :
ملاحظة: أحدث إصدارات ctranslate2 تدعم CUDA 12 فقط. بالنسبة إلى CUDA 11 ، يتم تقليل الحلول الحالي إلى إصدار 3.24.0 من ctranslate2 (يمكن القيام بذلك مع pip install --force-reinsall ctranslate2==3.24.0 ).
هناك طرق متعددة لتثبيت مكتبات NVIDIA المذكورة أعلاه. تم وصف الطريقة الموصى بها في وثائق NVIDIA الرسمية ، لكننا نقترح أيضًا طرق التثبيت الأخرى أدناه.
تم تثبيت المكتبات (Cublas ، Cudnn) في صور Nvidia Cuda الرسمية Cuda: nvidia/cuda:12.0.0-runtime-ubuntu20.04 أو nvidia/cuda:12.0.0-runtime-ubuntu22.04 .
pip (Linux فقط) على Linux يمكن تثبيت هذه المكتبات مع pip . لاحظ أنه يجب تعيين LD_LIBRARY_PATH قبل إطلاق Python.
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12
export LD_LIBRARY_PATH= ` python3 -c ' import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__)) ' ` ملاحظة : يبدو أن الإصدار 9+ من nvidia-cudnn-cu12 يسبب مشكلات بسبب اعتمادها على CUDNN 9 (أسرع لا يدعم حاليًا CUDNN 9). تأكد من أن نسختك من حزمة Python مخصصة لـ Cudnn 8.
يوفر فوز Purfview Whisper-Finible المكتبات NVIDIA المطلوبة لنظام التشغيل Windows & Linux في أرشيف واحد. فك ضغط الأرشيف ووضع المكتبات في دليل مدرج في PATH .
لإعداد وتشغيل المشروع ، اتبع هذه الخطوات:
git clone https://github.com/savbell/whisper-writer
cd whisper-writer
python -m venv venv
# For Linux and macOS:
source venv/bin/activate
# For Windows:
venvScriptsactivate
pip install -r requirements.txt
python run.py
في التشغيل الأول ، يجب أن تظهر نافذة الإعدادات. بمجرد تكوينها وحفظها ، سيتم فتح نافذة أخرى. اضغط على "ابدأ" لتفعيل مستمع لوحة المفاتيح. اضغط على مفتاح التنشيط ( ctrl+shift+space بشكل افتراضي) لبدء التسجيل والنسخ إلى النافذة النشطة.
يستخدم WhisperWriter ملف تكوين لتخصيص سلوكه. لإعداد التكوين ، افتح نافذة الإعدادات:

use_api : تبديل لاختيار ما إذا كنت تريد استخدام API Openai أو نموذج همس محلي للنسخ. (افتراضي: false )
common : الخيارات الشائعة في كل من API والنماذج المحلية.
language : رمز اللغة للنسخ بتنسيق ISO-639-1. (افتراضي: null )temperature : يتحكم في العشوائية لإخراج النسخ. القيم المنخفضة تجعل الإخراج أكثر تركيزًا وحتمية. (افتراضي: 0.0 )initial_prompt : سلسلة تُستخدم كمطالبة أولية لشرط النسخ. مزيد من المعلومات: دليل مطالبة Openai. (افتراضي: null ) api : خيارات التكوين ل API Openai. راجع وثائق Openai API لمزيد من المعلومات.
model : النموذج لاستخدامه للنسخ. حاليا ، فقط whisper-1 متاح. (افتراضي: whisper-1 )base_url : عنوان URL الأساسي لواجهة برمجة التطبيقات. يمكن تغييرها لاستخدام نقطة نهاية واجهة برمجة التطبيقات المحلية ، مثل Localai. (افتراضي: https://api.openai.com/v1 )api_key : مفتاح API الخاص بك ل API Openai. مطلوب لاستخدام API غير المحلي. (افتراضي: null ) local : خيارات التكوين لنموذج الهمس المحلي.
model : النموذج لاستخدامه للنسخ. توفر النماذج الأكبر دقة أفضل ولكنها أبطأ. انظر النماذج واللغات المتاحة. (افتراضي: base )device : الجهاز لتشغيل نموذج الهمس المحلي. استخدم cuda لـ NVIDIA GPUs ، cpu لمعالجة وحدة المعالجة المركزية فقط ، أو auto للسماح للنظام باختيار أفضل جهاز متاح تلقائيًا. (افتراضي: auto )compute_type : نوع الحساب المراد استخدامه لنموذج الهمس المحلي. مزيد من المعلومات حول القياس الكمي هنا. (افتراضي: default )condition_on_previous_text : تعيين إلى true لاستخدام النص الذي تم نقله مسبقًا كموجه لطلب النسخ التالي. (افتراضي: true )vad_filter : قم بتعيين true لاستخدام تصفية اكتشاف النشاط الصوتي (VAD) لإزالة الصمت من التسجيل. (افتراضي: false )model_path : المسار إلى نموذج الهمس المحلي. إذا لم يتم تحديدها ، سيتم تنزيل النموذج الافتراضي. (افتراضي: null ) activation_key : اختصار لوحة المفاتيح لتنشيط عملية التسجيل والنسخ. مفاتيح منفصلة مع A + . (افتراضي: ctrl+shift+space )input_backend : الواجهة الخلفية للإدخال لاستخدامها للكشف عن مكابس المفاتيح. سيحاول auto استخدام أفضل الواجهة الخلفية المتاحة. (افتراضي: auto )recording_mode : وضع التسجيل للاستخدام. تتضمن الخيارات continuous (تسجيل Restart التلقائي بعد الإيقاف المؤقت في الكلام حتى يتم الضغط على مفتاح التنشيط مرة أخرى) ، voice_activity_detection (توقف عن التسجيل بعد الإيقاف المؤقت في الكلام) ، press_to_toggle (توقف عن التسجيل عند الضغط على مفتاح التنشيط مرة أخرى) ، hold_to_record (توقف عن التسجيل عند إصدار مفتاح التنشيط). (افتراضي: continuous )sound_device : الفهرس الرقمي لجهاز الصوت لاستخدامه للتسجيل. للعثور على أرقام الأجهزة ، قم بتشغيل python -m sounddevice . (افتراضي: null )sample_rate : معدل العينة في HZ لاستخدامه للتسجيل. (افتراضي: 16000 )silence_duration : المدة في مللي ثانية لانتظار الصمت قبل إيقاف التسجيل. (افتراضي: 900 )min_duration : الحد الأدنى للمدة في مللي ثانية لتكون تسجيل. تسجيلات أقصر من هذا سيتم التخلص منها. (افتراضي: 100 ) writing_key_press_delay : التأخير في الثواني بين كل مفتاح اضغط عند كتابة النص المكتوب. (افتراضي: 0.005 )remove_trailing_period : اضبط على true لإزالة الفترة الخلفية من النص المكتوب. (افتراضي: false )add_trailing_space : قم بتعيين true لإضافة مساحة إلى نهاية النص المكتوب. (افتراضي: true )remove_capitalization : اضبط على true لتحويل النص المكتوبة إلى أحرف صغيرة. (افتراضي: false )input_method : طريقة استخدامها لمحاكاة إدخال لوحة المفاتيح. (افتراضي: pynput ) print_to_terminal : اضبط على true لطباعة حالة البرنامج النصي والنص المكتوبة إلى المحطة. (افتراضي: true )hide_status_window : اضبط على true لإخفاء نافذة الحالة أثناء العملية. (افتراضي: false )noise_on_completion : تم تعيينه على true لتشغيل ضوضاء بعد كتابة النسخ. (افتراضي: false )إذا كانت أي من خيارات التكوين غير صالحة أو غير متوفرة ، فسيستخدم البرنامج القيم الافتراضية.
يمكنك رؤية جميع المشكلات المبلغ عنها ووضعها الحالي في تعقب القضية لدينا. إذا واجهت مشكلة ، فيرجى فتح مشكلة جديدة مع وصف مفصل وخطوات استنساخ ، إن أمكن.
فيما يلي الميزات التي أخطط لإضافتها في المستقبل القريب:
فيما يلي ميزات غير مخططة حاليًا:
يمكن العثور على الميزات المنفذة في Changelog.
المساهمات مرحب بها! لقد قمت بإنشاء هذا المشروع لاستخدامي الشخصي ولم أتوقع أن يحصل على الكثير من الاهتمام ، لذلك لم أبذل الكثير من الجهد في الاختبار أو جعل من السهل على الآخرين المساهمة. إذا كانت لديك أفكار أو اقتراحات ، فلا تتردد في فتح طلب سحب أو إنشاء مشكلة جديدة. سأبذل قصارى جهدي للمراجعة والرد كما يسمح الوقت.
تم ترخيص هذا المشروع بموجب ترخيص GNU العام. انظر ملف الترخيص للحصول على التفاصيل.