আমার নিজস্ব ভয়েস স্বীকৃতি কোড লেখা [বন্ধ]


17

সমস্যার বিবরণ

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

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

সমাধান বর্ণনা

আমি এটি সিতে লিখতে চাই তবে আমি কোনও ভাষা অজ্ঞেয়াদি প্রক্রিয়াটি নিয়ে আলোচনা করতে চাই, প্রক্রিয়াটির নিজস্বতার দিকে মনোনিবেশ করে। সুতরাং যে যদি আমরা করতে পারেন তা উপেক্ষা করা যাক।

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

ঘ। একটি মাইক্রোফোন আমার কোড চালানো আমার হার্ডওয়্যার ডিভাইসে সংযুক্ত। [1]। কোডটি নিয়মিত স্থির দৈর্ঘ্যের নমুনা নিচ্ছে, উদাহরণস্বরূপ দৈর্ঘ্যে 10msec বলুন, এবং বৃত্তাকার লগিং শৈলীতে উদাহরণস্বরূপ একটানা 10 টি নমুনা সংরক্ষণ করে। [2]। (আমি এই পরিসংখ্যানগুলি আমার মাথার উপরের অংশ থেকে আবিষ্কার করছি যাতে তারা প্রক্রিয়াটি বর্ণনা করার জন্য কেবল উদাহরণ)

[1] সঞ্চিত এবং সংগৃহীত অডিও নমুনাগুলি আরও ছোট রাখার জন্য এটি অভিধান রেকর্ডিংয়ের মতো একটি ব্যান্ড-পাস ফিল্টার এবং অপ-এম্পের মাধ্যমে সংযুক্ত হবে।

[2] আমি ঠিক কীভাবে একটি নমুনা নেব সে সম্পর্কে আমি নিশ্চিত নই, যদিও আমি একটি সংখ্যাসূচক চিত্র (পূর্ণসংখ্যা / ফ্লোট / ডাবল) তৈরি করতাম যা 10 মেসি স্যাম্পলটির অডিওকে উপস্থাপন করে (সম্ভবত কোনও সিআরসি মান) অথবা অডিও নমুনার MD5 যোগ ইত্যাদি) বা পরিসংখ্যানগুলির একটি স্ট্রিম (সম্ভবত ফ্রিকোয়েন্সিগুলির অডিও রিডিংয়ের একটি স্ট্রিম)। শেষ পর্যন্ত একটি "নমুনা" হবে একটি সংখ্যাসূচক চিত্র বা পরিসংখ্যান। এই অংশটি আরও অনেক বেশি হার্ডওয়ারের সাথে যুক্ত হতে চলেছে তাই এটি এখানে আলোচনার জন্য নয়।

ঘ। কোডটি এটি পর্যায়ক্রমে 10 টি নমুনা সঞ্চিত করে এবং একটি শব্দ বা শব্দগুচ্ছ বলা হচ্ছে বলে নির্দেশ করতে ভলিউম বৃদ্ধির সন্ধান করে (নিরবতা থেকে বিরতি) এবং তারপরে বৃদ্ধি হয় ধারাবাহিক নমুনা সংগ্রহ করার জন্য উদাহরণস্বরূপ 500 টি নমুনা বলা যায়। এর অর্থ এটি 10 ​​সেকেন্ডের নমুনায় 5 সেকেন্ডের অডিও ক্যাপচার করে।

এটি এই নমুনাগুলি বা "স্লাইস" যা সঞ্চিত শব্দ এবং ক্যাপচার করা শব্দগুলির মধ্যে তুলনা করা হয়। যদি নমুনাগুলির একটি উচ্চ পরিমাণে সমতুল্য সঞ্চিত সংগ্রহের সাথে মেলে, কোডটি তার একই শব্দটি ধরে নিয়েছে।

The start of a store recording of the world "hello" for example,
stored words are split into 10 msec samples also

Stored Sample No           | 1| 2| 3| 4| 5| 6| 7|  8|
Stored Sample Value        |27|38|41|16|59|77|200|78|

Incoming audio (me saying "hello") with some "blank" samples
at the start to symbolise silence

Incoming Sample No         | 1| 2| 3| 4| 5| 6| 7| 8| 9|10| 11|12|
Incoming Sample Value      |  |  |  |20|27|38|46|16|59|77|200|78|

ঘ। কোডটি একবার একটি সম্পূর্ণ নমুনা স্ট্রিম সংগ্রহ করে নিলে এটি নীচের অডিও রেকর্ডিং উত্পাদন শুরুতে ফাঁকা নমুনাগুলি ছাড়ে। এটি সঞ্চিত নমুনাটি আরও ভালভাবে সারিবদ্ধ করার জন্য নমুনা সেটটিকে পিছনের দিকে এবং কিছু জায়গায় ফরোয়ার্ড করতে পারে।

এটি নীচের মত একটি নমুনা সেট উত্পাদন করে:

Stored Sample No           | 1| 2| 3| 4| 5| 6|  7| 8|
Stored Sample Value        |27|38|41|16|59|77|200|78|

Incoming Sample No      |-1| 1| 2| 3| 4| 5| 6|  7| 8|
Incoming Sample Value   |20|27|38|46|16|59|81|201|78|

5 আমি বিশ্বাস করি যে প্রতিটি নমুনা কতটা কাছাকাছি হওয়া উচিত তার শতাংশের মান থাকার সাথে, সুতরাং নমুনা 7 টি 1% এর চেয়ে আলাদা যা 1% এর চেয়ে কম, এবং মোট নমুনার সংখ্যার জন্য শতাংশ শতাংশ যা তাদের নমুনার সাথে মিলে যাওয়ার শতাংশের মধ্যে থাকতে হবে , কোডটিতে নির্ভুলতার একটি সহজেই স্তরযুক্ত স্তর রয়েছে।

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

পিএস আমার কাছে এই "অডিও", "অডিও স্বীকৃতি", "ভয়েস", "ভয়েস স্বীকৃতি" ইত্যাদির মতো একটি নতুন ট্যাগ দিয়ে ট্যাগ করার রেপ নেই PS


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

4
প্রকৃতপক্ষে. আপনি, যদি আপনি বছরের বিকাশকে মনে করেন না, আপনি গ্রন্থাগারগুলি সন্ধান করতে চাইতে পারেন আপনার লক্ষ্যকে সংকলন করতে পারেন। আমি নিশ্চিত তাদের অস্তিত্ব আছে।
রিগ

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

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

উত্তর:


3

আচ্ছা, আমি বিশ্বাস করি না যে আরডুইনো এর কাছে ঘোড়ার শক্তি আছে। এটি 16 মেগাহার্টজ এ অপারেটিং আন অর্ডিনো প্রায় 32K মেমরি আছে। এমনকি এমপি 3 এ নমুনাযুক্ত 20 টি শব্দ (তারপরে আরও ছোট ছোট wav) কেবল এটি আপনার নিজের কণ্ঠস্বর সত্ত্বেও এটিতে উপযুক্ত হবে না।

রাসবেরি পাইটি সম্ভবত কৌশলটি করতে পারে, এটি 700Mhz এ অপারেটিং সংস্করণটির উপর নির্ভর করে 512 এমবি মেমরির হতে পারে। এটি এখনও অনেক আটা নয়।

আপনার কোনও ফুরিয়ার দরকার হতে পারে ( http://www.drdobbs.com/cpp/a-simple-and-effic-fft-implementatio/199500857 )

বা যদি আপনি ভলিউমটি ব্যবহার করতে চান, তবে পূর্ববর্তী নমুনাগুলির সাথে
x = (x + x [n-1] + x [n-2] + x [n-3]) / 4 // বেশ সহজ শক্তি সহ কয়েকটি গড়ে গড় করুন আরো দরকার

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

তারপরে এটি কিছুটা নির্ভর করে howালটি কীভাবে রেকর্ড করা যায় যাতে প্যাটার্নটি আরও একটি সময় ফিট করে। আমি বোঝাতে চাইছি একটি কম্পিউটার ঠিক টেম্পোতে কথা বলতে পারে না যা কম্পিউটারের সাথে মেলে এবং opeাল কিছুটা খাড়া হতে পারে। শেষ পর্যন্ত আমি মনে করি এটি এই লাইনগুলি কতটা খাড়া এবং তাদের দৈর্ঘ্য y অক্ষ, কিছুটা গড়ের মধ্যে হওয়া উচিত


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

  2. আপনার প্রোগ্রামমেটিক স্টাইলে ফোকাস করুন: আপনার নমুনাগুলি কি স্ট্যাক বা একটি সারিতে রয়েছে? আপনি এই ধরণের ডেটার জন্য একটি সারি চাইবেন। একটি সারি দেখে মনে হচ্ছে:

    Position NO --|1|2|3|4|5|6|7|8|
    Sample Value  |5|7|9|1|2|2|9|8|
    

    পরবর্তী পুনরাবৃত্তি:

    Position NO --|1|2|3|4|5|6|7|8|
    Sample Value  |0|5|7|9|1|2|2|9|
    ->  First in First out (FIFO)
    

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

  3. "কোড ক্রমাগত সংশোধন দৈর্ঘ্য নমুনা নিচ্ছে, 10msec বলে" <- ভুল এই ভাবে চিন্তা করুন: কোড বিযুক্তভাবে, নিরবচ্ছিন্ন (উচ্চতা) নমুনা নিচ্ছে প্রতি সেকেন্ডে 10000 স্যাম্পেলের একটি স্যাম্পলিং হার, যা প্রতিটি নমুনা 0.1 MS পৃথক্ তোলে করেন।

    আপনার নমুনা ফ্রিকোয়েন্সি কি? আপনার কোয়ান্টাইজারে বিটরেট কী? কম সংখ্যা আপনাকে স্মৃতি মুক্ত করতে সহায়তা করবে। আমি প্রতি সেকেন্ডে 6600 স্যাম্পল (নাইকুইস্ট) এর মতো কম নমুনার হারের পরামর্শ দেব। আমি সন্দেহ করি যে 4 বিট (16 স্তর) স্বীকৃতির জন্য যথেষ্ট হবে। সুতরাং প্রতি সেকেন্ডে রেকর্ডিংয়ের 3300 বাইট রয়েছে। এখন 3300 হার্জেডের (টেলিফোনি ফিল্টার) উপরে থাকা সমস্ত কিছু ফিট করুন এবং মুছুন। এখন আপনার কাছে 1650 বাইট শব্দের এক সেকেন্ডের জন্য ব্যবহৃত হয়েছে। এই ডিএসপি কৌশলগুলি অনেক স্মৃতি সাশ্রয় করবে।

    512 এমবি ছোট বলে কে মনে করে তা আমি জানি না। উপরের তথ্যটি যা 300,000+ সেকেন্ড রেকর্ডিং ... 3 দিনেরও বেশি শক্ত।

  4. আমি মনে করি আপনি ভয়েস সনাক্তকরণের জন্য আরও ভাল পরিবেশ হিসাবে ফ্রিকোয়েন্সি ডোমেন (fft ব্যবহার করে) পাবেন।

আমি আশা করি আমি আপনাকে আরও খারাপ গুলিয়ে ফেলিনি :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.