تبدیل صدا به متن با استفاده از جاوا اسکریپت

سه شنبه 19 دی 1396

در این مقاله می خواهیم با استفاده از API Speech Web یک رابط قدرتمند که به شما این اجازه را می دهد که بتوانید صحبت و گفتار خودتان را به متن نوشتاری تبدیل کنید و از آن در پروژه های خودتان استفاده کنید.

تبدیل صدا به متن با استفاده از جاوا اسکریپت

در این Api 3 قابلیت و توانایی وجود دارد که می توان آن را به صورت زیر تقسیم بندی کرد:

1-یکی از قابلیت ها این است که بتواند صوت را به متن تبدیل کند و بتوان آن را در کیبورد استفاده کرد.

2-اینکه بتوان یادداشت ها را در local storage (حافظه محلی)ذخیره کرد.

3-همه نوشته ها را نشان می دهد و گزینه ای را برای گوش دادن به آن ها از طریق Synthesis فراهم می کند.

ما نمی خواهیم از هیچ وابستگی استفاده کنیم فقط باید شما از جی کوئری برای ساده کردن عملیات DOMو از یک style css استفاده کنید ما برای این کار از CDN استفاده می کنیم ، و نیازی نیست که برای درست کردن این پروژه ی کوچک از NPM استفاده شود

کد های Html,Css ساده هستند بنابر این ما نیاز به جستجوی این ها نداریم برای همین شما باید کد های جاوا اسکریپت را دانلود نمایید.

تبدیل صدا به متن

در API که ما استفاده می کنیم به نام Web Speech ، از SpeechRecognition برای درک صدای انسان و تبدیل گفتار صدای انسان به متن ، SpeechSynthesis برای خواندن رشته با صدای بلند و تایپ کردن آن در یک کیبورد در سیستم است

این api جدید یک امکان و ویژگی رایگان است که متنی را که یک کاربر بلند آن را بخواند به متن تبدیل می کند هم چنین نقطه و ویرگول و علامت سوال را هم می تواند تشخیص بدهد و تمام جملاتی که یک انسان بیان کرده است را یادداشت می کند

اولین کار این است که بدانیم کاربر آیا به این api دسترسی دارد یا نه؟ و متاسفانه فقط مروگر های کروم و فایر فاکس این را پشتیبانی می کند

برای همین باید از قطعه کد زیر استفاده کنید:

try {
  var SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
  var recognition = new SpeechRecognition();
}
catch(e) {
  console.error(e);
  $('.no-browser-support').show();
  $('.app').hide();
}

متغییر recognition  تمام ویژگی های api را برای ما مشخص می کند ،به عنوان مثال ما در اینجا مشخص می کنیم که حتما یک مکثی در کلام کاربر باشد تا بتواند صدا را به متن تبدیل کند و بنابر این کاربر برای تبدیل گفتار به متن نیاز به یک مکث طولانی در بین کلماتش دارد.

در زیر ما از رویداد های تشخیص صدا می خواهیم استفاده کنیم که به صورت زیر است

recognition.onstart = function() { 
  instructions.text('Voice recognition activated. Try speaking into the microphone.');
}

recognition.onspeechend = function() {
  instructions.text('You were quiet for a while so voice recognition turned itself off.');
}

recognition.onerror = function(event) {
  if(event.error == 'no-speech') {
    instructions.text('No speech was detected. Try again.');  
  };
}

ببینید این رویداد ها به شما این اجازه را می دهد که زمانی که کاربر سریع صحبت کرد متن را به عنوان پیش نویس نگه دارد و می تواند آن را به عنوان یک متغییر جهانی یا global ذخیره کند و در یک textarea  آن را نمایش دهد

recognition.onresult = function(event) {

  // event is a SpeechRecognitionEvent object.
  // It holds all the lines we have captured so far. 
  // We only need the current one.
  var current = event.resultIndex;

  // Get a transcript of what was said.
  var transcript = event.results[current][0].transcript;

  // Add the current transcript to the contents of our Note.
  noteContent += transcript;
  noteTextarea.val(noteContent);
}

کد بالا کمی ساده شده است یک خطا در گوشی های اندروید به وجود می آید که باعث می شود همه چیز دوبار تکرار شود هنوز هیچ راه حل رسمی وجود ندارد ولی ما توانستیم بدون هیچ گونه مشکلی کد زیر را حل کنیم که به صورت زیر است:

var mobileRepeatBug = (current == 1 && transcript == event.results[0][0].transcript);

if(!mobileRepeatBug) {
  noteContent += transcript;
  noteTextarea.val(noteContent);
}

ما می توانیم با استفاده از ویژگی های تشخیص صدای مرورگر شروع کنیم و متد start() را صدا بزنیم به صورت زیر:

$('#start-record-btn').on('click', function(e) {
  recognition.start();
});

این باعث می شود که کاربران مجوز دریافت کنند و میکروفون دستگاه فعال شود

اکثر api هایی که نیاز به اجازه ی کاربر دارند بر روی سرورهای غیر امن کار نمی کنند باید شما حتما از HTTPS استفاده نمایید

مرورگر برای یک لحظه گوش می دهد و هر عبارتی را رونویسی می کند، Api چند ثانیه متوقف می شود و بعد دوباره خودکار شروع به گوش دادن می کند.

$('#pause-record-btn').on('click', function(e) {
  recognition.stop();
});

تا اینجا گفتار به متن انجام شد حالا می خواهیم متن به گفتار را انجام دهیم

تبدیل متن به گفتار

گفتار Synthesys در واقع بسیار آسان است، این Api می تواند از طریق شی speechSynthesis صدا را ضبط یا متوقف کند هم چنین ویژگی های مثل تغییر در صدا و در سرعت صدا هم وجود دارد.

با استفاده از متد speaking () شما می توانید یک کلاس به صورت زیر تعریف کنید که کد کامل آن به صورت زیر است

function readOutLoud(message) {
  var speech = new SpeechSynthesisUtterance();

  // Set the text and voice attributes.
  speech.text = message;
  speech.volume = 1;
  speech.rate = 1;
  speech.pitch = 1;

  window.speechSynthesis.speak(speech);
}

هنگامی که تابع صدا زده می شود متن دریافت شده را می تواند بخواند و به بهترین شکل به صوت تبدیل می نماید.

نتیجه:

در آخر می توان این نتیجه را گرفت که در آینده ربات هایی بتوانند به جای انسان ها صحبت کنند و هر متنی که به آن ها داده می شود را بتوانند به گفتار تبدیل کنند

هم چنین کنترل کردن صدا می تواند یکی از قابلیت های خوب باشد و علاوه بر آن برای کسانی که مشکل بینایی دارد می توانند صدا را به گفتار و گفتار را به متن تبدیل نمایند.

علاوه بر آن این api ها با هر زبان مختلف و هر لهجه ای می تواند کار کند فقط تنها مشکل این است که متاسفانه هنوز همه ی مرورگر ها نمی توانند آن ها را پشتیبانی کنند .

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید