অফলাইন স্পিচ রিকগনিশনের জন্য ডেটা কীভাবে সরানো যায়। একটি বাস্তব উদাহরণ ব্যবহার করে সার্ভার ছাড়া অতি দ্রুত বক্তৃতা স্বীকৃতি

) হোম অ্যাপ্লায়েন্স নিয়ন্ত্রণের একটি বাস্তব হ্যালো ওয়ার্ল্ড উদাহরণ ব্যবহার করে।
কেন বাড়ির যন্ত্রপাতি? হ্যাঁ, কারণ এই ধরনের উদাহরণের জন্য ধন্যবাদ আপনি যে প্রশংসা করতে পারেন গতি এবং নির্ভুলতাযা ব্যবহার করে অর্জন করা যায় সম্পূর্ণ স্থানীয়সার্ভার ছাড়া বক্তৃতা স্বীকৃতি গুগল এএসআরবা ইয়ানডেক্স স্পিচকিট.
আমি নিবন্ধটির সাথে প্রোগ্রামের সমস্ত উত্স কোড এবং অ্যান্ড্রয়েডের জন্য সমাবেশ নিজেই সংযুক্ত করি।

কেন হঠাৎ?

সম্প্রতি এটি জুড়ে আসার পরে, আমি লেখককে জিজ্ঞাসা করেছি কেন তিনি তার প্রোগ্রামের জন্য সার্ভার-ভিত্তিক স্পিচ স্বীকৃতি ব্যবহার করতে চান (আমার মতে, এটি অপ্রয়োজনীয় ছিল এবং কিছু সমস্যার দিকে পরিচালিত করেছিল)। সেই লক্ষ্যে, আমি কি এমন প্রকল্পগুলির জন্য বিকল্প পদ্ধতির ব্যবহার সম্পর্কে আরও বিশদভাবে বর্ণনা করতে পারি যেখানে কিছু চিনতে হবে না এবং অভিধানে শব্দের একটি সীমাবদ্ধ সেট রয়েছে। এমনকি ব্যবহারিক প্রয়োগের উদাহরণ দিয়েও...

কেন আমাদের ইয়ানডেক্স এবং গুগল ছাড়াও অন্য কিছু দরকার?

সেই খুব "ব্যবহারিক প্রয়োগের" জন্য আমি বিষয়টি বেছে নিয়েছি স্মার্ট হোমের জন্য ভয়েস নিয়ন্ত্রণ.
কেন ঠিক এই উদাহরণ? কারণ এটি ক্লাউড সমাধান ব্যবহার করে স্বীকৃতির উপর সম্পূর্ণরূপে স্থানীয় বক্তৃতা স্বীকৃতির বিভিন্ন সুবিধা দেখায়। যথা:
  • গতি- আমরা সার্ভারের উপর নির্ভর করি না এবং তাই তাদের প্রাপ্যতা, ব্যান্ডউইথ ইত্যাদির উপর নির্ভর করি না। কারণ
  • সঠিকতা- আমাদের ইঞ্জিন শুধুমাত্র সেই অভিধানের সাথে কাজ করে যা আমাদের অ্যাপ্লিকেশনে আগ্রহী, যার ফলে স্বীকৃতির গুণমান বৃদ্ধি পায়
  • দাম- আমাদের সার্ভারে প্রতিটি অনুরোধের জন্য অর্থ প্রদান করতে হবে না
  • ভয়েস অ্যাক্টিভেশন- প্রথম পয়েন্টগুলির একটি অতিরিক্ত বোনাস হিসাবে - আমরা আমাদের ট্রাফিক নষ্ট না করে এবং সার্ভার লোড না করে ক্রমাগত "সম্প্রচার শুনতে" পারি

বিঃদ্রঃ

আমাকে এখনই একটি রিজার্ভেশন করতে দিন যাতে এই সুবিধাগুলি সুবিধা হিসাবে বিবেচিত হতে পারে শুধুমাত্র একটি নির্দিষ্ট শ্রেণীর প্রকল্পের জন্য, আমরা কোথায় আমরা আগেই নিশ্চিত জানি, কোন অভিধান এবং কোন ব্যাকরণ ব্যবহার করে ব্যবহারকারী কাজ করবে। অর্থাৎ, যখন আমাদের নির্বিচারে পাঠ্য চিনতে হবে না (উদাহরণস্বরূপ, একটি এসএমএস বার্তা বা একটি অনুসন্ধান ক্যোয়ারী)। অন্যথায়, ক্লাউড স্বীকৃতি অপরিহার্য।

তাই অ্যান্ড্রয়েড ইন্টারনেট ছাড়াই স্পিচ চিনতে পারে!
হ্যাঁ, হ্যাঁ... শুধুমাত্র জেলিবিনে। এবং শুধুমাত্র আধা মিটার থেকে, আর না। এবং এই স্বীকৃতিটি একই নির্দেশনা, শুধুমাত্র একটি অনেক ছোট মডেল ব্যবহার করে। তাই আমরা এটি পরিচালনা বা কনফিগার করতে পারি না। এবং পরের বার সে আমাদের কাছে কী ফিরে আসবে তা অজানা। যদিও এসএমএসের জন্য ঠিক!

আমরা কি করি?

আমরা হোম অ্যাপ্লায়েন্সের জন্য একটি ভয়েস রিমোট কন্ট্রোল প্রয়োগ করব, যা সঠিকভাবে এবং দ্রুত কাজ করবে, কয়েক মিটার থেকে এমনকি সস্তা, বাজে, খুব সস্তা অ্যান্ড্রয়েড স্মার্টফোন, ট্যাবলেট এবং ঘড়িতেও।
যুক্তি সহজ কিন্তু খুব বাস্তব হবে. আমরা মাইক্রোফোন সক্রিয় করি এবং এক বা একাধিক ডিভাইসের নাম বলি। অ্যাপ্লিকেশনটি তাদের চিনতে পারে এবং বর্তমান অবস্থার উপর নির্ভর করে তাদের চালু এবং বন্ধ করে। অথবা তিনি তাদের কাছ থেকে একটি সৌভাগ্য গ্রহণ করেন এবং এটি একটি মনোরম মহিলা কণ্ঠে উচ্চারণ করেন। উদাহরণস্বরূপ, ঘরে বর্তমান তাপমাত্রা।

ব্যবহারিক অ্যাপ্লিকেশন প্রচুর

সকালে, আপনার চোখ না খুলে, আপনি নাইটস্ট্যান্ডে স্মার্টফোনের স্ক্রিনে আপনার হাতের তালুতে থাপ্পড় দিয়ে বললেন "গুড মর্নিং!" - স্ক্রিপ্ট শুরু হয়, কফি মেকার চালু হয় এবং গুঞ্জন, মনোরম সঙ্গীত বাজানো হয়, পর্দা খোলা।
আসুন প্রতিটি ঘরে দেওয়ালে একটি সস্তা (2 হাজার, আর নয়) স্মার্টফোন ঝুলিয়ে দেই। আমরা কাজের পরে বাড়ি যাই এবং শূন্যে নির্দেশ দিই “স্মার্ট হোম! লাইট, টিভি! - এরপর কি হবে তা বলার দরকার আছে বলে মনে করি না।

ট্রান্সক্রিপশন



ব্যাকরণ কি বর্ণনা করে ব্যবহারকারী কি বলতে পারেন. পকেটফিক্স জানার জন্য, কিভাবেতিনি এটি উচ্চারণ করবেন, ব্যাকরণ থেকে প্রতিটি শব্দের জন্য সংশ্লিষ্ট ভাষার মডেলে এটি কেমন শোনাচ্ছে তা লিখতে হবে। এটাই প্রতিলিপিপ্রত্যেক শব্দ. এটা কে বলে অভিধান.

ট্রান্সক্রিপশন একটি বিশেষ সিনট্যাক্স ব্যবহার করে বর্ণনা করা হয়। উদাহরণ স্বরূপ:
smart uu m n ay j house d oo m

নীতিগতভাবে, কিছুই জটিল নয়। প্রতিলিপিতে একটি ডবল স্বরবর্ণ চাপ নির্দেশ করে। একটি দ্বিগুণ ব্যঞ্জনবর্ণ একটি নরম ব্যঞ্জনবর্ণ যার পরে একটি স্বরবর্ণ থাকে। রাশিয়ান ভাষার সমস্ত শব্দের জন্য সমস্ত সম্ভাব্য সংমিশ্রণ।

এটা স্পষ্ট যে আমরা আমাদের অ্যাপ্লিকেশনে সমস্ত ট্রান্সক্রিপশন আগে থেকে বর্ণনা করতে পারি না, কারণ ব্যবহারকারী তাদের ডিভাইসে যে নামগুলি দেবে তা আমরা আগে থেকে জানি না৷ অতএব, আমরা রাশিয়ান ধ্বনিতত্ত্বের কিছু নিয়ম অনুসারে এই জাতীয় ট্রান্সক্রিপশন তৈরি করব। এটি করার জন্য, আপনি নিম্নলিখিত PhonMapper ক্লাসটি বাস্তবায়ন করতে পারেন, যা ইনপুট হিসাবে একটি স্ট্রিং গ্রহণ করতে পারে এবং এটির জন্য সঠিক ট্রান্সক্রিপশন তৈরি করতে পারে।

ভয়েস অ্যাক্টিভেশন

এটি একটি পূর্বনির্ধারিত বাক্যাংশে (বা বাক্যাংশ) প্রতিক্রিয়া জানানোর জন্য সর্বদা "সম্প্রচার শোনার" জন্য স্পিচ রিকগনিশন ইঞ্জিনের ক্ষমতা। একই সময়ে, অন্যান্য সমস্ত শব্দ এবং বক্তৃতা বাতিল করা হবে। এটি ব্যাকরণ বর্ণনা করা এবং কেবল মাইক্রোফোন চালু করার মত নয়। আমি এখানে এই কাজের তত্ত্ব এবং এটি কীভাবে কাজ করে তার মেকানিক্স উপস্থাপন করব না। আমাকে শুধু বলতে দিন যে সম্প্রতি Pocketsphinx-এ কাজ করা প্রোগ্রামাররা এই ধরনের একটি ফাংশন বাস্তবায়ন করেছে এবং এখন এটি API-তে বাক্সের বাইরে উপলব্ধ।

একটি বিষয় অবশ্যই উল্লেখ করার মতো। একটি সক্রিয়করণ বাক্যাংশের জন্য, আপনাকে শুধুমাত্র প্রতিলিপি নির্দিষ্ট করতে হবে না, উপযুক্ত একটি নির্বাচন করতে হবে সংবেদনশীলতা থ্রেশহোল্ড মান. খুব ছোট একটি মান অনেক মিথ্যা ইতিবাচক দিকে নিয়ে যাবে (এটি তখনই যখন আপনি অ্যাক্টিভেশন বাক্যাংশটি বলেননি, তবে সিস্টেম এটিকে স্বীকৃতি দেয়)। এবং খুব বেশি - অনাক্রম্যতা থেকে। অতএব, এই সেটিং বিশেষ গুরুত্ব. মানের আনুমানিক পরিসীমা - 1e-1 থেকে 1e-40 পর্যন্ত সক্রিয়করণ বাক্যাংশের উপর নির্ভর করে.

প্রক্সিমিটি সেন্সর অ্যাক্টিভেশন

এই কাজটি আমাদের প্রকল্পের জন্য নির্দিষ্ট এবং সরাসরি স্বীকৃতির সাথে সম্পর্কিত নয়। কোডটি সরাসরি প্রধান কার্যকলাপে দেখা যায়।
তিনি বাস্তবায়ন করেন সেন্সর ইভেন্ট লিসেনারএবং পদ্ধতির মুহুর্তে (সেন্সরের মান সর্বাধিকের চেয়ে কম) এটি টাইমার চালু করে, একটি নির্দিষ্ট বিলম্বের পরে সেন্সরটি এখনও অবরুদ্ধ কিনা তা পরীক্ষা করে। এটি মিথ্যা ইতিবাচক দূর করার জন্য করা হয়।
যখন সেন্সরটি আবার অবরুদ্ধ করা হয় না, তখন আমরা স্বীকৃতি বন্ধ করি, ফলাফল পাচ্ছি (নীচের বিবরণ দেখুন)।

এর স্বীকৃতি শুরু করা যাক

Pocketsphinx কনফিগার এবং স্বীকৃতি প্রক্রিয়া চালানোর জন্য একটি সুবিধাজনক API প্রদান করে। এগুলো হলো ক্লাস SpechRecognizerএবং SpeechRecognizer সেটআপ.
স্বীকৃতির কনফিগারেশন এবং লঞ্চটি এইরকম দেখাচ্ছে:

ফোনম্যাপার ফোনম্যাপার = নতুন ফোনম্যাপার(getAssets(). open("dict/ru/hotwords")); ব্যাকরণ ব্যাকরণ = নতুন ব্যাকরণ (নাম, ফোনম্যাপার); grammar.addWords(হটওয়ার্ড); DataFiles dataFiles = নতুন DataFiles(getPackageName(), "ru"); ফাইল hmmDir = নতুন ফাইল(dataFiles.getHmm()); ফাইল ডিক্ট = নতুন ফাইল (dataFiles.getDict()); ফাইল jsgf = নতুন ফাইল(dataFiles.getJsgf()); অনুলিপি সম্পদ(hmmDir); saveFile(jsgf, grammar.getJsgf()); saveFile(dict, grammar.getDict()); mRecognizer = SpeechRecognizerSetup.defaultSetup().setAcousticModel(hmmDir).setDictionary(dict) .setBoolan("-remove_noise", false).setKeywordThreshold(1e-7f) .getRecognizer); mRecognizer.addKeyphraseSearch(KWS_SEARCH, হটওয়ার্ড); mRecognizer.addGrammarSearch(COMMAND_SEARCH, jsgf);

