نرم
افزار تشخیص ارقام
پیوسته (ارقام 0-9)
Connected Word Recognition
نوشته شده
توسط:
سعيد کريم
آبادی
http://saeed.karimabadi.ir/Projects/DTW
http://saeed.karimabadi.ir/Projects/CWR
نسخه
0.0.1 قابل اجرا در
محيط MATLAB
مقدمه:

این نرم افزار
جهت تشخیص ارقام
پیوسته با استفاده
از الگوریتم DTW (Dynamic Time Warping) در
محیط Matlab نوشته
شده است. این برنامه
به منظور
تشخیص ارقام 0
تا 9 طراحی
گردیده و در
ابتدا از 10 عدد
فایل صوتی
مرجع که قبلا
ذخیره گردیده
استفاده می
کند و با
استفاده از
ضرایب کپسترال (Mel-Frequency Cepstral Coefficients)
ابتدا 12
پارامتر را از
هر فایل
اسخراج می
نماید. سپس با
در نظر گرفتن Log Energy به
عنوان یکی
دیگر از
پارامترها و
با گرفتن مشتق
اول و مشتق
دوم (Delta and Delta-Delta) در
مجموع به 39 پارامتر
برای هر نمونه
مرجع می رسد.
کل این پارامترها
در فایلی به
نام Refrences.mat
ذخیره می شود
که در اجراهای
بعدی برنامه
می توان
به جای آموزش
برنامه از این
فایل استفاده
کرد.
در
پروژه قبل هدف
تشخیص کلمات
گسسته و
جداگانه بود
که روش ارائه
شده بر روی
ارقام تست
گردید. در
قسمت دوم سعی
بر تشخیص
کلمات بهم
چسبیده می
باشد. بدین
صورت که
گوینده چندین
کلمه از کلماتی
که در حافظه
مرجع سیستم
وجود دارد را
تلفظ می نماید
و نرم افزار
وظیفه تشخیص
آنها را بر عهده
دارد. می توان
اینگونه فرض
کرد که جمله
بیان شده شامل
مجموعه ای از
کلمات تست به
شکل زیر می
باشد:
![]()
و مانند
حالت قبل
سیستم دارای
مجموعه ای از
کلمات مرجع می
باشد که بصورت
زیر نمایش
داده می شوند:
![]()
که در
اینجا مساله
عبارت است از
پیدا کردن
بهترین
مجموعه از کلمات
مرجع که بخوبی
بیانگر جمله
تست باشد:
![]()
الگوریتم
های موجود:
·

Two-level dynamic programming approach

·

Level building approach


·
One-stage approach and subsequent generalizations

