كيفية تحويل النص العربي لصوت باستخدام البرامج الحرة

نشره Fahad في الأحد, 2017/12/10 - 9:39ص

يواصل الأستاذ طه زروقي (أستاذ بجامعة البويرة في الجزائر، مستشار في المعلوماتية،  مهتم بالمصادر المفتوحة، ومن العاملين دعم  اللغة العربية) دعمه للغة العربية في المصادر الحرة، واليوم يقدم شرحا مفصلا لكيفية تحويل النص العربي إلى الصوت باستخدام البرمجيات الحرة، المقالة نشرت هنا أولا.

مقدمة

يهدف هذا المشروع إلى دعم العربية في نظم النطق (تحويل النص إلى كلام) ويصف الطريقة التي تسمح بتشغيلها معا. أي تشغيل قارئ الشاشة بلغة عربية بمستوى جيد بأدوات مفتوحة المصدر.

إلام نحتاج؟

نحتاج إلى الأدوات الآتية:

  1. نظام النطق إسبيك مع دعم العربية
  2. Mbrola نظام النطق وأصواته
  3. قارئ للشاشة
  4. نظام توزيع الكلام
  5. برنامج تشكيل

سنتحتاج إلى تشغيل نظام النطق إسبيك مزود بدعم للغة العربية، ثم نثريه بأصوات عربية من نظام النطق Mbrola للحصول على صوت أفضل. سنحتاج أيضا إلى مشكّل آلي للنصوص العربية باستعمال برنامج مشكال مفتوح المصدر. كما سنحاول تشغيل قارئ الشاشة Orca، ونظام إرسال الكلام speech dispatcher لاعتماده برنامجا وسيطا يسمح للتطبيقات الأخرى من تشغيل نظام النطق.

نهدف إلى الحصول على نطق صوت عربي جيد وصحيح قدر الإمكان مشكّل

التثبيت

نظام النطق إسبيك بدعم العربية

نظام eSpeakNG، نظام متراص مفتوح المصدر، نظام نطق على وندوز ولينكس ومنصات أخرى. يعتمد على طريقة التركيب على المباني Formant، يدعم لغات عديدة منها العربية منذ الإصدار 1.49.2، هو نظام متراص حجمه صغير. معظم دعم اللغات في النظام مبني على ملفات للقواعد صممها مطورون متحدثون أصليون لتلك اللغات.

لتثبيت البرنامج يرجى الاطلاع على توثيق espeak-ng.

للإصدارات السابقة، يمكن تحميل ملفات مجهزة من ar-espeak. اختر ما يناسب رقم إصدار برنامجك.

مثلا: أنا أستخدم الإصدار 1.48.03 على حاسوبي، لذا حمّلت الملف المضغوط espeak-data zipped file

 
  $wget https://sourceforge.net/projects/arabic-espeak/files/espeak-data1.48.03.zip/download
  $ unzip espeak-data1.48.03.zip
  $ cp -R espeak-data ~

أولا، ننول الملف ثم نفك ضغطه، ثم ننسخ المجلد espeak-data إلى مجلد المستخدم. نظام إسبيك يفحص وجود المجلد espeak-data أولا في مجلد المستخدم، ليستخدمه.

فلنجرب النظام بالأمر التالي لقراءة نص باللغة الإنجليزية

$espeak -v en "Hello world"

إذا نجح، يمكن عرض كل اللغات المدعومة، تحقق أن ألعربية موجودة.

$espeak --voices

إن كانت العربية مذكورة في القائمة، جرّب:

$espeak -v ar "السلام عليكم"

برنامج إسبيك سيعتمد على مجلد espeak-data في منزل المستخدم أولا ثمّ على مجلد الإعدادات النظامية في المجلد: usr/share/doc/espeak-data/.

مجلد espeak-data يحتوي على ملفات مجهزة ccompiled وملف الصوتيات وقاعدة بيانات الفونيمات التي سيستعملها إسبيك، عليك الانتباه لرقم الإصدار.

ننصح باستعمال الإصدارات الأحدث..

Mbrola

يمكن تجاوز هذه الفقرة إن كنت لا ترغب في استعمال أمبرولا أو لا تستطيع لسبب ما

نظام MBROLA خوارزمية لتركيب الكلام، موزعة برخصة للأغراض غير التجارية، وهو مشروع تعاوني عبرالعالم. موقع أمبرولا يقدم قواعد بيانات للأصوات للغات واسعة الانتشار عبر العالم. الأصوات العربية لنظام أمبرولا أفضل حاليا من أصوات أسبيك الأصلية.

عليك أولا تثبيت نظام أمبرولا بواسطة مدير التطبيقات لديك

لتوزيعات دبيان وأوبنتو ومشتقاتها:

sudo apt-get install mbrola

توزيعة Archlinux:

$ sudo pacman -S mbrola

لتوزيعة Archlinux على نظام راسبيري

cd /tmp
git clone git@github.com:saez0pub/mbrola-archlinux-rasberrypi.git
cd mbrola-archlinux-rasberrypi
makepkg -s
sudo pacman -U ./mbrola-3.02b-4-armv6h.pkg.tar.xz

