نرم افزار تشخیص ارقام پیوسته (ارقام 0-9)

Connected Word Recognition

نوشته شده توسط:

سعيد کريم آبادی

skarimabadi at gmail.com

karimabadi at mehr.sharif.edu

http://saeed.karimabadi.ir/Projects/DTW

http://saeed.karimabadi.ir/Projects/CWR

 

 

نسخه 0.0.1 قابل اجرا در محيط MATLAB

نسخه PDF این صفحه

 

مقدمه:


این نرم افزار جهت تشخیص ارقام پیوسته با استفاده از الگوریتم 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

-        اضافه کردن تشخیص بر اساس مدل های پارامتری دیگر