الگوریتم
ارائه شده:
یکی
از مشکلات در
تشخیص ارقام
به هم پیوسته
این است که
دقیقا محل
ابتدا و انتها
هر کلمه در
جمله بیان شده
مشخص نیست و
بدین ترتیب
برای تشخیص
کلمه اگر فرض
کنیم قرار است
یک پنجره را
بر روی جمله
بیان شده قرار
دهیم، این
پنجره هم
شروعش معلوم
نیست و متغیر
است و هم طول
آن نا معلوم و
متغیر است.
بنابراین
میزان محاسبه
لازم بسیار
بالا و غیر
معقول است که
هر یک از سه
روش فوق
راه حلی جهت
کاهش این محاسبات
ارائه می
دهند. با
استفاده از
مفهوم تشخیص
سکوت و ایده
روش دو مرحله
ای برنامریزی
پویا روشی جهت
کاهش محاسبات
استفاده
گردیده است.
بدین ترتیب که
مراحل مختلف
الگوریتم به
شرح زیر می
باشد:
1- مقدار
Search_Begin
(نقطه شروع
فریمی که می
خواهیم آن را
با یک رقم تطابق
بدهیم و
شناسایی کنیم)
را برابر شروع
فایل صوتی
مورد تست قرار
می دهیم.
2- فریم
های بیانگر
سکوت را حذف
می کنیم تا به
یک فریم با
انرژی بالاتر
از سطح آستانه
برسیم. اشاره
گر Search_Begin را بروز
می کنیم تا به
این نقطه از
گفتار اشاره
کند.
3- برای
تشخیص هر رقم
نیاز داریم تا
یک پنجره بر روی
کل صدای ضبط
شده قرار دهیم
و یک قسمت را
برای تست
انتخاب کنیم.
برای این کار
نقطه شروع
قطعه انتخابی
بدست آمده
است. حال چون
ممکن است طول
زمان رقم گفته
شده برابر
نمونه های مرجع
نباشد، با
تغییر تقطه
پایانی قطعه
انتخابی Search_Endو تشخیص
هر کدام از
این قطعات
صوتی با نمونه
های مرجع (با
استفاده از
الگوریتم DTW پروژه قبل)
بهترین
کاندید تشخیص داده
می شود.
4- پس از
پیدا کردن
نقطه انتهایی
رقم قبلی، با
استفاده از
الگوریتمی بر
عکس الگوریتم
تشخیص سکوت،
فریم های
باقیمانده از
رقم قبلی را
رد می کنیم.
(آنقدر جلو می
رویم تا
دوباره به
سکوت برسیم و
در ضمن یک
مقدار آستانه
نیز برای رد
نکردن بی مورد
ارقام بعدی در
نظر گرفته
ایم)
5- اگر
به انتهای
فایل صوتی
رسیده ایم پس
تمام ارقام
تشخیص داده
شده اند در
غیر این صورت
از مرحله 2
الگوریتم را
تکرار می
کنیم.
برنامه
دارای رابط
گرافیکی (GUI) برای
تسهیل کاربرد
می باشد.
برای اجرای
این برنامه
باید ابتدا برنامه
Run را از
داخل محیط Matlab اجرا
کرد. ظاهر
برنامه به شکل
زیر می باشد:

دکمه Load Wav File: جهت باز
کردن نمونه
فایل صوتی با
فرمت wav
استفاده می
شود.

دکمه Play: جهت پخش
صدای فایل باز
شده و یا ضبط
شده از میکروفن
استفاده می
شود.
دکمه Record: جهت ضبط
صدا از
میکروفن با
نرخ 16000 سیمبل بر
ثانیه و بمدت
یک ثانیه
استفاده می شود.
پس از اتمام
ضبط صدا,
اطلاعات به
فرمت wav
در فایلی به
نام Test.wav
ذخیره می شود و اطلاعات
سیگنال صوتی
نمایش داده می
شوند.
دکمه Recognize: جهت
تشخیص و
مقایسه صدای
فایل باز شده
و یا ضبط شده
از میکروفن با
نمونه صداهای
مرجع استفاده می
شود که در
پایان
الگوریتم
منحنی مشابهت
های پارامترهای
صوت مورد
آزمایش با
اصوات مرجع نمایش
داده می شود. و
فاصله های
متناظر که از
خروجی تابع DTW بدست
آمده اند در
صفحه MATLAB
چاپ می شوند. این
صفحه متناظر
با هریک از
ارقام تشخیص
داده شده
تکرار می
گردد.
.
تست
برنامه:
خروجی
تست برای یک
نمونه تست
شامل ارقام 1205
بصورت زیر می
باشد.