الآن جرب امبرولا بالأمر

$ mbrola

لتشغيل أمبرولا تحتاج إلى بعض الأصوات

الإنجليزية:

بعد التحميل، ضع الملفين ar1, ar2 في المجلد المناسب

Debian/Ubuntu/ Archlinux

$ mkdir -p /usr/share/mbrola/voices
$ cp ar1 /usr/share/mbrola/voices/
$ cp ar2 /usr/share/mbrola/voices/

الآن، جرب إسبيك بطعم أمبرول

$ espeak -v mb-en1 "Hello World"
$ espeak -v mb-ar1 "السلام عليكم"

إعداد قارئ الشاشة

نحتاج إلى قارئ الشاشة Orca. يمكن بعد تثبيت أوركا تشغيله بالأمر في سطر الوامر على مدير النوانذ (سطح المكتب)

$ orca -s

تحصل على النافذة الآتية

اختر من لسان voice، اختر الشخض المناسب لك. واخرت صوت العربية.

لتجربة أوركا بالإعدادات الجديدة استعمل الأمر الآتي

$orca -r

برنامج التشكيل

من أجل الحصول على نطق أفضل، نقترح إضافة مشكّل آلي للنصوص (برنامج تشكيل). النصوص العربية تأتي في الأغلب غير مشكولة، لذا يستحسن تشكيلها قبل نطقها آليا، لذا سنستعمل برنامج التشكيل الآلي مشكال كوسيط يحضّر النص قبل تمريره لنظام النطق.

برنامج مشكال مصمم بلغة بيثون ويوفر واجهات على سطر الأوامر، وسطح المكتب وواجهة وب.

سنستعمل سطر الأوامر.

أولا حمّل مشكال من http://mishkal.sourceforge.net، حيث يتوفر بشكل حزم لأنظمة مختلفة. أو حمّل المصدر من مستودعات github

$ git clone https://github.com/linuxscout/mishkal.git

اسنخ المجلد في مجلد العمل، أنا اخترت وضعه في منزل المستخدم.

/home/me/mishkal-master/

شغله بواسطة بيثون 2.7

$python2 mishkal-master/bin/mishkal-console.py 
(C) CopyLeft 2012, Taha Zerrouki
Usage: mishkal-console -f filename [OPTIONS]
       mishkal-console 'السلام عليكم' [OPTIONS]

        [-f | --file = filename]input file to mishkal-console
        [-h | --help]     outputs this usage message
        [-v | --version]  program version
        [-p | --progress]  display progress status

        * Tashkeel Actions
        -------------------
        [-r | --reduced]  Reduced Tashkeel.
        [-s | --strip]    Strip tashkeel (remove harakat).
        [-c | --compare]  compare the vocalized text with the program output

        * Tashkeel Options
        ------------------
        [-l | --limit]    vocalize only a limited number of line
        [-x | --syntax]   disable syntaxic analysis
        [-m | --semantic] disable semantic analysis
        [-i | --ignore]   ignore the last Mark on output words.
        [-t | --stat]     disable statistic tashkeel

This program is licensed under the GPL License

جربه الآن مع نص

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم"
 السِّلَام عَلَيْكُمْ

يمكن تشغيل مشكال على سطح المكتب كتطبيق

$python2 mishkal-master/interfaces/gui/mishkal-gui.py

أو على شكل خدمة وب، هذه الطريقة تمكن المستخدم بتشغيل ما يشبه الموقع الأصلي لمشكال على الخط

$python2 mishkal-master/interfaces/web/mishkal-webserver.py
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080

ثم افتح في المتصفح العنوان التالي : http://127.0.0.1:8080

خدمة الوب هذه تقدم واجهة برمجية ليستعملها المطورون في ربط تطبيقات بالتشكيل.

الدمج

الآن بعد تثيبت وإعداد كل الأدوات، يمكننا محاولة دمج التشكيل في سيرورة النطق.

أولا، نجرب مشكال + أسبيك باستعمال ربط الأوامر

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم" | espeak -v ar

ثانيا، نجرب مشكال مع أسبيك بأصوات أمبرولا

$python2 mishkal-master/bin/mishkal-console.py  "السلام عليكم" | espeak -v mb-ar1

إعداد مرسل الكلام Speech Dispatcher

قم بتثبيت نظام مُرسل الكلام Speech Dispatcher حسب ما يناسب توزيعتك، أو حمّل المصدر المضغوط من http://www.freebsoft.org/speechd

ثم اتبع تعليمات الملف INSTALL .

إعداد المرسل Speech Dispatcher

يمكنك تجاوز هذه الفقرة إلا إذا أردت تخصيص الإعدادات. أفضل طريقة لتثبيت إعدادات مخصصة هي استعمال الأمر spd-conf الذي سيقودك في وضع الإعدادات الأساسية، ويجري بعض الفحوص ويساعد في كشف بعض الأعطال. جرب فقط:

$spd-conf