এখানে আমরা প্রথমে সমস্ত প্রয়োজনীয় ফাইলগুলি ডিস্কে অনুলিপি করি (পকেটপশিনক্সের ডিস্কে থাকা ট্রান্সক্রিপশন সহ একটি অ্যাকোস্টিক মডেল, ব্যাকরণ এবং অভিধান প্রয়োজন)। তারপর স্বীকৃতি ইঞ্জিন নিজেই কনফিগার করা হয়। মডেল এবং অভিধান ফাইলের পথ নির্দেশিত হয়, সেইসাথে কিছু পরামিতি (অ্যাক্টিভেশন বাক্যাংশের জন্য সংবেদনশীলতা থ্রেশহোল্ড)। এর পরে, ব্যাকরণ সহ ফাইলের পথ, সেইসাথে অ্যাক্টিভেশন বাক্যাংশটি কনফিগার করা হয়েছে।

আপনি এই কোড থেকে দেখতে পাচ্ছেন, একটি ইঞ্জিন ব্যাকরণ এবং সক্রিয়করণ বাক্যাংশ স্বীকৃতি উভয়ের জন্য কনফিগার করা হয়েছে। কেন এটা করা হয়? যাতে আমরা দ্রুত পরিবর্তন করতে পারি যা আমাদের বর্তমানে চিনতে হবে। সক্রিয়করণ বাক্যাংশ সনাক্তকরণ প্রক্রিয়াটি শুরু করার মতো দেখায়:

MRecognizer.startListening(KWS_SEARCH);
এবং এইভাবে একটি প্রদত্ত ব্যাকরণ অনুসারে বক্তৃতা স্বীকৃত হয়:

MRecognizer.startListening(COMMAND_SEARCH, 3000);
দ্বিতীয় যুক্তি (ঐচ্ছিক) হল মিলিসেকেন্ডের সংখ্যা যার পরে কেউ কিছু না বললে স্বীকৃতি স্বয়ংক্রিয়ভাবে শেষ হয়ে যাবে।
আপনি দেখতে পাচ্ছেন, আপনি উভয় সমস্যা সমাধানের জন্য শুধুমাত্র একটি ইঞ্জিন ব্যবহার করতে পারেন।

কিভাবে স্বীকৃতি ফলাফল পেতে

স্বীকৃতির ফলাফল পেতে, আপনাকে অবশ্যই একটি ইভেন্ট শ্রোতা নির্দিষ্ট করতে হবে যা ইন্টারফেসটি প্রয়োগ করে স্বীকৃতি শ্রোতা.
এটির বেশ কয়েকটি পদ্ধতি রয়েছে যা পকেটফিনক্স দ্বারা বলা হয় যখন একটি ঘটনা ঘটে:
  • অন ​​বিগিনিংঅফ স্পিচ- ইঞ্জিন কিছু শব্দ শুনেছে, সম্ভবত এটি বক্তৃতা ছিল (বা হয়তো না)
  • onEndOfSpeech- শব্দ শেষ
  • আংশিক ফলাফলের উপর- মধ্যবর্তী স্বীকৃতি ফলাফল আছে. একটি সক্রিয়করণ বাক্যাংশের জন্য, এর অর্থ হল এটি কাজ করেছে। যুক্তি হাইপোথিসিস
  • ফলাফলের উপর- স্বীকৃতির চূড়ান্ত ফলাফল। এই পদ্ধতিটি কল করার পরে বলা হবে থামাস্পিচ রিকগনিজার. যুক্তি হাইপোথিসিসস্বীকৃতি তথ্য রয়েছে (স্ট্রিং এবং স্কোর)

onPartialResult এবং onResult পদ্ধতিগুলিকে এক বা অন্যভাবে প্রয়োগ করে, আপনি স্বীকৃতির যুক্তি পরিবর্তন করতে পারেন এবং চূড়ান্ত ফলাফল পেতে পারেন। আমাদের আবেদনের ক্ষেত্রে এটি কীভাবে করা হয় তা এখানে:

@অভাররাইড সর্বজনীন শূন্যতা onEndOfSpeech() ( Log.d(TAG, "onEndOfSpeech"); যদি (mRecognizer.getSearchName().equals(COMMAND_SEARCH)) ( mRecognizer.stop(); ) ) @Override সর্বজনীন শূন্যতা অনঅনপেসিস (যদি (হাইপোথিসিস == নাল) রিটার্ন; স্ট্রিং টেক্সট = hypothesis.getHypstr(); যদি (KWS_SEARCH.equals(mRecognizer.getSearchName())) ( startRecognition(); ) else ( Log.d(TAG, text); ) ) @Override public void onResult(hypothesis hypothesis) ( mMicView.setBackgroundResource(R.drawable.background_big_mic) , "onResult " + পাঠ্য); যদি (COMMAND_SEARCH.equals(mRecognizer.getSearchName())) ( if (text != null) ( Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); প্রক্রিয়া(টেক্সট ); ) mRecognizer.startListening(KWS_SEARCH); ) )

যখন আমরা onEndOfSpeech ইভেন্টটি পাই, এবং একই সময়ে যদি আমরা কার্যকর করার আদেশটি সনাক্ত করি, তাহলে আমাদের স্বীকৃতি বন্ধ করতে হবে, যার পরে অবিলম্বে onResult কল করা হবে।
অন-রেজাল্টে আপনাকে কি সবেমাত্র স্বীকৃত হয়েছে তা পরীক্ষা করতে হবে। যদি এটি একটি কমান্ড হয়, তাহলে আপনাকে এটি কার্যকর করার জন্য চালু করতে হবে এবং অ্যাক্টিভেশন বাক্যাংশটি চিনতে ইঞ্জিনটি স্যুইচ করতে হবে।
onPartialResult-এ আমরা শুধুমাত্র সক্রিয়করণ বাক্যাংশ চিনতে আগ্রহী। যদি আমরা এটি সনাক্ত করি, আমরা অবিলম্বে কমান্ড শনাক্তকরণ প্রক্রিয়া শুরু করি। এটি দেখতে কেমন তা এখানে রয়েছে:

প্রাইভেট সিঙ্ক্রোনাইজ করা অকার্যকর startRecognition() ( যদি (mRecognizer == null || COMMAND_SEARCH.equals(mRecognizer.getSearchName())) রিটার্ন; mRecognizer.cancel(); নতুন ToneGenerator(AudioManager.STREAM_MUSIC.TREAM_MUSICOLToneGenator, To. TONE_CDMA_PIP, 200); post(400, new Runnable() (@Override public void run() ( mMicView.setBackgroundResource(R.drawable.background_big_mic_green); mRecognizer.startListening(COMMAND_SEARCH, "3000), lo.isten(); কমান্ড"); পোস্ট(4000, mStopRecognitionCallback); ) ));)
এখানে আমরা প্রথমে একটি ছোট সংকেত বাজাই যাতে ব্যবহারকারীকে জানানো হয় যে আমরা তার কথা শুনেছি এবং তার আদেশের জন্য প্রস্তুত। এই সময়ে, মাইক্রোফোন বন্ধ করা উচিত। অতএব, আমরা একটি সংক্ষিপ্ত সময়সীমার পরে স্বীকৃতি শুরু করি (সংকেতের সময়কালের চেয়ে কিছুটা দীর্ঘ, যাতে এটির প্রতিধ্বনি শুনতে না পায়)। এটি একটি থ্রেডও শুরু করে যা জোরপূর্বক স্বীকৃতি বন্ধ করে দেবে যদি ব্যবহারকারী খুব বেশিক্ষণ কথা বলে। এই ক্ষেত্রে এটি 3 সেকেন্ড।

কিভাবে স্বীকৃত স্ট্রিংকে কমান্ডে পরিণত করবেন

ওয়েল, এখানে সবকিছু একটি নির্দিষ্ট অ্যাপ্লিকেশন নির্দিষ্ট. নগ্ন উদাহরণের ক্ষেত্রে, আমরা কেবল লাইন থেকে ডিভাইসের নামগুলি বের করি, পছন্দসই ডিভাইসটি অনুসন্ধান করি এবং স্মার্ট হোম কন্ট্রোলারের কাছে একটি HTTP অনুরোধ ব্যবহার করে এর স্থিতি পরিবর্তন করি বা এর বর্তমান অবস্থার প্রতিবেদন করি (যেমন ক্ষেত্রে একটি তাপস্থাপক)। এই যুক্তিটি কন্ট্রোলার ক্লাসে দেখা যায়।

কিভাবে বক্তৃতা সংশ্লেষিত

বক্তৃতা সংশ্লেষণ হল স্বীকৃতির বিপরীত অপারেশন। এখানে এটি অন্যভাবে - আপনাকে পাঠ্যের একটি লাইনকে বক্তৃতায় পরিণত করতে হবে যাতে ব্যবহারকারী এটি শুনতে পারে।
থার্মোস্ট্যাটের ক্ষেত্রে, আমাদের অ্যান্ড্রয়েড ডিভাইসটিকে বর্তমান তাপমাত্রার সাথে কথা বলতে হবে। API ব্যবহার করে TextToSpeechএটি করা বেশ সহজ (রাশিয়ান ভাষার জন্য বিস্ময়কর মহিলা টিটিএসের জন্য গুগলকে ধন্যবাদ):

ব্যক্তিগত অকার্যকর কথা (স্ট্রিং পাঠ্য) ( সিঙ্ক্রোনাইজড (mSpeechQueue) ( ​​mRecognizer.stop(); mSpeechQueue.add(টেক্সট); হ্যাশম্যাপ params = নতুন হ্যাশম্যাপ (2); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UUID.randomUUID().toString()); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC)); params.put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS, "সত্য"); mTextToSpeech.speak(টেক্সট, TextToSpeech.QUEUE_ADD, params); ))

আমি সম্ভবত কিছু সাধারণ বলব, কিন্তু সংশ্লেষণ প্রক্রিয়ার আগে, স্বীকৃতি নিষ্ক্রিয় করা প্রয়োজন. কিছু ডিভাইসে (উদাহরণস্বরূপ, সমস্ত Samsung ডিভাইস) মাইক্রোফোন শোনা এবং একই সময়ে কিছু সংশ্লেষ করা সাধারণত অসম্ভব।
বক্তৃতা সংশ্লেষণের সমাপ্তি (অর্থাৎ, একটি সিনথেসাইজার দ্বারা পাঠ্য বলার প্রক্রিয়ার সমাপ্তি) শ্রোতার মধ্যে ট্র্যাক করা যেতে পারে:

প্রাইভেট ফাইনাল TextToSpeech.OnUtteranceCompletedListener mUtteranceCompletedListener = নতুন TextToSpeech.OnUtteranceCompletedListener() (@Override public void onUtteranceCompleted(স্ট্রিং utteranceId) (Synchronized) (Synchronized); (mSpeechQueue.isEmpty()) ( mRecognizer.startListening( KWS_SEARCH) ; ) ) ) );

এটিতে, আমরা কেবল সংশ্লেষণের সারিতে অন্য কিছু আছে কিনা তা পরীক্ষা করি এবং অন্য কিছু না থাকলে অ্যাক্টিভেশন বাক্যাংশ স্বীকৃতি সক্ষম করি।

এবং এটা সব?

হ্যাঁ! আপনি দেখতে পাচ্ছেন, পকেটফিক্সের মতো দুর্দান্ত প্রকল্পগুলির উপস্থিতির জন্য ধন্যবাদ, ডিভাইসে সরাসরি এবং দক্ষতার সাথে বক্তৃতা সনাক্ত করা মোটেও কঠিন নয়। এটি একটি খুব সুবিধাজনক API প্রদান করে যা ভয়েস কমান্ড সনাক্তকরণ সম্পর্কিত সমস্যা সমাধানে ব্যবহার করা যেতে পারে।