Test
Filename:C:\src\CWR\1205.wav
====================================================================
Start recognizing ...
FS =512
^^^^^^^^^^^^^^^^^^^^^^^
energy(1) =6.7025e-005
energy(513) =4.5596e-005
energy(1025) =5.4895e-005
energy(1537) =5.7681e-005
energy(2049) =3.6058e-005
energy(2561) =5.9723e-005
energy(3073) =4.6838e-005
energy(3585) =4.847e-005
energy(4097) =6.0532e-005
energy(4609) =4.8473e-005
energy(5121) =6.9828e-005
energy(5633) =0.0001884
energy(6145) =0.0023975
Fe_Search_begin =11477 Fe_Search_end =19476
Fb =6145
Fe =11477
==================> Digit#1 is: "1" Distance=3.6692
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(11477) =0.0001452
^^^^^^^^^^^^^^^^^^^^^^^
energy(11477) =0.0001452
energy(11989) =4.5328e-005
energy(12501) =6.2273e-005
energy(13013) =5.9917e-005
energy(13525) =4.1423e-005
energy(14037) =6.4269e-005
energy(14549) =4.2542e-005
energy(15061) =5.2548e-005
energy(15573) =5.9801e-005
energy(16085) =0.00036583
Fe_Search_begin =21417 Fe_Search_end =29416
Fb =16085
Fe =21417
==================> Digit#2 is: "2" Distance=5.3665
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(21417) =0.017971
energy(21929) =0.0082746
energy(22441) =0.0010512
energy(22953) =0.00010273
^^^^^^^^^^^^^^^^^^^^^^^
energy(22953) =0.00010273
energy(23465) =4.533e-005
energy(23977) =6.7888e-005
energy(24489) =5.4574e-005
energy(25001) =4.8383e-005
energy(25513) =5.3287e-005
energy(26025) =3.7541e-005
energy(26537) =4.6818e-005
energy(27049) =4.8501e-005
energy(27561) =4.0213e-005
energy(28073) =5.6314e-005
energy(28585) =6.6337e-005
energy(29097) =0.00019501
energy(29609) =5.7299e-005
energy(30121) =8.8282e-005
energy(30633) =0.0002855
Fe_Search_begin =35965 Fe_Search_end =43964
Fb =30633
Fe =38013
==================> Digit#3 is: "0" Distance=3.1849
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(38013) =0.00029995
^^^^^^^^^^^^^^^^^^^^^^^
energy(38013) =0.00029995
Fe_Search_begin =43345 Fe_Search_end =51344
Fb =38013
Fe =50001
==================> Digit#4 is: "5" Distance=2.9493
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(50001) =5.4856e-005
^^^^^^^^^^^^^^^^^^^^^^^
energy(50001) =5.4856e-005
energy(50513) =6.1612e-005
energy(51025) =6.3891e-005
energy(51537) =4.4176e-005
energy(52049) =5.0773e-005
energy(52561) =4.7533e-005
energy(53073) =4.3618e-005
energy(53585) =6.285e-005
energy(54097) =4.6476e-005
energy(54609) =4.9722e-005
energy(55121) =4.6493e-005
energy(55633) =4.7809e-005
energy(56145) =4.8752e-005
energy(56657) =3.9084e-005
energy(57169) =5.0154e-005
energy(57681) =4.0166e-005
energy(58193) =4.6234e-005
energy(58705) =5.3705e-005
energy(59217) =3.9999e-005
energy(59729) =4.1613e-005
energy(60241) =3.3624e-005
energy(60753) =3.3769e-005
energy(61265) =4.3111e-005
energy(61777) =3.8238e-005
energy(62289) =4.3331e-005
energy(62801) =3.0594e-005
energy(63313) =3.2037e-005
Fe_Search_end =
64000
energy(63825) =1.6923e-005
End of file reached(Fe_Search_end=64000)
########################################################
نمونه
بعدی برای
تشخیص عدد 987
Test
Filename:C:\src\CWR\987.wav
====================================================================
Start recognizing ...
FS =512
^^^^^^^^^^^^^^^^^^^^^^^
energy(1025) =0.00095461
Fe_Search_begin =6357 Fe_Search_end =14356
Fb =1025
Fe =6869
==================> Digit#1 is: "9" Distance=2.1482
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(7893) =0.00015776
^^^^^^^^^^^^^^^^^^^^^^^
energy(20693) =0.0053232
Fe_Search_begin =26025 Fe_Search_end =34024
Fb =20693
Fe =26025
==================> Digit#2 is: "8" Distance=3.6863
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(27049) =0.00016968
^^^^^^^^^^^^^^^^^^^^^^^
energy(37289) =0.00046094
Fe_Search_begin =42621 Fe_Search_end =50620
Fb =37289
Fe =42621
==================> Digit#3 is: "1" Distance=4.7948
*******************************************************
VVVVVVVVVVVVVVVVVVVVVVV
energy(44669) =0.0001169
^^^^^^^^^^^^^^^^^^^^^^^
Fe_Search_end =
64000
End of file reached(Fe_Search_end=64000)
########################################################
کارهای
باز:
-
قابلیت
تشخیص صدا
بصورت On-Line
-
اضافه
کردن تشخیص بر
اساس مدل های
پارامتری دیگر