أبسط طريقة لفحص مرسل الكلام هو الأمرspd-conf -d

أو بالأمر spd-say

مثال

spd-conf -d
spd-say "Hello!"
spd-say -l cs -r 90 "Ahoj"

ربط أمبرولا واسبيك بالمرسل

ملفات الإعدادات ستوضع في المجلد config/speech-dispatcher. في مجلد المنزل للمستخدم.

افحص ملف الإعدادات ‘modules/espeak-mbrola-generic.conf’، وتحقق أن الأصوات المضافة في قسم AddVoice موجودة أصلا، يمكنك التحقق أنها مثبة بالأمر :

ls /usr/share/espeak-data/voices/mb/mb-*

إن لم تكن موجودة أضفها.

تحقق أنّ القسم GenericExecuteString يحوي الأسماء الصحيحة لأصوات أمبرولا وتحقق أنّ المسارات صحيحة.

ارفع تعليق سطر AddModule من أجل espeak-mbrola-generic في ملف الإعدادات ‘speechd.conf’ .

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-generic كمخرج للأصوات للنظام، جربها بالأمر الآتي:

spd-say -o espeak-mbrola-generic -l en Testing

حرر الملف الآتي

nano .config/speech-dispatcher/modules/espeak-mbrola-generic.conf

أضف اللغة العربية في قسم , GenericLanguage وأضف الاسطر الآتية في آخر القائمة

GenericLanguage          "ar" "ar" "utf-8"

اذهب إلى قسم AddVoice وزد الأسطر الآتية

AddVoice        "ar"    "MALE1"        "ar1"
AddVoice        "ar"    "FEMALE1"    "ar1"
AddVoice        "ar"    "MALE1"         "ar2"
AddVoice        "ar"    "FEMALE1"       "ar2"

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-generic كمخرج للأصوات للنظام، جربها بالأمر الآتي:

جرب الآن اللغة العربية

spd-say -o espeak-mbrola-generic -l ar "السلام عليكم"

إضافة التشكيل لمرسل الكلام

حرر الملف الآتي

nano .config/speech-dispatcher/modules/espeak-mbrola-generic.conf

الآن, افحص قسم GenericExecuteSynth

GenericExecuteSynth \
"echo \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/$VOICE/$VOICE - -.au | $PLAY_COMMAND"

يرجى التحقق من أن المسار الآتي يحوي الأصوات المحملة ،

/usr/share/mbrola/$VOICE/$VOICE

مثلا، الإنجليزية موضوعة في

/usr/share/mbrola/en1/en1

إن لم تكن كذلك، ربما عليك تعديل المسار ليصبح كالآتي، مما يعني أن كل الأصوات موجودة في نفس المجلد

/usr/share/mbrola/voices/$VOICE

يصبح الأمر كالآتي

GenericExecuteSynth \
"echo \'$DATA\' | espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/voices/$VOICE - -.au | $PLAY_COMMAND"

يمكننا أن نلاحظ أنّ البيانات النصية التي ستنطق تمر أولا بأمر العرض echo ثم تمر إلى أسبيك ثم إلى أمبرولا، وتوجه إلى مشغل صوتيات.

سنستعمل برنامج التشكيل كمرحلة وسيطة بدلا من echo

الأمر المخصص للتشكيل هو

python2 mishkal-master/bin/mishkal-console.py

وعليه تصبح الإعدادات لعملية معالجة النص كالآتي

# adding mishkal
GenericExecuteSynth \
"python2 mishkal-master/bin/mishkal-console.py \'$DATA\'| espeak -v mb-$VOICE -s $RATE -p $PITCH $PUNCT -q --stdin --pho | mbrola -v $VOLUME -e /usr/share/mbrola/voices/$VOICE - -.au | $PLAY_COMMAND "# adding mishkal

الآن، النص يُشكّل قبل نطقه بنظام تحويل النص إلى كلام.

استأنف برنامج speech-dispatcher واختر الإعداد espeak-mbrola-generic كمخرج للأصوات للنظام، جربها بالأمر الآتي:

جرب الآن اللغة العربية

spd-say -o espeak-mbrola-generic -l ar "السلام عليكم"

من أجل متابعة الأخطاء المحتملة يمكن تشغيل مرسل الكلام بخيار مستوى التنقيح debug

speech-dispatcher -l 4
[Tue Dec  5 15:51:06 2017 : 74036] speechd: Speech Dispatcher 0.8.3 starting
[Tue Dec  5 15:51:06 2017 : 74143] speechd:    Trying to find /run/user/1000/speech-dispatcher
[Tue Dec  5 15:51:06 2017 : 74186] speechd:    Using directory: /run/user/1000/speech-dispatcher for pidfile and logging
[Tue Dec  5 15:51:06 2017 : 74251] speechd: Speech Dispatcher already running.

Speech Dispatcher already running.

هكذا يمكن مراقبة الأخطاء في المجلد

/run/user/1000/speech-dispatcher directory .

إذا سار كل شيء على ما يرام، يمكن تجربة قارئ الشاشة

بدعم من