এই উদাহরণে, আমরা একটি সম্পূর্ণ নির্দিষ্ট কাজের সাথে স্বীকৃতি সংযুক্ত করেছি - স্মার্ট হোম ডিভাইসের ভয়েস নিয়ন্ত্রণ. স্থানীয় স্বীকৃতির কারণে, আমরা খুব উচ্চ গতি অর্জন করেছি এবং ত্রুটিগুলি কমিয়েছি৷
এটা স্পষ্ট যে একই কোড অন্যান্য ভয়েস-সম্পর্কিত কাজের জন্য ব্যবহার করা যেতে পারে। এটি একটি স্মার্ট হোম হতে হবে না.

  • ভয়েস নিয়ন্ত্রণ
  • ভয়েস ইঞ্জিন
  • ট্যাগ যুক্ত

    আপডেট করা হয়েছে: সোমবার, জুলাই 31, 2017

    পেশাদার ফটোগ্রাফির সাথে কম্পিউটারে কথা বলার আধা-চমত্কার ধারণাটির কী সম্পর্ক? প্রায় কিছুই নয়, যদি না আপনি মানুষের সমগ্র প্রযুক্তিগত পরিবেশের অবিরাম বিকাশের ধারণার অনুরাগী না হন। এক মুহূর্তের জন্য কল্পনা করুন যে আপনি ফোকাল লেন্থ পরিবর্তন করতে এবং অর্ধেক স্টপ প্লাসের এক্সপোজার সংশোধন করতে আপনার ক্যামেরাকে ভয়েস অর্ডার দিচ্ছেন। ক্যামেরার রিমোট কন্ট্রোল ইতিমধ্যেই কার্যকর করা হয়েছে, তবে সেখানে আপনাকে নীরবে বোতামগুলি টিপতে হবে, তবে এখানে একটি হিয়ারিং ক্যামেরা রয়েছে!

    একজন ব্যক্তি এবং কম্পিউটারের মধ্যে ভয়েস কমিউনিকেশনের উদাহরণ হিসাবে কিছু বিজ্ঞান কল্পকাহিনী চলচ্চিত্রকে উদ্ধৃত করা একটি ঐতিহ্য হয়ে উঠেছে, উদাহরণস্বরূপ স্ট্যানলি কুব্রিক পরিচালিত "2001: এ স্পেস ওডিসি"। সেখানে, অন-বোর্ড কম্পিউটার শুধু মহাকাশচারীদের সাথে অর্থপূর্ণ কথোপকথনই করে না, বধিরের মতো ঠোঁট পড়তে পারে। অন্য কথায়, যন্ত্রটি ত্রুটি ছাড়াই মানুষের বক্তৃতা চিনতে শিখেছে। সম্ভবত ক্যামেরার রিমোট ভয়েস কন্ট্রোল কারও কাছে অপ্রয়োজনীয় বলে মনে হবে, তবে অনেকেই এই বাক্যাংশটি পছন্দ করবেন "আমাদের নামিয়ে দাও, বাবু"এবং একটি তাল গাছের পটভূমিতে পুরো পরিবারের ছবি প্রস্তুত।

    ঠিক আছে, তাই আমি ঐতিহ্যের প্রতি শ্রদ্ধা নিবেদন করেছি এবং একটু স্বপ্ন দেখেছি। কিন্তু, হৃদয় থেকে বলতে গেলে, এই নিবন্ধটি লেখা কঠিন ছিল, এবং এটি সবই Android 4 OS সহ একটি স্মার্টফোনের আকারে উপহার দিয়ে শুরু হয়েছিল। এই HUAWEI U8815 মডেলটিতে একটি ছোট চার ইঞ্চি টাচ স্ক্রিন এবং একটি অন-স্ক্রিন কীবোর্ড রয়েছে। এটিতে টাইপ করা কিছুটা অস্বাভাবিক, তবে দেখা যাচ্ছে এটি বিশেষভাবে প্রয়োজনীয় নয়। (ছবি01)

    1. Android OS চালিত একটি স্মার্টফোনে ভয়েস স্বীকৃতি৷

    একটি নতুন খেলনা চেষ্টা করার সময়, আমি অনুসন্ধান বারে একটি মাইক্রোফোনের একটি গ্রাফিক লক্ষ্য করেছি৷ গুগলএবং নোটে কীবোর্ডে। পূর্বে, আমি এই প্রতীকটির অর্থ কী তা নিয়ে আগ্রহী ছিলাম না। আমি কথোপকথন ছিল স্কাইপ, এবং কীবোর্ডে টাইপ করা অক্ষর। বেশিরভাগ ইন্টারনেট ব্যবহারকারী এটিই করে। কিন্তু তারা পরে যেমন আমাকে ব্যাখ্যা করেছে, সার্চ ইঞ্জিনে গুগলরাশিয়ান ভাষায় ভয়েস অনুসন্ধান যোগ করা হয়েছিল এবং প্রোগ্রামগুলি উপস্থিত হয়েছিল যা আপনাকে ব্রাউজার ব্যবহার করার সময় সংক্ষিপ্ত বার্তা লিখতে দেয় "ক্রোম".

    আমি তিনটি শব্দের একটি বাক্যাংশ বলেছিলাম, প্রোগ্রামটি তাদের চিহ্নিত করেছে এবং একটি নীল পটভূমি সহ একটি ঘরে তাদের দেখিয়েছে। এখানে আশ্চর্য হওয়ার কিছু ছিল, কারণ সমস্ত শব্দ সঠিকভাবে লেখা হয়েছে। আপনি এই কক্ষে ক্লিক করলে, বাক্যাংশটি Android নোটপ্যাডের পাঠ্য ক্ষেত্রে প্রদর্শিত হবে। তাই আমি আরও কয়েকটি বাক্যাংশ বললাম এবং এসএমএসের মাধ্যমে সহকারীকে একটি বার্তা পাঠালাম।


    2. ভয়েস রিকগনিশন প্রোগ্রামের একটি সংক্ষিপ্ত ইতিহাস।

    এটি আমার জন্য একটি আবিষ্কার ছিল না যে ভয়েস নিয়ন্ত্রণের ক্ষেত্রে আধুনিক অগ্রগতি গৃহস্থালীর যন্ত্রপাতি, গাড়ি এবং রোবটকে কমান্ড দেওয়া সম্ভব করে তোলে। কমান্ড মোড উইন্ডোজ, OS/2 এবং Mac OS এর পূর্ববর্তী সংস্করণে চালু করা হয়েছিল। আমি কথা বলার প্রোগ্রাম জুড়ে এসেছি, কিন্তু তাদের কি লাভ? সম্ভবত এটি আমার বিশেষত্ব যে কীবোর্ডে টাইপ করার চেয়ে কথা বলা আমার পক্ষে সহজ, তবে সেল ফোনে আমি কিছুতেই টাইপ করতে পারি না। আপনাকে একটি সাধারণ কীবোর্ড দিয়ে একটি ল্যাপটপে পরিচিতিগুলি লিখতে হবে এবং সেগুলিকে USB কেবলের মাধ্যমে স্থানান্তর করতে হবে৷ কিন্তু শুধু মাইক্রোফোনে কথা বলা এবং কম্পিউটারে কোনো ত্রুটি ছাড়াই টেক্সট টাইপ করা আমার জন্য স্বপ্ন ছিল। ফোরামে আলোচনার মাধ্যমে হতাশার পরিবেশ বজায় ছিল। তাদের মধ্যে সর্বত্র এমন একটি দুঃখজনক চিন্তা ছিল:

    “তবে, বাস্তবে, আজ অবধি, বাস্তব বক্তৃতা স্বীকৃতির জন্য প্রোগ্রামগুলি (এবং এমনকি রাশিয়ান ভাষায়) কার্যত বিদ্যমান নেই এবং সেগুলি অবশ্যই শীঘ্রই তৈরি করা হবে না। তদুপরি, এমনকি স্বীকৃতির বিপরীত সমস্যা - বক্তৃতা সংশ্লেষণ, যা মনে হবে, স্বীকৃতির চেয়ে অনেক সহজ, পুরোপুরি সমাধান করা হয়নি।" (কম্পিউটারপ্রেস নং 12, 2004)

    "এখনও কোন সাধারণ বক্তৃতা শনাক্তকরণ প্রোগ্রাম নেই (শুধু রাশিয়ান নয়) কারণ কাজটি কম্পিউটারের জন্য বেশ কঠিন। এবং সবচেয়ে খারাপ বিষয় হল যে মানুষের দ্বারা শব্দ স্বীকৃতির প্রক্রিয়াটি এখনও উপলব্ধি করা যায়নি, তাই স্বীকৃতি প্রোগ্রাম তৈরি করার সময় থেকে শুরু করার কিছু নেই।" (ফোরামে আরেকটি আলোচনা)।

    একই সময়ে, ইংরেজি ভাষার ভয়েস টেক্সট এন্ট্রি প্রোগ্রামগুলির পর্যালোচনাগুলি স্পষ্ট সাফল্যের ইঙ্গিত দেয়। উদাহরণ স্বরূপ, IBM ViaVoice 98 এক্সিকিউটিভ সংস্করণ 64,000 শব্দের একটি মৌলিক শব্দভান্ডার এবং আপনার নিজের শব্দের একই সংখ্যা যোগ করার ক্ষমতা ছিল। প্রোগ্রামটি প্রশিক্ষণ ছাড়াই শব্দ স্বীকৃতির শতাংশ ছিল প্রায় 80% এবং একটি নির্দিষ্ট ব্যবহারকারীর সাথে পরবর্তী কাজের সাথে 95% এ পৌঁছেছে।

    রাশিয়ান ভাষা স্বীকৃতি প্রোগ্রামগুলির মধ্যে, এটি "গোরিনিচ" লক্ষ্য করার মতো - ইংরেজি ভাষার ড্রাগন ডিক্টেট 2.5 এর একটি সংযোজন। আমি আপনাকে অনুসন্ধান এবং তারপরে পর্যালোচনার দ্বিতীয় অংশে "পাঁচটি গোরিনিচের সাথে যুদ্ধ" সম্পর্কে বলব। আমি প্রথম খুঁজে পেয়েছি "ইংলিশ ড্রাগন"।

    3. ক্রমাগত বক্তৃতা স্বীকৃতি প্রোগ্রাম "ড্রাগন প্রাকৃতিকভাবে কথা বলা"

    কোম্পানির প্রোগ্রামের আধুনিক সংস্করণ "অনুভব"মিনস্ক ইনস্টিটিউট অফ ফরেন ল্যাঙ্গুয়েজ থেকে আমার এক পুরানো বন্ধুর সাথে শেষ হয়েছিল। তিনি এটিকে বিদেশ ভ্রমণ থেকে ফিরিয়ে এনেছিলেন এবং এটি "কম্পিউটার সচিব" হতে পারে ভেবে এটি কিনেছিলেন। কিন্তু কিছু কাজ করেনি, এবং প্রোগ্রামটি ল্যাপটপে রয়ে গেছে, প্রায় ভুলে গেছে। কোনো স্পষ্ট অভিজ্ঞতা না থাকায় আমাকেই আমার বন্ধুর কাছে যেতে হয়েছে। আমি যে সিদ্ধান্তে এসেছি তা সঠিকভাবে বোঝার জন্য এই সমস্ত দীর্ঘ ভূমিকা প্রয়োজন।

    আমার প্রথম ড্রাগনের পুরো নাম ছিল: . প্রোগ্রামটি ইংরেজিতে এবং এর মধ্যে সবকিছু পরিষ্কার এমনকি একটি ম্যানুয়াল ছাড়াই। প্রথম ধাপ হল একটি নির্দিষ্ট ব্যবহারকারীর একটি প্রোফাইল তৈরি করা যাতে তার কর্মক্ষমতা শব্দের শব্দ বৈশিষ্ট্য নির্ধারণ করা হয়। আমি তাই করেছি - বক্তার বয়স, দেশ এবং উচ্চারণের বৈশিষ্ট্যগুলি গুরুত্বপূর্ণ৷ আমার পছন্দ নিম্নরূপ: বয়স 22-54 বছর বয়সী, UK ইংরেজি, আদর্শ উচ্চারণ। পরবর্তীতে কয়েকটি উইন্ডো রয়েছে যেখানে আপনি আপনার মাইক্রোফোন কনফিগার করেন। (চিত্র04)

    গুরুতর বক্তৃতা স্বীকৃতি প্রোগ্রামের পরবর্তী পর্যায়ে একটি নির্দিষ্ট ব্যক্তির উচ্চারণ বৈশিষ্ট্য জন্য প্রশিক্ষণ হয়. আপনাকে পাঠ্যের প্রকৃতি চয়ন করতে বলা হয়েছে: আমার পছন্দটি একটি সংক্ষিপ্ত শ্রুতিবদ্ধ নির্দেশ, তবে আপনি একটি হাস্যকর গল্পের "অর্ডার" করতে পারেন।

    প্রোগ্রামটির সাথে কাজ করার এই পর্যায়ের সারমর্মটি অত্যন্ত সহজ - পাঠ্যটি উইন্ডোতে প্রদর্শিত হয়, এটির উপরে একটি হলুদ তীর রয়েছে। সঠিকভাবে উচ্চারণ করা হলে, তীরটি বাক্যাংশের মধ্য দিয়ে চলে যায় এবং নীচে একটি ওয়ার্কআউট অগ্রগতি বার থাকে। আমি আমার কথোপকথনমূলক ইংরেজি ভুলে গিয়েছিলাম, তাই আমি অসুবিধার সাথে অগ্রগতি করেছি। সময়ও সীমিত ছিল - কম্পিউটারটি আমার ছিল না এবং আমাকে প্রশিক্ষণে বাধা দিতে হয়েছিল। কিন্তু এক বন্ধু বলেছে যে সে আধা ঘণ্টারও কম সময়ের মধ্যে পরীক্ষা দিয়েছে। (চিত্র05)

    প্রোগ্রামটিকে আমার উচ্চারণ মানিয়ে নিতে দিতে অস্বীকার করে, আমি মূল উইন্ডোতে গিয়ে বিল্ট-ইন টেক্সট এডিটর চালু করেছি। তিনি কম্পিউটারে পাওয়া কিছু পাঠ্য থেকে স্বতন্ত্র শব্দ বলেছেন। প্রোগ্রামটি সেই শব্দগুলি মুদ্রিত করেছিল যা তিনি সঠিকভাবে বলেছিলেন এবং যেগুলি তিনি খারাপভাবে বলেছিলেন সেগুলিকে "ইংরেজি" দিয়ে প্রতিস্থাপন করেছিলেন। ইংরেজিতে "ইরেজ লাইন" কমান্ডটি স্পষ্টভাবে উচ্চারণ করার পরে, প্রোগ্রামটি এটি কার্যকর করেছে। এর মানে হল যে আমি কমান্ডগুলি সঠিকভাবে পড়ি এবং প্রোগ্রামটি পূর্বের প্রশিক্ষণ ছাড়াই তাদের স্বীকৃতি দেয়।

    তবে এই "ড্রাগন" কীভাবে রাশিয়ান ভাষায় লেখে তা আমার কাছে গুরুত্বপূর্ণ ছিল। যেমন আপনি পূর্বের বর্ণনা থেকে বুঝতে পেরেছেন, প্রোগ্রাম প্রশিক্ষণের সময়, আপনি শুধুমাত্র ইংরেজি পাঠ্য নির্বাচন করতে পারেন; সেখানে কেবল রাশিয়ান নেই। এটা স্পষ্ট যে রাশিয়ান বক্তৃতা স্বীকৃতি প্রশিক্ষণ দেওয়া সম্ভব হবে না। পরবর্তী ফটোতে আপনি দেখতে পাচ্ছেন যে রাশিয়ান শব্দ "হ্যালো" উচ্চারণ করার সময় প্রোগ্রামটি কী বাক্যাংশটি টাইপ করেছে। (চিত্র06)

    প্রথম ড্রাগনের সাথে কথোপকথনের ফলাফলটি কিছুটা হাস্যকর হয়ে উঠল। আপনি যদি অফিসিয়াল ওয়েবসাইটে লেখাটি মনোযোগ সহকারে পড়েন তবে আপনি এই সফ্টওয়্যার পণ্যটির ইংরেজি "বিশেষায়ন" দেখতে পাবেন। উপরন্তু, লোড করার সময়, আমরা প্রোগ্রাম উইন্ডোতে "ইংরেজি" পড়ি। তাহলে কেন এই সব প্রয়োজন ছিল? এটা স্পষ্ট যে ফোরাম এবং গুজব দায়ী...

    কিন্তু দরকারী অভিজ্ঞতা আছে. আমার এক বন্ধু তার ল্যাপটপের অবস্থা দেখতে বলল। কোনোরকমে ধীরে ধীরে কাজ করতে লাগলেন। এটি আশ্চর্যজনক নয় - সিস্টেম পার্টিশনে মাত্র 5% ফাঁকা জায়গা ছিল। অপ্রয়োজনীয় প্রোগ্রামগুলি মুছে ফেলার সময়, আমি দেখেছি যে অফিসিয়াল সংস্করণটি 2.3 গিগাবাইটের বেশি গ্রহণ করেছে। এই চিত্রটি পরে আমাদের কাজে লাগবে। (ছবি.07)



    রাশিয়ান বক্তৃতা স্বীকৃতি, এটি পরিণত, একটি অ তুচ্ছ কাজ ছিল. মিনস্কে আমি একজন বন্ধুর কাছ থেকে "গোরিনিচ" খুঁজে বের করতে পেরেছি। তিনি তার পুরানো ধ্বংসস্তূপের মধ্যে দীর্ঘ সময়ের জন্য ডিস্কটি অনুসন্ধান করেছিলেন এবং তার মতে, এটি সরকারী প্রকাশনা। প্রোগ্রামটি তাত্ক্ষণিকভাবে ইনস্টল করা হয়েছে, এবং আমি খুঁজে পেয়েছি যে এর অভিধানে 5,000 রাশিয়ান শব্দ এবং 100টি কমান্ড এবং 600টি ইংরেজি শব্দ এবং 31টি কমান্ড রয়েছে।

    প্রথমে আপনাকে মাইক্রোফোন সেট আপ করতে হবে, যা আমি করেছি। তারপর ডিকশনারী খুলে শব্দটা যোগ করলাম "পরীক্ষা"কারণ এটি প্রোগ্রাম অভিধানে ছিল না। আমি পরিষ্কার এবং একঘেয়ে কথা বলার চেষ্টা করেছি। অবশেষে, আমি Gorynych Pro 3.0 প্রোগ্রামটি খুললাম, ডিক্টেশন মোড চালু করেছি এবং "ক্লোজ-সাউন্ডিং শব্দ" এর এই তালিকাটি পেয়েছি। (ছবি.09)

    ফলাফলটি আমাকে বিস্মিত করেছিল, কারণ এটি একটি অ্যান্ড্রয়েড স্মার্টফোনের কাজ থেকে আরও খারাপের জন্য স্পষ্টভাবে আলাদা ছিল এবং আমি "এর থেকে অন্যান্য প্রোগ্রামগুলি চেষ্টা করার সিদ্ধান্ত নিয়েছি গুগল ক্রোম অনলাইন স্টোর". এবং আমি পরে পর্যন্ত "গোরিনিচ সাপ" নিয়ে কাজ বন্ধ করে দিয়েছি। আমি ভেবেছিলাম এটা ছিল স্থগিতমূল রাশিয়ান চেতনায় কর্ম

    5. Google এর ভয়েস ক্ষমতা

    একটি নিয়মিত উইন্ডোজ কম্পিউটারে ভয়েসের সাথে কাজ করতে, আপনাকে একটি ব্রাউজার ইনস্টল করতে হবে গুগল ক্রম. আপনি যদি এটি অনলাইনে ব্যবহার করেন, আপনি নীচে ডানদিকে সফ্টওয়্যার স্টোর লিঙ্কে ক্লিক করতে পারেন৷ সেখানে, সম্পূর্ণ বিনামূল্যে, আমি ভয়েস টেক্সট ইনপুটের জন্য দুটি প্রোগ্রাম এবং দুটি এক্সটেনশন পেয়েছি। কর্মসূচিগুলো বলা হয় "ভয়েস নোটপ্যাড"এবং "ভয়েসনোট - ভয়েস টু টেক্সট". ইনস্টলেশনের পরে, তারা ট্যাবে পাওয়া যাবে "অ্যাপ্লিকেশন"আপনার ব্রাউজার "ক্রোমিয়াম". (ছবি 10)

    এক্সটেনশন বলা হয় "গুগল ভয়েস সার্চ হটওয়ার্ড (বিটা) 0.1.0.5"এবং "ভয়েস টেক্সট ইনপুট - Speechpad.ru 5.4". ইনস্টলেশনের পরে, সেগুলি ট্যাবে বন্ধ বা মুছে ফেলা যেতে পারে "এক্সটেনশন".(ছবি 11)

    ভয়েস নোট. Chrome ব্রাউজারে অ্যাপ্লিকেশন ট্যাবে, প্রোগ্রাম আইকনে ডাবল ক্লিক করুন। নিচের ছবির মত একটি ডায়ালগ বক্স খুলবে। মাইক্রোফোন আইকনে ক্লিক করে, আপনি মাইক্রোফোনে ছোট বাক্যাংশ বলবেন। প্রোগ্রামটি আপনার শব্দগুলি স্পিচ রিকগনিশন সার্ভারে প্রেরণ করে এবং উইন্ডোতে পাঠ্য টাইপ করে। চিত্রে দেখানো সমস্ত শব্দ এবং বাক্যাংশ প্রথমবার টাইপ করা হয়েছিল। স্পষ্টতই, এই পদ্ধতিটি তখনই কাজ করে যখন একটি সক্রিয় ইন্টারনেট সংযোগ থাকে। (ছবি 12)

    ভয়েস নোটপ্যাড. আপনি যদি অ্যাপ্লিকেশন ট্যাব থেকে প্রোগ্রামটি চালু করেন, একটি নতুন ইন্টারনেট পৃষ্ঠা ট্যাব খুলবে Speechpad.ru. এই পরিষেবাটি কীভাবে ব্যবহার করবেন তার বিস্তারিত নির্দেশাবলী এবং একটি কম্প্যাক্ট ফর্ম রয়েছে৷ পরেরটি নীচের চিত্রে দেখানো হয়েছে। (ছবি 13)

    ভয়েস ইনপুটপাঠ্য আপনাকে আপনার ভয়েস ব্যবহার করে ইন্টারনেট পৃষ্ঠাগুলিতে পাঠ্য ক্ষেত্রগুলি পূরণ করতে দেয়। উদাহরণস্বরূপ, আমি আমার পৃষ্ঠায় গিয়েছিলাম "Google+". নতুন বার্তা ইনপুট ক্ষেত্রে, ডান-ক্লিক করুন এবং নির্বাচন করুন "স্পিচপ্যাড". গোলাপী ইনপুট উইন্ডোটি নির্দেশ করে যে আপনি আপনার পাঠ্য লিখতে পারেন। (ছবি 14)

    Google ভয়েস অনুসন্ধানআপনাকে ভয়েস দ্বারা অনুসন্ধান করতে দেয়। আপনি যখন এই এক্সটেনশনটি ইনস্টল এবং সক্রিয় করেন, অনুসন্ধান বারে একটি মাইক্রোফোন প্রতীক উপস্থিত হয়৷ আপনি এটি চাপলে, একটি বড় লাল বৃত্তে একটি প্রতীক প্রদর্শিত হবে। শুধু আপনার অনুসন্ধান শব্দগুচ্ছ বলুন এবং এটি অনুসন্ধান ফলাফল প্রদর্শিত হবে. (চিত্র 15)

    গুরুত্বপূর্ণ দ্রষ্টব্য: Chrome এক্সটেনশনগুলির সাথে মাইক্রোফোন কাজ করার জন্য, আপনাকে আপনার ব্রাউজার সেটিংসে মাইক্রোফোন অ্যাক্সেসের অনুমতি দিতে হবে৷ নিরাপত্তার কারণে এটি ডিফল্টরূপে নিষ্ক্রিয় করা হয়। যাও সেটিংস→ব্যক্তিগত তথ্য→কন্টেন্ট সেটিংস. (তালিকার শেষে সমস্ত সেটিংস অ্যাক্সেস করতে, ক্লিক করুন উন্নত সেটিংস দেখান). একটি ডায়ালগ বক্স খুলবে পৃষ্ঠা বিষয়বস্তু সেটিংস. তালিকা থেকে একটি আইটেম নির্বাচন করুন মাল্টিমিডিয়া→মাইক্রোফোন.

    6. রাশিয়ান বক্তৃতা স্বীকৃতি প্রোগ্রামের সাথে কাজ করার ফলাফল

    ভয়েস টেক্সট ইনপুট প্রোগ্রাম ব্যবহার করার সামান্য অভিজ্ঞতা একটি ইন্টারনেট কোম্পানির সার্ভারে এই বৈশিষ্ট্যটির চমৎকার বাস্তবায়ন দেখিয়েছে গুগল. কোনো প্রাথমিক প্রশিক্ষণ ছাড়াই শব্দগুলো সঠিকভাবে চেনা যায়। এটি ইঙ্গিত দেয় যে রাশিয়ান বক্তৃতা স্বীকৃতির সমস্যাটি সমাধান করা হয়েছে।

    এখন আমরা বলতে পারি উন্নয়নের ফল গুগলঅন্যান্য নির্মাতাদের পণ্য মূল্যায়নের জন্য একটি নতুন মানদণ্ড হবে। আমি চাই যে স্বীকৃতি সিস্টেমটি কোম্পানির সার্ভারগুলিতে অ্যাক্সেস না করে অফলাইনে কাজ করুক - এটি আরও সুবিধাজনক এবং দ্রুত৷ তবে রাশিয়ান বক্তৃতার অবিচ্ছিন্ন প্রবাহের সাথে কাজ করার জন্য একটি স্বাধীন প্রোগ্রাম কখন প্রকাশিত হবে তা অজানা। এটি অনুমান করা উচিত যে প্রশিক্ষণের সুযোগের সাথে, এই "সৃষ্টি" একটি বাস্তব যুগান্তকারী হয়ে উঠবে।

    রাশিয়ান বিকাশকারীদের প্রোগ্রাম "গোরিনিচ", "ডিক্টোগ্রাফার"এবং "যুদ্ধ"আমি এই পর্যালোচনা দ্বিতীয় অংশে বিস্তারিত যেতে হবে. এই নিবন্ধটি খুব ধীরে ধীরে লেখা হয়েছিল এই কারণে যে মূল ডিস্কগুলি অনুসন্ধান করা এখন কঠিন। এই মুহুর্তে, আমার কাছে ইতিমধ্যে "কমব্যাট 2.52" ছাড়া রাশিয়ান ভয়েস-টু-টেক্সট রিকগনিশন ইঞ্জিনের সমস্ত সংস্করণ রয়েছে। আমার কোন বন্ধু বা সহকর্মীর এই প্রোগ্রামটি নেই, এবং আমি নিজে ফোরামে শুধুমাত্র কয়েকটি প্রশংসামূলক পর্যালোচনা করেছি। সত্য, এমন একটি অদ্ভুত বিকল্প ছিল - এসএমএসের মাধ্যমে "কমব্যাট" ডাউনলোড করুন, তবে আমি এটি পছন্দ করি না। (ছবি16)


    একটি ছোট ভিডিও ক্লিপ আপনাকে দেখাবে কিভাবে Android OS সহ স্মার্টফোনে স্পিচ রিকগনিশন কাজ করে। ভয়েস টাইপিংয়ের বিশেষত্ব হল গুগল সার্ভারের সাথে সংযোগ করার প্রয়োজন। এইভাবে আপনার ইন্টারনেট কাজ করা উচিত

    পণ্য এবং প্রযুক্তি:

    ভিজ্যুয়াল স্টুডিও, C#, .NET স্পিচ লাইব্রেরি

    নিবন্ধটি আলোচনা করে:

    • কনসোল অ্যাপ্লিকেশনে বক্তৃতা স্বীকৃতি সমর্থন যোগ করা;
    • স্বীকৃত বক্তৃতা প্রক্রিয়াকরণ;
    • স্পিচ রিকগনিশন লাইব্রেরি স্থাপন;
    • Microsoft.Speech এবং System.Speech-এর তুলনা;
    • একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে স্পিচ রিকগনিশন সমর্থন যোগ করা।

    Windows Phone Cortana, একটি বক্তৃতা-অ্যাক্টিভেটেড ব্যক্তিগত সহকারী (পাশাপাশি একটি ফল-কোম্পানীর প্রতিপক্ষ যার সম্পর্কে নিরর্থক কথা বলা যায় না) এর আবির্ভাবের সাথে, স্পিচ-সক্ষম অ্যাপগুলি সফ্টওয়্যার বিকাশে ক্রমশ বিশিষ্ট হয়ে উঠেছে। এই নিবন্ধে, আমি আপনাকে দেখাব কিভাবে উইন্ডোজ কনসোল অ্যাপ্লিকেশন, উইন্ডোজ ফর্ম অ্যাপ্লিকেশন, এবং উইন্ডোজ প্রেজেন্টেশন ফাউন্ডেশন (WPF) এ স্পিচ রিকগনিশন এবং সংশ্লেষণ শুরু করতে হয়।

    মনে রাখবেন যে আপনি Windows Phone অ্যাপস, ASP.NET ওয়েব অ্যাপস, Windows স্টোর অ্যাপস, Windows RT, এবং Xbox Kinect-এ বক্তৃতা ক্ষমতাও যোগ করতে পারেন, কিন্তু কৌশলগুলি এই নিবন্ধে আলোচনা করা থেকে আলাদা।

    এই নিবন্ধটি ঠিক কী নিয়ে আলোচনা করা হবে সে সম্পর্কে ধারণা পাওয়ার একটি ভাল উপায় হল দুটি ভিন্ন ডেমো প্রোগ্রামের স্ক্রিনশট দেখা চাল 1এবং 2 . কনসোল অ্যাপ্লিকেশন চালু করার পরে চাল 1অবিলম্বে "আমি জেগে আছি" বাক্যাংশটি বলে। অবশ্যই, আপনি এই নিবন্ধটি পড়ার সময় ডেমো অ্যাপ্লিকেশনটি শুনতে সক্ষম হবেন না, তাই এটি কম্পিউটার কী বলছে তার পাঠ্য প্রদর্শন করে। তারপর ব্যবহারকারী "স্পিচ অন" কমান্ডটি বলে। ডেমো অ্যাপ্লিকেশনটি স্বীকৃত পাঠ্যের সাথে সাড়া দেয় এবং তারপরে অভ্যন্তরীণভাবে দুটি সংখ্যা যোগ করার অনুরোধ শুনে এবং প্রতিক্রিয়া জানায়।

    ভাত। 1. একটি কনসোল অ্যাপ্লিকেশনে বক্তৃতা স্বীকৃতি এবং সংশ্লেষণ


    ভাত। 2. একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে বক্তৃতা স্বীকৃতি

    ব্যবহারকারী অ্যাপটিকে এক এবং দুই, তারপর দুই এবং তিন যোগ করতে বলেছে। অ্যাপ্লিকেশানটি কথ্য আদেশগুলিকে স্বীকৃতি দিয়েছে এবং ভয়েসের মাধ্যমে উত্তর দিয়েছে। আমি পরে বক্তৃতা শনাক্তকরণ ব্যবহার করার আরও দরকারী উপায় বর্ণনা করব।

    ব্যবহারকারী তখন "স্পিচ অফ" বলেছিল, একটি ভয়েস কমান্ড যা অতিরিক্ত কমান্ড শুনতে অক্ষম করে, কিন্তু বক্তৃতা শনাক্তকরণ সম্পূর্ণরূপে অক্ষম করে না। এই মৌখিক আদেশের পরে, এক এবং দুই যোগ করার পরবর্তী আদেশটি উপেক্ষা করা হয়েছিল। অবশেষে, ব্যবহারকারী আবার শোনার আদেশ চালু করেন এবং অর্থহীন কমান্ড "ক্লাতু বারাদা নিক্টো" উচ্চারণ করেন, যা অ্যাপ্লিকেশনটি বক্তৃতা স্বীকৃতি সম্পূর্ণরূপে নিষ্ক্রিয় করার এবং নিজেকে শেষ করার আদেশ হিসাবে স্বীকৃত।

    চালু চাল 2ডামি স্পিচ-সক্ষম সহ একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন দেখায়। এই অ্যাপ্লিকেশানটি উচ্চারিত আদেশগুলিকে স্বীকৃতি দেয়, কিন্তু ভয়েস আউটপুট দিয়ে তাদের প্রতিক্রিয়া জানায় না। আপনি যখন প্রথম অ্যাপটি চালু করেছিলেন, তখন স্পিচ অন চেকবক্সটি চেক করা হয়নি, এটি নির্দেশ করে যে স্পিচ রিকগনিশন সক্রিয় ছিল না। ব্যবহারকারী এই চেকবক্সটি চেক করেছেন এবং তারপর "হ্যালো" বলেছেন। অ্যাপ্লিকেশনটি উইন্ডোর নীচে তালিকাবক্স নিয়ন্ত্রণে স্বীকৃত পাঠ্য প্রদর্শন করে প্রতিক্রিয়া জানায়।

    ব্যবহারকারী তখন বলেছিলেন, "টেক্সট বক্স 1 লাল করে সেট করুন।" অ্যাপ্লিকেশনটি বক্তৃতাটি চিনতে পেরেছে এবং প্রতিক্রিয়া জানিয়েছে: "টেক্সট বক্স 1 লাল সেট করুন," যা প্রায় (কিন্তু পুরোপুরি নয়) ব্যবহারকারী যা বলেছে। যদিও চালু আছে চাল 2আপনি এটি দেখতে পাচ্ছেন না, উইন্ডোর শীর্ষে টেক্সটবক্স নিয়ন্ত্রণের পাঠ্যটি সত্যিই লাল।

    তারপর ব্যবহারকারী বলেছেন: "অনুগ্রহ করে টেক্সট বক্স 1 সাদাতে সেট করুন।" অ্যাপটি এটিকে "সেট টেক্সট বক্স 1 সাদা" হিসেবে স্বীকৃতি দিয়েছে এবং ঠিক তাই করেছে। ব্যবহারকারী "গুড-বাই" বলে শেষ করেছেন এবং অ্যাপ্লিকেশনটি সেই পাঠ্যটি প্রদর্শন করেছে, কিন্তু উইন্ডোজ ফর্মগুলির সাথে কিছুই করেনি, যদিও এটি স্পিচ অন চেকবক্সটি সাফ করতে পারত, উদাহরণস্বরূপ।

    সিন্থেসাইজার অবজেক্ট ব্যবহার করা বেশ সহজ।

    নিম্নলিখিত বিভাগগুলিতে, আমি আপনাকে প্রয়োজনীয় .NET স্পিচ লাইব্রেরি ইনস্টল সহ উভয় ডেমো প্রোগ্রাম তৈরি করার প্রক্রিয়ার মধ্য দিয়ে চলে যাব। এই নিবন্ধটি অনুমান করে যে আপনার অন্তত মধ্যবর্তী প্রোগ্রামিং দক্ষতা আছে, কিন্তু বক্তৃতা স্বীকৃতি এবং সংশ্লেষণ সম্পর্কে কিছুই জানেন না।

    একটি কনসোল অ্যাপ্লিকেশনে স্পিচ রিকগনিশন সমর্থন যোগ করা হচ্ছে

    দেখানো ডেমো তৈরি করতে চাল 1, আমি Visual Studio চালু করেছি এবং ConsoleSpeech নামে একটি নতুন C# কনসোল অ্যাপ্লিকেশন তৈরি করেছি। আমি ভিজ্যুয়াল স্টুডিও 2010 এবং 2012 এর সাথে সফলভাবে বক্তৃতা সরঞ্জামগুলি ব্যবহার করেছি, তবে তুলনামূলকভাবে সাম্প্রতিক সংস্করণটি ভাল হওয়া উচিত। এডিটরে টেমপ্লেট কোড লোড করার পর, আমি সমাধান এক্সপ্লোরার উইন্ডোতে Program.cs ফাইলটিকে আরও বর্ণনামূলক ConsoleSpeechProgram.cs-এ পুনঃনামকরণ করেছি এবং ভিজ্যুয়াল স্টুডিও আমার জন্য প্রোগ্রাম ক্লাসের নাম পরিবর্তন করেছে।

    এরপর, আমি Microsoft.Speech.dll ফাইলে একটি লিঙ্ক যোগ করেছি, যা C:\ProgramFiles (x86)\Microsoft SDKs\Speech\v11.0\Assembly-এ অবস্থিত। এই DLL আমার কম্পিউটার থেকে অনুপস্থিত ছিল এবং আমাকে এটি ডাউনলোড করতে হয়েছিল। একটি অ্যাপ্লিকেশনে বক্তৃতা স্বীকৃতি এবং সংশ্লেষণ যোগ করার জন্য প্রয়োজনীয় ফাইলগুলি ইনস্টল করা খুব তুচ্ছ নয়। আমি পরবর্তী বিভাগে বিস্তারিতভাবে ইনস্টলেশন প্রক্রিয়া ব্যাখ্যা করব, কিন্তু আপাতত ধরে নেওয়া যাক যে Microsoft.Speech.dll আপনার সিস্টেমে রয়েছে।

    স্পিচ ডিএলএল-এ একটি রেফারেন্স যোগ করে, আমি উপরের-স্তরের সিস্টেম নামস্থানে নির্দেশিত একটি ছাড়া কোডের শীর্ষ থেকে সমস্ত ব্যবহার বিবৃতি সরিয়ে দিয়েছি। তারপর আমি Microsoft.Speech.Recognition, Microsoft.Speech.Synthesis এবং System.Globalization নামস্থানের জন্য বিবৃতি ব্যবহার করে যোগ করেছি। প্রথম দুটি নামস্থান স্পিচ DLL-তে ম্যাপ করা হয়েছে। মনে রাখবেন যে সিস্টেম.স্পীচ.রিকগনিশন এবং সিস্টেম.স্পীচ.সিনথেসিসের মতো নামস্থানও রয়েছে, যা বিভ্রান্তিকর হতে পারে। আমি শীঘ্রই তাদের মধ্যে পার্থক্য ব্যাখ্যা করব। বিশ্বায়ন নামস্থানটি ডিফল্টরূপে উপলব্ধ ছিল এবং প্রকল্পে একটি নতুন রেফারেন্স যোগ করার প্রয়োজন ছিল না।

    ডেমো কনসোল অ্যাপ্লিকেশনের জন্য সমস্ত উত্স কোড এখানে প্রদান করা হয় চাল 3, এবং এই নিবন্ধের সাথে থাকা উত্স প্যাকেজেও উপলব্ধ। যতটা সম্ভব মূল ধারণাগুলিকে অস্পষ্ট করা এড়াতে আমি সমস্ত স্ট্যান্ডার্ড ত্রুটি পরিচালনা সরিয়ে দিয়েছি।

    ভাত। 3. ডেমো কনসোল অ্যাপ্লিকেশন সোর্স কোড

    সিস্টেম ব্যবহার করে; Microsoft.Speech.Recognition ব্যবহার করে; Microsoft.Speech.Synthesis ব্যবহার করে; System.Globalization ব্যবহার করে; namespace ConsoleSpeech ( ক্লাস ConsoleSpeechProgram ( static SpeechSynthesizer ss = new SpeechSynthesizer (); static SpeechRecognitionEngine sre; স্ট্যাটিক বুল করা হয়েছে = মিথ্যা; স্ট্যাটিক বুল স্পিচঅন = সত্য; স্ট্যাটিক অকার্যকর মেইন (এটি ডিফাউডিএ চেষ্টা করুন); Console.WriteLine ("\n(কথা বলা: আমি জেগে আছি)"); ss.Speak("আমি জেগে আছি"); CultureInfo ci = new CultureInfo("en-us"); sre = new SpeechRecognitionEngine(ci); sre.SetInputToDefaultAudioDevice( ;sre.Speechrecognized += sre_Speechrecognized; choices ch_startstopcommands = নতুন পছন্দ (); ch_startstopcommands.add ("স্পীচ অন"); ch_startstopcommands.add ("এস পিচ অফ"); ch_startstopcommands.add ("S Peech Off"); ch_startstopcommands (Ni_startstopcommands"); স্টার্টস্টপ = new GrammarBuilder(); gb_StartStop.Append(ch_StartStopCommands); গ্রামার g_StartStop = নতুন ব্যাকরণ(gb_StartStop); পছন্দ ch_Numbers = new Choices(); ch_Numbers.Add("1"); ch_Numbers""2. ch_Numbers"। যোগ করুন("3"); ch_Numbers.Add("4"); GrammarBuilder gb_WhatIsXplusY = নতুন গ্রামার বিল্ডার(); gb_WhatIsXplusY.Append("কি"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); gb_WhatIsXplusY.Append("plus"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); ব্যাকরণ g_WhatIsXplusY = নতুন ব্যাকরণ(gb_WhatIsXplusY); sre.LoadGrammarAsync(g_StartStop); sre.LoadGrammarAsync(g_WhatIsXplusY); sre.RecognizeAsync(RecognizeMode.Multiple); যখন (সম্পন্ন == মিথ্যা) ( ; ) কনসোল। WriteLine("\nহিট< enter >শেল বন্ধ করতে\n"); Console.ReadLine(); ) ক্যাচ (ব্যতিক্রম এক্স) ( Console.WriteLine(ex.Message); Console.ReadLine(); ) ) // প্রধান স্ট্যাটিক অকার্যকর sre_SpeechRecognized(অবজেক্ট প্রেরক, SpeechRecognized eventA) ) ( স্ট্রিং txt = e.Result.Text; float confidence = e.Result.Confidence; Console.WriteLine("\nস্বীকৃত: " + txt); যদি (আস্থা< 0.60) return; if (txt.IndexOf("speech on") >= 0) ( Console.WriteLine("স্পীচ এখন চালু"); speechOn = true; ) if (txt.IndexOf("স্পীচ বন্ধ") >= 0) ( Console.WriteLine("স্পীচ এখন বন্ধ"); speechOn = মিথ্যা; ) যদি (স্পীচঅন == মিথ্যা) ফিরে আসে; if (txt.IndexOf("klatu") >= 0 && txt.IndexOf("barada") >= 0) ( ((SpeechRecognitionEngine)প্রেরক)। RecognizeAsyncCancel(); সম্পন্ন = সত্য; কনসোল.WriteLine("(কথা বলা: বিদায়)"); ss.Speak("বিদায়"); ) যদি (txt.IndexOf("What") >= 0 && txt.IndexOf("plus") >= 0) ( স্ট্রিং শব্দ = txt. স্প্লিট(" "); int num1 = int.Parse(words); int num2 = int.Parse(শব্দ); int sum = num1 + num2; Console.WriteLine("(কথা বলা: " + শব্দ + " প্লাস " + শব্দ + " সমান " + যোগফল + ")"); ss.SpeakAsync(শব্দ + " প্লাস" + শব্দ + " সমান " + যোগফল); ) ) // sre_SpeechRecognized ) // প্রোগ্রাম ) // ns

    বিবৃতি ব্যবহার করার পরে, ডেমো কোডটি এভাবে শুরু হয়:

    namespace ConsoleSpeech ( ক্লাস ConsoleSpeechProgram ( স্ট্যাটিক স্পিচ সিন্থেসাইজার ss = নতুন স্পিচসিন্থেসাইজার

    SpeechSynthesizer অবজেক্ট, ক্লাস লেভেলে, বক্তৃতা সংশ্লেষণ করতে একটি অ্যাপ্লিকেশন সক্ষম করে। SpeechRecognitionEngine অবজেক্ট একটি অ্যাপ্লিকেশনকে কথ্য শব্দ বা বাক্যাংশ শুনতে এবং চিনতে দেয়। সম্পন্ন করা বুলিয়ান ভেরিয়েবল নির্ধারণ করে কখন সম্পূর্ণ অ্যাপ্লিকেশনটি বন্ধ হয়ে যায়। SpeechOn বুলিয়ান ভেরিয়েবল নিয়ন্ত্রণ করে যে অ্যাপ্লিকেশনটি প্রোগ্রাম থেকে প্রস্থান করার কমান্ড ছাড়া অন্য কোনো কমান্ড শোনে কিনা।

    এখানে ধারণা হল যে কনসোল অ্যাপ্লিকেশন কীবোর্ড ইনপুট গ্রহণ করে না, তাই এটি সর্বদা কমান্ডের জন্য শুনছে। যাইহোক, স্পিচঅন মিথ্যা হলে, শুধুমাত্র প্রোগ্রাম থেকে প্রস্থান করার আদেশ স্বীকৃত এবং কার্যকর করা হয়; অন্যান্য কমান্ড স্বীকৃত কিন্তু উপেক্ষা করা হয়.

    প্রধান পদ্ধতিটি এভাবে শুরু হয়:

    চেষ্টা করুন ( ss.SetOutputToDefaultAudioDevice(); Console.WriteLine("\n(কথা বলা: আমি জেগে আছি)"); ss.Speak("আমি জেগে আছি");

    SpeechSynthesizer অবজেক্টের একটি উদাহরণ তৈরি করা হয়েছিল যখন এটি ঘোষণা করা হয়েছিল। সিন্থেসাইজার অবজেক্ট ব্যবহার করা বেশ সহজ। SetOutputToDefaultAudioDevice পদ্ধতিটি আপনার কম্পিউটারের সাথে সংযুক্ত স্পিকারগুলিতে আউটপুট পাঠায় (আপনি একটি ফাইলেও আউটপুট পাঠাতে পারেন)। Speak পদ্ধতি একটি স্ট্রিং নেয় এবং তারপর এটি কথা বলে। এটা কত সহজ.

    বক্তৃতা স্বীকৃতি বক্তৃতা সংশ্লেষণের চেয়ে অনেক বেশি জটিল। একটি সমাধানকারী বস্তু তৈরি করে প্রধান পদ্ধতিটি চলতে থাকে:

    CultureInfo ci = new CultureInfo("en-us"); sre = নতুন SpeechRecognitionEngine(ci); sre.SetInputToDefaultAudioDevice(); sre.SpeechRecognized += sre_SpeechRecognized;

    প্রথমত, CultureInfo বস্তুটি স্বীকৃত ভাষা নির্দিষ্ট করে, এই ক্ষেত্রে মার্কিন যুক্তরাষ্ট্র ইংরেজি। CultureInfo অবজেক্টটি গ্লোবালাইজেশন নামস্থানে রয়েছে, যা আমরা একটি ব্যবহার বিবৃতি দিয়ে উল্লেখ করেছি। তারপর, SpeechRecognitionEngine কনস্ট্রাক্টরকে কল করার পরে, ভয়েস ইনপুটটি ডিফল্ট অডিও ডিভাইসে বরাদ্দ করা হয় - প্রায়শই মাইক্রোফোনে। মনে রাখবেন যে বেশিরভাগ ল্যাপটপে একটি অন্তর্নির্মিত মাইক্রোফোন থাকে, তবে ডেস্কটপের জন্য একটি বাহ্যিক মাইক্রোফোনের প্রয়োজন হবে (আজকাল প্রায়শই হেডফোনের সাথে মিলিত হয়)।

    শনাক্তকারী বস্তুর মূল পদ্ধতি হল SpeechRecognized ইভেন্ট হ্যান্ডলার। ভিজ্যুয়াল স্টুডিও ব্যবহার করার সময়, আপনি যদি "sre.SpeechRecognized +=" টাইপ করেন এবং একটি বিভক্ত সেকেন্ড অপেক্ষা করেন, IntelliSense স্বয়ংক্রিয়ভাবে ইভেন্ট হ্যান্ডলারের নাম - sre_SpeechRecognized দিয়ে আপনার অভিব্যক্তি শেষ করবে৷ আমি পরামর্শ দিচ্ছি যে আপনি পরামর্শটি গ্রহণ করতে ট্যাব কী টিপুন এবং এই নামটি ডিফল্ট হিসাবে ব্যবহার করুন৷

    পছন্দ ch_Numbers = নতুন পছন্দ(); ch_Numbers. Add("1"); ch_Numbers. Add("2"); ch_Numbers. Add("3"); ch_Numbers. Add("4"); // প্রযুক্তিগত দৃষ্টিকোণ থেকে, // এটি হল Add(নতুন স্ট্রিং ( "4" )); GrammarBuilder gb_WhatIsXplusY = নতুন গ্রামার বিল্ডার(); gb_WhatIsXplusY.Append("কি"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); gb_WhatIsXplusY.Append("plus"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); ব্যাকরণ g_WhatIsXplusY = নতুন ব্যাকরণ(gb_WhatIsXplusY);

    এখানে তিনটি প্রধান বস্তু হল চয়েস সেট, গ্রামার বিল্ডার টেমপ্লেট এবং ব্যাকরণ নিয়ন্ত্রণ। যখন আমি স্বীকৃতির জন্য একটি ব্যাকরণ তৈরি করি, তখন আমি কিছু নির্দিষ্ট উদাহরণ তালিকাভুক্ত করে শুরু করি যা আমাকে চিনতে হবে। ধরা যাক, "এক যোগ দুই কি?" এবং "তিন যোগ চার কি?"

    তারপরে আমি সংশ্লিষ্ট জেনেরিক টেমপ্লেটটি সংজ্ঞায়িত করি, উদাহরণস্বরূপ "কী প্লাস ?। টেমপ্লেটটি হল একটি গ্রামার বিল্ডার, এবং নির্দিষ্ট মানগুলি যেগুলি টেমপ্লেটে পাস করা হয় তা হল পছন্দগুলির একটি সেট৷ ব্যাকরণ অবজেক্ট টেমপ্লেট এবং পছন্দগুলিকে অন্তর্ভুক্ত করে।

    ডেমো প্রোগ্রামে, আমি সংযোজনগুলিকে 1 থেকে 4 পর্যন্ত সীমিত করি এবং সেগুলিকে চয়েস সেটে স্ট্রিং হিসাবে যুক্ত করি। আরও কার্যকর পদ্ধতি:

    স্ট্রিং সংখ্যা = নতুন স্ট্রিং ("1", "2", "3", "4"); পছন্দ ch_Numbers = নতুন পছন্দ (সংখ্যা);

    আমি দুটি কারণে একটি পছন্দ সেট তৈরি করার জন্য একটি কম দক্ষ পদ্ধতি উপস্থাপন করছি। প্রথমত, একবারে একটি লাইন যোগ করাই একমাত্র পদ্ধতি যা আমি অন্যান্য বক্তৃতা স্বীকৃতির উদাহরণে দেখেছি। দ্বিতীয়ত, আপনি ভাবতে পারেন যে একবারে একটি সারি যোগ করা মোটেও কাজ করা উচিত নয়; ভিজ্যুয়াল স্টুডিও ইন্টেলিসেন্স রিয়েল টাইমে দেখায় যে অ্যাড ওভারলোডগুলির মধ্যে একটি প্যারাম স্ট্রিং বাক্যাংশের একটি প্যারামিটার গ্রহণ করে। আপনি যদি প্যারামস কীওয়ার্ডটি লক্ষ্য না করেন, আপনি হয়তো ধরে নিয়েছেন যে যোগ পদ্ধতি শুধুমাত্র স্ট্রিংগুলির অ্যারে গ্রহণ করে এবং একটি একক স্ট্রিং নয়। তবে এটি এমন নয়: তিনি উভয়ই গ্রহণ করেন। আমি একটি অ্যারে পাস সুপারিশ.

    অনুক্রমিক সংখ্যা থেকে পছন্দের একটি সেট তৈরি করা কিছুটা বিশেষ ক্ষেত্রে এবং এটি একটি প্রোগ্রাম্যাটিক পদ্ধতির জন্য অনুমতি দেয় যেমন:

    স্ট্রিং সংখ্যা = নতুন স্ট্রিং; জন্য (int i = 0; i< 100; ++i) numbers[i] = i.ToString(); Choices ch_Numbers = new Choices(numbers);

    GrammarBuilder স্লটগুলি পূরণ করার জন্য পছন্দগুলি তৈরি করার পরে, ডেমো প্রোগ্রাম একটি GrammarBuilder এবং তারপর একটি নিয়ন্ত্রণকারী ব্যাকরণ তৈরি করে:

    GrammarBuilder gb_WhatIsXplusY = নতুন গ্রামার বিল্ডার(); gb_WhatIsXplusY.Append("কি"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); gb_WhatIsXplusY.Append("plus"); gb_WhatIsXplusY.অ্যাপেন্ড(ch_Numbers); ব্যাকরণ g_WhatIsXplusY = নতুন ব্যাকরণ(gb_WhatIsXplusY);

    ডেমো প্রোগ্রামটি স্টার্ট এবং স্টপ কমান্ডের জন্য ব্যাকরণ তৈরি করতে অনুরূপ টেমপ্লেট ব্যবহার করে:

    চয়েস ch_StartStopCommands = নতুন পছন্দ(); ch_StartStopCommands.Add("স্পিচ অন"); ch_StartStopCommands.Add("speech off"); ch_StartStopCommands.Add("klatu barada nikto"); GrammarBuilder gb_StartStop = new GrammarBuilder(); gb_StartStop.Append(ch_StartStopCommands); ব্যাকরণ g_StartStop = নতুন ব্যাকরণ(gb_StartStop);

    ব্যাকরণ খুব নমনীয়ভাবে সংজ্ঞায়িত করা যেতে পারে। এখানে "স্পিচ অন", "স্পিচ অফ" এবং "ক্লাতু বারাদা নিক্টো" কমান্ডগুলিকে একটি ব্যাকরণে স্থাপন করা হয়েছে, যেহেতু তারা যৌক্তিকভাবে সম্পর্কিত। এই তিনটি কমান্ড তিনটি ভিন্ন ব্যাকরণে সংজ্ঞায়িত করা যেতে পারে, অথবা "স্পিচ অন" এবং "স্পিচ অফ" কমান্ডগুলিকে একটি ব্যাকরণে এবং "ক্লাতু বারাদা নিকটো" কমান্ডটি এক সেকেন্ডে স্থাপন করা যেতে পারে।

    একবার আপনি সমস্ত ব্যাকরণ অবজেক্ট তৈরি করে ফেললে, আপনি সেগুলিকে স্পিচ শনাক্তকারীতে রাখুন এবং বক্তৃতা শনাক্তকরণ সক্রিয় হয়:

    sre.LoadGrammarAsync(g_StartStop); sre.LoadGrammarAsync(g_WhatIsXplusY); sre.RecognizeAsync(RecognizeMode.Multiple);

    RecognizeMode.Multiple আর্গুমেন্টের প্রয়োজন হয় যখন আপনার একাধিক ব্যাকরণ থাকে, যা সহজ প্রোগ্রাম ছাড়া সব ক্ষেত্রেই হবে। প্রধান পদ্ধতিটি নিম্নরূপ সম্পন্ন হয়:

    যখন (সম্পন্ন == মিথ্যা) ( ; ) কনসোল. WriteLine("\nহিট< enter >শেল বন্ধ করতে\n"); Console.ReadLine(); ) ধরা (ব্যতিক্রম ব্যতিক্রম) ( Console.WriteLine(ex.Message); Console.ReadLine(); ) ) // প্রধান

    একটি অদ্ভুত-খালি খালি যখন লুপ আপনাকে একটি কনসোল অ্যাপ্লিকেশনের শেল চালু রাখতে দেয়। স্পিচ রিকগনিশন ইভেন্ট হ্যান্ডলার দ্বারা ক্লাস-লেভেল বুলিয়ান ভেরিয়েবলটি সত্য হিসাবে সেট করা হলে লুপটি সম্পূর্ণ হবে।

    স্বীকৃত বক্তৃতা প্রক্রিয়াকরণ

    বক্তৃতা শনাক্তকরণ ইভেন্টগুলি পরিচালনার জন্য কোডটি এভাবে শুরু হয়:

    static void sre_SpeechRecognized(অবজেক্ট প্রেরক, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; float confidence = e.Result.Confidence; Console.WriteLine("\nস্বীকৃত: " if (confidence);< 0.60) return; ...

    স্বীকৃত পাঠ্যটি SpeechRecognizedEventArgs অবজেক্টের Result.Text বৈশিষ্ট্যে সংরক্ষণ করা হয়। বিকল্পভাবে, আপনি Result.Words সেট ব্যবহার করতে পারেন। Result.Confidence প্রপার্টি 0.0 এবং 1.0 এর মধ্যে একটি মান সঞ্চয় করে যেটি একটি মোটামুটি অনুমান যে কথ্য পাঠ্যটি সনাক্তকারীর সাথে যুক্ত যেকোন ব্যাকরণের সাথে কতটা মেলে। ডেমো প্রোগ্রাম ইভেন্ট হ্যান্ডলারকে স্বীকৃত পাঠ্যের প্রতি কম আস্থা রেখে পাঠ্য উপেক্ষা করার নির্দেশ দেয়।

    আপনার ব্যাকরণের জটিলতা, মাইক্রোফোনের গুণমান এবং অন্যান্য বিষয়গুলির উপর নির্ভর করে আত্মবিশ্বাসের মানগুলি ব্যাপকভাবে পরিবর্তিত হয়। উদাহরণস্বরূপ, যদি ডেমো প্রোগ্রামটিকে শুধুমাত্র 1 থেকে 4 নম্বরগুলি চিনতে হয়, আমার কম্পিউটারে আত্মবিশ্বাসের মানগুলি সাধারণত 0.75 এর কাছাকাছি হয়। কিন্তু, যদি ব্যাকরণকে অবশ্যই 1 থেকে 100 পর্যন্ত সংখ্যা চিনতে হয়, আত্মবিশ্বাসের মানগুলি প্রায় 0.25-এ নেমে আসে। সংক্ষেপে, ভাল বক্তৃতা শনাক্তকরণ ফলাফল অর্জনের জন্য আপনার সাধারণত আত্মবিশ্বাসের মান নিয়ে পরীক্ষা করা উচিত।

    if (txt.IndexOf("speech on") >= 0) ( Console.WriteLine("স্পীচ এখন চালু"); speechOn = true; ) if (txt.IndexOf("স্পিচ অফ") >= 0) ( কনসোল .WriteLine("স্পীচ এখন বন্ধ"); speechOn = false; ) যদি (speechOn == false) ফিরে আসে;

    যদিও এটি প্রথমে সম্পূর্ণরূপে সুস্পষ্ট নাও হতে পারে, আপনি যদি এটি সম্পর্কে চিন্তা করেন তবে এই যুক্তিটি বোঝা উচিত। গোপন প্রস্থান কমান্ড তারপর প্রক্রিয়া করা হয়:

    if (txt.IndexOf("klatu") >= 0 && txt.IndexOf("barada") >= 0) ( ((SpeechRecognitionEngine)প্রেরক)।RecognizeAsyncCancel(); সম্পন্ন = সত্য; কনসোল.WriteLine("(কথা বলা: বিদায়)"); ss.Speak("বিদায়");)

    উল্লেখ্য যে স্পিচ রিকগনিশন ইঞ্জিন আসলে ফালতু শব্দ চিনতে পারে। যদি একটি গ্রামার অবজেক্টে এমন শব্দ থাকে যেগুলি বস্তুর অন্তর্নির্মিত অভিধানে নেই, তাহলে ব্যাকরণ সম্ভব হলে শব্দার্থিক হিউরিস্টিক ব্যবহার করে সেই শব্দগুলি সনাক্ত করার চেষ্টা করে এবং সাধারণত বেশ সফল হয়। তাই আমি সঠিক "ক্লাতু" এর পরিবর্তে "ক্লাতু" ব্যবহার করেছি (একটি পুরানো সাই-ফাই মুভি থেকে)।

    এছাড়াও মনে রাখবেন যে আপনাকে ব্যাকরণ দ্বারা স্বীকৃত সমস্ত পাঠ্য প্রক্রিয়া করার প্রয়োজন নেই (“ক্লাতু বারাদা নিকটো”) - ব্যাকরণগত শব্দগুচ্ছ (“ক্লাতু” এবং “বরাদা”) অনন্যভাবে সনাক্ত করার জন্য আপনার কাছে পর্যাপ্ত তথ্য থাকতে হবে।

    যদি (txt.IndexOf("What") >= 0 && txt.IndexOf("plus") >= 0) ( string words = txt.Split(" "); int num1 = int.Parse(words); int num2 = int.Parse(words); int sum = num1 + num2; Console.WriteLine("(কথা বলা: " + শব্দ + " প্লাস " + শব্দ + " সমান " + যোগফল + ")"); ss.SpeakAsync (শব্দ + " প্লাস " + শব্দ + " সমান " + যোগফল ); ) ) // sre_SpeechRecognized ) // প্রোগ্রাম ) // ns

    লক্ষ্য করুন যে ফলাফলের পাঠ্যটি কেস সংবেদনশীল ("কি" এবং "কি")। একটি বাক্যাংশ স্বীকৃত থাকার পরে, এটি নির্দিষ্ট শব্দগুলিতে পার্স করা যেতে পারে। এই ক্ষেত্রে, স্বীকৃত টেক্সট ফর্মের হয় “এক্স প্লাস y”, তাই “কী” শব্দের মধ্যে স্থাপন করা হয় এবং দুটি যোগ করা সংখ্যা (স্ট্রিং হিসাবে) শব্দ এবং শব্দে সংরক্ষণ করা হয়।

    লাইব্রেরি ইনস্টল করা হচ্ছে

    ডেমো প্রোগ্রামের ব্যাখ্যা অনুমান করে যে সমস্ত প্রয়োজনীয় স্পিচ লাইব্রেরি আপনার কম্পিউটারে ইনস্টল করা আছে। ডেমো প্রোগ্রাম তৈরি এবং চালানোর জন্য, আপনাকে চারটি প্যাকেজ ইনস্টল করতে হবে: SDK (ভিজ্যুয়াল স্টুডিওতে ডেমো তৈরি করার ক্ষমতা প্রদান করে), রানটাইম (সেগুলি তৈরি হওয়ার পরে ডেমোগুলি চালায়), এবং স্বীকৃত এবং সংশ্লেষিত (উচ্চারিত) ভাষা।

    SDK ইনস্টল করতে, "স্পিচ প্ল্যাটফর্ম 11 SDK" এর জন্য ইন্টারনেটে অনুসন্ধান করুন৷ এটি আপনাকে মাইক্রোসফ্ট ডাউনলোড সেন্টারের সঠিক পৃষ্ঠায় নিয়ে যাবে ( চাল 4) ডাউনলোড বোতামে ক্লিক করে আপনি প্রদর্শিত বিকল্পগুলি দেখতে পাবেন চাল 5. SDK 32- এবং 64-বিট সংস্করণে আসে। আমি দৃঢ়ভাবে আপনার সিস্টেমের বিট আকার নির্বিশেষে 32-বিট সংস্করণ ব্যবহার করার পরামর্শ দিই। 64-বিট সংস্করণ কিছু অ্যাপ্লিকেশনের সাথে কাজ করে না।


    ভাত। 4. Microsoft ডাউনলোড কেন্দ্রে প্রধান SDK ইনস্টলেশন পৃষ্ঠা


    ভাত। 5. স্পিচ SDK ইনস্টল করুন

    আপনার x86 (32-বিট সিস্টেমের জন্য) এর অধীনে একটি একক .msi ফাইল ছাড়া আর কিছুর প্রয়োজন নেই। এই ফাইলটি নির্বাচন করে পরবর্তী ক্লিক করে, আপনি সরাসরি এখান থেকে ইনস্টলার চালাতে পারেন। স্পিচ লাইব্রেরিগুলি কখন ইনস্টলেশন সম্পূর্ণ হয় সে সম্পর্কে খুব বেশি প্রতিক্রিয়া দেয় না, তাই কোনও সাফল্যের বার্তাগুলি সন্ধান করবেন না।


    ভাত। 6. রানটাইম পরিবেশের ইনস্টলেশন

    SDK হিসাবে একই প্ল্যাটফর্ম সংস্করণ (ডেমোতে 11) এবং বিট গভীরতা (32 বা 64) নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ। আবার, আমি দৃঢ়ভাবে 32-বিট সংস্করণের সুপারিশ করছি, এমনকি যদি আপনি একটি 64-বিট সিস্টেমে চালান।

    তারপর আপনি স্বীকৃতি ভাষা সেট করতে পারেন. ডাউনলোড পৃষ্ঠা এখানে প্রদান করা হয় চাল 7. ডেমো প্রোগ্রাম MSSpeech_SR_en-us_TELE.msi (ইংরেজি-ইউ.এস.) ফাইল ব্যবহার করে। SR মানে স্পিচ রিকগনিশন, আর TELE মানে টেলিফোনি; এর মানে হল যে স্বীকৃত ভাষাটি নিম্নমানের অডিও ইনপুটের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে, যেমন একটি টেলিফোন বা ডেস্কটপ মাইক্রোফোন থেকে।


    ভাত। 7. একটি স্বীকৃত ভাষা সেট করা

    অবশেষে, আপনি বক্তৃতা সংশ্লেষণের জন্য ভাষা এবং ভয়েস সেট করতে পারেন। ডাউনলোড পৃষ্ঠা এখানে প্রদান করা হয় চাল 8. ডেমো প্রোগ্রাম MSSpeech_TTS_en-us_Helen.msi ফাইল ব্যবহার করে। TTS (টেক্সট-টু-স্পীচ) মূলত বক্তৃতা সংশ্লেষণের সমার্থক। দুটি উপলব্ধ ভয়েস ইংরেজি, ইউ.এস. অন্যান্য ইংরেজি কণ্ঠ আছে, কিন্তু মার্কিন নয় সংশ্লেষণ ভাষার ফাইল তৈরি করা একটি খুব কঠিন কাজ। যাইহোক, আপনি বিভিন্ন কোম্পানি থেকে অন্যান্য ভয়েস ক্রয় এবং ইনস্টল করতে পারেন।


    ভাত। 8. ভয়েস এবং সংশ্লেষণ ভাষা সেট করা

    মজার বিষয় হল, যদিও বক্তৃতা শনাক্তকরণ ভাষা এবং ভয়েস/স্পিচ সংশ্লেষণ ভাষা আসলে সম্পূর্ণ ভিন্ন জিনিস, উভয় প্যাকেজই একই ডাউনলোড পৃষ্ঠার বিকল্প। ডাউনলোড সেন্টার UI আপনাকে স্বীকৃতি ভাষা এবং সংশ্লেষণ ভাষা উভয়ই পরীক্ষা করার অনুমতি দেয়, কিন্তু একই সময়ে সেগুলি ইনস্টল করার চেষ্টা করা আমার জন্য বিপর্যয়কর ছিল, তাই আমি সেগুলি আলাদাভাবে ইনস্টল করার পরামর্শ দিই৷

    Microsoft.Speech এর সাথে System.Speech তুলনা করা

    আপনি যদি উইন্ডোজ অ্যাপ্লিকেশনগুলির জন্য স্পিচ রিকগনিশন এবং সংশ্লেষণে নতুন হয়ে থাকেন, তবে আপনি সহজেই ডকুমেন্টেশন দ্বারা বিভ্রান্ত হতে পারেন কারণ একাধিক স্পিচ প্ল্যাটফর্ম রয়েছে। বিশেষত, এই নিবন্ধে ডেমো প্রোগ্রামগুলি দ্বারা ব্যবহৃত Microsoft.Speech.dll লাইব্রেরি ছাড়াও, System.Speech.dll নামে একটি লাইব্রেরি রয়েছে যা উইন্ডোজ অপারেটিং সিস্টেমের অংশ৷ দুটি লাইব্রেরি একই অর্থে যে তাদের API প্রায়, কিন্তু সম্পূর্ণরূপে অভিন্ন নয়। অতএব, আপনি যদি ইন্টারনেটে স্পিচ প্রসেসিং উদাহরণগুলি সন্ধান করেন এবং সম্পূর্ণ প্রোগ্রামগুলির পরিবর্তে কোড স্নিপেটগুলি দেখেন তবে উদাহরণটি System.Speech বা Microsoft.Speech কিনা তা মোটেই স্পষ্ট নয়৷

    আপনি যদি স্পিচ প্রসেসিংয়ে নতুন হন, তাহলে আপনার .NET অ্যাপ্লিকেশনে স্পিচ সমর্থন যোগ করতে System.Speech এর পরিবর্তে Microsoft.Speech লাইব্রেরি ব্যবহার করুন।

    যদিও উভয় লাইব্রেরি একটি সাধারণ কোর কোড বেস এবং অনুরূপ API ভাগ করে, তারা অবশ্যই আলাদা। কিছু মূল পার্থক্য সংক্ষিপ্ত করা হয় টেবিল 1.

    টেবিল 1. Microsoft.Speech এবং System.Speech এর মধ্যে প্রধান পার্থক্য

    System.Speech DLL OS এর অংশ, তাই এটি প্রতিটি উইন্ডোজ সিস্টেমে ইনস্টল করা আছে। Microsoft.Speech DLL (এবং এর সাথে সম্পর্কিত রানটাইম এবং ভাষাগুলি) সিস্টেমে ডাউনলোড এবং ইনস্টল করা আবশ্যক। System.Speech ব্যবহার করে স্বীকৃতির জন্য সাধারণত একটি নির্দিষ্ট ব্যবহারকারীর জন্য প্রশিক্ষণের প্রয়োজন হয়, যখন ব্যবহারকারী কিছু পাঠ্য পড়েন এবং সিস্টেম এই ব্যবহারকারীর উচ্চারণ বৈশিষ্ট্য বুঝতে শেখে। Microsoft.Speech ব্যবহার করে স্বীকৃতি যে কোনো ব্যবহারকারীর জন্য অবিলম্বে কাজ করে। System.Speech প্রায় যেকোনো শব্দ চিনতে পারে (এটিকে বলা হয় ফ্রি ডিকটেশন)। Microsoft.Speech শুধুমাত্র প্রোগ্রামে সংজ্ঞায়িত গ্রামার অবজেক্টে থাকা শব্দ এবং বাক্যাংশগুলিকে চিনবে৷

    একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে স্পিচ রিকগনিশন সমর্থন যোগ করা

    একটি উইন্ডোজ ফর্ম বা WPF অ্যাপ্লিকেশনে স্পিচ রিকগনিশন এবং সংশ্লেষণ সমর্থন যোগ করার প্রক্রিয়াটি কনসোল অ্যাপ্লিকেশনের মতোই। দেখানো ডেমো প্রোগ্রাম তৈরি করতে চাল 2, আমি ভিজ্যুয়াল স্টুডিও চালু করেছি, একটি নতুন C# Windows Forms অ্যাপ্লিকেশন তৈরি করেছি এবং এর নাম পরিবর্তন করেছি WinFormSpeech।

    এডিটরে টেমপ্লেট কোড লোড করার পর, আমি সমাধান এক্সপ্লোরার উইন্ডোতে Microsoft.Speech.dll ফাইলে একটি লিঙ্ক যোগ করেছি - ঠিক যেমনটি আমি কনসোল প্রোগ্রামে করেছি। সোর্স কোডের শীর্ষে, আমি বিবৃতি ব্যবহার করে অপ্রয়োজনীয় অপসারণ করেছি, শুধুমাত্র সিস্টেম, ডেটা, অঙ্কন এবং ফর্ম নামস্থানের রেফারেন্স রেখেছি। তারপর আমি Microsoft.Speech.Recognition এবং System.Globalization নামস্থানের জন্য দুটি ব্যবহার করে বিবৃতি যোগ করেছি।

    উইন্ডোজ ফর্ম-ভিত্তিক ডেমো স্পিচ সংশ্লেষণ ব্যবহার করে না, তাই আমি Microsoft.Speech.Synthesis লাইব্রেরির সাথে লিঙ্ক করি না। একটি Windows ফর্ম অ্যাপ্লিকেশনে বক্তৃতা সংশ্লেষণ যোগ করা একটি কনসোল অ্যাপ্লিকেশনের মতোই।

    ডিজাইন মোডে ভিজ্যুয়াল স্টুডিওতে, আমি একটি টেক্সটবক্স, চেকবক্স, এবং লিস্টবক্স নিয়ন্ত্রণগুলি ফর্মে টেনে এনেছি। চেকবক্সে ডাবল ক্লিক করে এবং ভিজ্যুয়াল স্টুডিও স্বয়ংক্রিয়ভাবে একটি কঙ্কাল চেক চেঞ্জড ইভেন্ট হ্যান্ডলার পদ্ধতি তৈরি করে।

    স্মরণ করুন যে ডেমো কনসোল প্রোগ্রামটি অবিলম্বে উচ্চারিত কমান্ডের জন্য শুনতে শুরু করে এবং এটি বন্ধ না হওয়া পর্যন্ত তা করতে থাকে। এই পদ্ধতিটি একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে, কিন্তু পরিবর্তে আমি একটি চেকবক্স নিয়ন্ত্রণ (অর্থাৎ, একটি চেক বক্স) ব্যবহার করে ব্যবহারকারীকে বক্তৃতা স্বীকৃতি চালু এবং বন্ধ করার অনুমতি দেওয়ার সিদ্ধান্ত নিয়েছি।

    ডেমো প্রোগ্রামের Form1.cs ফাইলের সোর্স কোড, যেখানে আংশিক ক্লাস সংজ্ঞায়িত করা হয়েছে, এখানে দেখানো হয়েছে চাল 9. একটি স্পিচ রিকগনিশন ইঞ্জিন অবজেক্ট ঘোষণা করা হয় এবং একটি ফর্ম সদস্য হিসাবে তৈরি করা হয়। ফর্মের কনস্ট্রাক্টরে, আমি SpeechRecognized ইভেন্ট হ্যান্ডলারকে হুক করি এবং তারপর দুটি গ্রামার অবজেক্ট তৈরি ও লোড করি:

    সর্বজনীন ফর্ম1() ( InitializeComponent(); sre.SetInputToDefaultAudioDevice(); sre.SpeechRecognized += sre_SpeechRecognized; গ্রামার g_HelloGoodbye = GetHelloGoodbyeGrammar(); গ্রামার g_Textram =Textram(Textram) GrammarAsync(g_HelloGoodby e);sre.LoadGrammarAsync(g_SetTextBox) ; // sre.RecognizeAsync() হল // চেকবক্স ইভেন্ট হ্যান্ডলারে)

    ভাত। 9. উইন্ডোজ ফর্মগুলিতে স্পিচ রিকগনিশন সমর্থন যোগ করুন

    সিস্টেম ব্যবহার করে; System.Data ব্যবহার করে; System.Drawing ব্যবহার করে; System.Windows.Forms ব্যবহার করে; Microsoft.Speech.Recognition ব্যবহার করে; System.Globalization ব্যবহার করে; namespace WinFormSpeech ( সর্বজনীন আংশিক ক্লাস ফর্ম 1: ফর্ম ( static CultureInfo ci = new CultureInfo("en-us"); static SpeechRecognitionEngine sre = new SpeechRecognitionEngine(ci); পাবলিক ফর্ম1() ( Initialize ComponentSe(et.d.face); .SpeechRecognized += sre_SpeechRecognized; গ্রামার g_HelloGoodbye = GetHelloGoodbyeGrammar(); গ্রামার g_SetTextBox = GetTextBox1TextGrammar(); sre.LoadGrammarAsync(g_HelloGrammarAsync(g_HelloGoodbyeGrammar); চেকবক্স ইভেন্ট হ্যান্ডলারে // sre. Recognize Async() হল // ) স্ট্যাটিক গ্রামার GetHelloGoodbyeGrammar() ( চয়েস ch_HelloGoodbye = new Choices(); ch_HelloGoodbye.Add("hello"); ch_HelloGoodbye.Add("goodbye"); GrammarBuilder gb_result = new Grammarram_chello(নতুন GrammarBuult) _ফলাফল) ; ফেরত দিন gb_result.অ্যাপেন্ড ("সেট টেক্সট বক্স 1"); gb_result.অ্যাপেন্ড(ch_Colors); ব্যাকরণ g_result = নতুন ব্যাকরণ(gb_result); g_result ফেরত; ) ব্যক্তিগত অকার্যকর checkBox1_CheckedChanged(অবজেক্ট প্রেরক, EventArgs e) ( if (checkBox1.Checked == true) sre.RecognizeAsync(RecognizeMode.Multiple); অন্যথায় যদি (checkBox1.Checked == false) // recognizesre (অক্ষম করা হয়) void sre_SpeechRecognized(অবজেক্ট প্রেরক, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; float conf = e.Result.Confidence; যদি (conf< 0.65) return; this.Invoke(new MethodInvoker(() =>( listBox1.Items.Add("আমি আপনাকে বলতে শুনেছি: " + txt); ))); // WinForm নির্দিষ্ট করে যদি (txt.IndexOf("text") >= 0 && txt.IndexOf("box") >= 0 && txt.IndexOf("1")>= 0) ( স্ট্রিং শব্দ = txt. স্প্লিট( এই

    আমি একটি কনসোল প্রোগ্রামের মতো সরাসরি দুটি ব্যাকরণ অবজেক্ট তৈরি করতে পারতাম, কিন্তু পরিবর্তে, কোডটি একটু পরিষ্কার করার জন্য, আমি দুটি সহায়ক পদ্ধতি (GetHelloGoodbyeGrammar এবং GetTextBox1TextGrammar) সংজ্ঞায়িত করেছি যা কাজটি করে।

    স্ট্যাটিক গ্রামার GetTextBox1TextGrammar() ( চয়েস ch_Colors = new Choices(); ch_Colors.Add(নতুন স্ট্রিং ( "লাল", "সাদা", "নীল")); গ্রামারবিল্ডার gb_result = নতুন GrammarBuilder(); gb_result" বক্স 1"); gb_result.অ্যাপেন্ড(ch_Colors); গ্রামার g_result = নতুন গ্রামার(gb_result); ফেরত g_result; )

    এই সাহায্যকারী পদ্ধতিটি "সেট টেক্সট বক্স 1 লাল" বাক্যাংশটি চিনবে। যাইহোক, ব্যবহারকারীকে এই শব্দগুচ্ছটি সঠিকভাবে উচ্চারণ করতে হবে না। উদাহরণ স্বরূপ, তিনি বলতে পারেন "অনুগ্রহ করে টেক্সট বক্স 1-এর টেক্সটটিকে লাল করে দিন" এবং বক্তৃতা শনাক্তকরণ ইঞ্জিন এখনও শব্দগুচ্ছটিকে "সেট টেক্সট বক্স 1 লাল" হিসেবে চিনবে - যদিও ব্যাকরণের সাথে সঠিক মিলের চেয়ে কম আত্মবিশ্বাসের মান রয়েছে। টেমপ্লেট. অন্য কথায়, ব্যাকরণ অবজেক্ট তৈরি করার সময়, আপনাকে একটি বাক্যাংশের সমস্ত বৈচিত্র বিবেচনা করতে হবে না। এটি বক্তৃতা স্বীকৃতির ব্যবহারকে আমূলভাবে সরল করে।

    চেকবক্সের জন্য ইভেন্ট হ্যান্ডলার এইভাবে সংজ্ঞায়িত করা হয়েছে:

    ব্যক্তিগত অকার্যকর checkBox1_CheckedChanged(অবজেক্ট প্রেরক, EventArgs e) ( if (checkBox1.Checked == true) sre.RecognizeAsync(RecognizeMode.Multiple); অন্যথায় যদি (checkBox1.Checked == false) // disabled sre.Cl.(Recognize));

    স্পিচ রিকগনিশন ইঞ্জিন অবজেক্ট, sre (স্পিচ রিকগনিশন ইঞ্জিন), সবসময় একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনের জন্য বিদ্যমান থাকে। ব্যবহারকারী যথাক্রমে চেকবক্স টগল করলে RecognizeAsync এবং RecognizeAsyncCancel পদ্ধতিতে কল করে এই বস্তুটি সক্রিয় এবং নিষ্ক্রিয় করা হয়।

    SpeechRecognized ইভেন্ট হ্যান্ডলার সংজ্ঞা দিয়ে শুরু হয়:

    void sre_SpeechRecognized(অবজেক্ট প্রেরক, SpeechRecognizedEventArgs e) ( string txt = e.Result.Text; float conf = e.Result.Confidence; যদি (conf< 0.65) return; ...

    কম-বেশি ক্রমাগত ব্যবহৃত Result.Text এবং Result.Confidence বৈশিষ্ট্যগুলি ছাড়াও, ফলাফল অবজেক্টের আরও বেশ কিছু দরকারী কিন্তু আরও জটিল বৈশিষ্ট্য রয়েছে যা আপনি অন্বেষণ করতে চাইতে পারেন; উদাহরণস্বরূপ, হোমোফোন এবং প্রতিস্থাপন ওয়ার্ড ইউনিট। এছাড়াও, স্পিচ রিকগনিশন ইঞ্জিন স্পিচহাইপোথিসাইজডের মতো বেশ কিছু দরকারী ইভেন্ট সরবরাহ করে।

    this.Invoke((Action)(() => listBox1.Items.Add("আমি আপনাকে বলতে শুনেছি: " + txt)));

    তত্ত্বগতভাবে, MethodInvoker প্রতিনিধি ব্যবহার করা এই পরিস্থিতিতে একটি অ্যাকশনের চেয়ে কিছুটা বেশি কার্যকর কারণ MethodInvoker হল Windows.Forms নামস্থানের অংশ এবং তাই Windows Forms অ্যাপ্লিকেশনগুলির জন্য নির্দিষ্ট৷ অ্যাকশন প্রতিনিধি আরও বহুমুখী। এই উদাহরণটি দেখায় যে আপনি স্পিচ রিকগনিশন ইঞ্জিনের মাধ্যমে একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন সম্পূর্ণভাবে ম্যানিপুলেট করতে পারেন - এটি একটি অবিশ্বাস্যভাবে শক্তিশালী এবং দরকারী বৈশিষ্ট্য।

    উপসংহার

    আপনি যদি .NET অ্যাপ্লিকেশনগুলিতে বক্তৃতা সংশ্লেষণ এবং স্বীকৃতি অন্বেষণ করতে চান তবে এই নিবন্ধে উপস্থাপিত তথ্যগুলি আপনাকে এখনই শুরু করা উচিত। আপনি প্রাথমিক শিক্ষা বক্ররেখা এবং কম্পোনেন্ট ইনস্টলেশনের বাধা অতিক্রম করার পরে প্রযুক্তিটি আয়ত্ত করা একটি হাওয়া। বক্তৃতা সংশ্লেষণ এবং স্বীকৃতির আসল চ্যালেঞ্জ হল বোঝা যখন এটি আসলে দরকারী।

    কনসোল প্রোগ্রামগুলির সাথে, আপনি আকর্ষণীয় কথোপকথন তৈরি করতে পারেন যেখানে ব্যবহারকারী একটি প্রশ্ন জিজ্ঞাসা করে এবং প্রোগ্রামের উত্তর দেয়, যার ফলে মূলত কর্টানা-এর মতো পরিবেশ তৈরি হয়। আপনাকে অবশ্যই কিছু সতর্কতা অবলম্বন করতে হবে কারণ যখন আপনার কম্পিউটারের স্পীকার থেকে বক্তৃতা আসে, তখন এটি মাইক্রোফোন দ্বারা বাছাই করা হবে এবং আবার স্বীকৃত হতে পারে। আমি নিজেকে বেশ মজার কিছু পরিস্থিতিতে পেয়েছি যেখানে আমি একটি প্রশ্ন জিজ্ঞাসা করেছি, অ্যাপটি এটিকে স্বীকৃতি দিয়েছে এবং উত্তর দিয়েছে, কিন্তু কথ্য উত্তর পরবর্তী স্বীকৃতি ইভেন্টকে ট্রিগার করেছে এবং আমি একটি মজার, অন্তহীন স্পিচ লুপ দিয়ে শেষ করেছি।

    কনসোল প্রোগ্রামে বক্তৃতার আরেকটি সম্ভাব্য ব্যবহার হল "লঞ্চ নোটপ্যাড" এবং "লঞ্চ ওয়ার্ড" এর মতো কমান্ডগুলি সনাক্ত করা। অন্য কথায়, এই ধরনের একটি কনসোল প্রোগ্রাম আপনার কম্পিউটারে এমন ক্রিয়া সম্পাদন করতে ব্যবহার করা যেতে পারে যা অন্যথায় কীবোর্ড এবং মাউসের প্রচুর ম্যানিপুলেশনের প্রয়োজন হবে।

    জেমস ম্যাকক্যাফ্রে(ড. জেমস ম্যাকক্যাফ্রে) ওয়াশিংটনের রেডমন্ডে মাইক্রোসফ্ট রিসার্চের জন্য কাজ করে। তিনি ইন্টারনেট এক্সপ্লোরার এবং বিং সহ একাধিক মাইক্রোসফ্ট পণ্য তৈরিতে অংশ নিয়েছিলেন। তার সাথে যোগাযোগ করা যেতে পারে [ইমেল সুরক্ষিত].

    এই নিবন্ধটি পর্যালোচনা করার জন্য মাইক্রোসফ্ট গবেষণা বিশেষজ্ঞ রব গ্রুয়েন, মার্ক মারন এবং কার্টিস ফন ভেহকে ধন্যবাদ।

    আপনি নিবন্ধটি পছন্দ করেছেন? বন্ধুদের সাথে ভাগাভাগি করা: