মাইক্রোকন্ট্রোলার এবং স্পার্কফান এজের জন্য টেনসরফ্লো লাইটের সাথে এআই স্পিচ রিকগনিশন

1. ভূমিকা

আপনি কি নির্মাণ করবেন

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

bf256d403a1821af.gif

মাইক্রোকন্ট্রোলারে মেশিন লার্নিং

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

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

1360b61fbfa33657.jpeg

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

মাইক্রোকন্ট্রোলারের জন্য টেনসরফ্লো লাইট (সফ্টওয়্যার)

358ffdb9eb758b90.png

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

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

স্পার্কফান এজ (হার্ডওয়্যার)

স্পার্কফান এজ হল একটি মাইক্রোকন্ট্রোলার-ভিত্তিক প্ল্যাটফর্ম: একটি একক সার্কিট বোর্ডে একটি ছোট কম্পিউটার। এটিতে একটি প্রসেসর, মেমরি এবং I/O হার্ডওয়্যার রয়েছে যা এটিকে অন্যান্য ডিভাইসে ডিজিটাল সংকেত পাঠাতে এবং গ্রহণ করতে দেয়। এটিতে আপনার পছন্দের Google রঙে চারটি সফ্টওয়্যার-নিয়ন্ত্রণযোগ্য LED রয়েছে৷

aa4493835a2338c6.png

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

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

আপনি কি শিখবেন

  • আপনার কম্পিউটারে স্পার্কফান এজের জন্য নমুনা প্রোগ্রামটি কম্পাইল করুন
  • আপনার ডিভাইসে প্রোগ্রাম স্থাপন করুন
  • প্রোগ্রামে পরিবর্তন করুন এবং এটি আবার স্থাপন করুন

আপনি কি প্রয়োজন হবে

আপনি নিম্নলিখিত হার্ডওয়্যার প্রয়োজন হবে:

আপনি নিম্নলিখিত সফ্টওয়্যার প্রয়োজন হবে:

2. আপনার হার্ডওয়্যার সেট আপ করুন

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

এর দ্বারা আপনার বোর্ডকে শক্তিশালী করুন:

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

25a6cc6b208e8a4e.png

  1. আপনার যদি কয়েন ব্যাটারি না থাকে, তাহলে বোর্ডকে পাওয়ার জন্য আপনি SparkFun USB-C সিরিয়াল বেসিক প্রোগ্রামার ডিভাইস ব্যবহার করতে পারেন। আপনার বোর্ডে এই ডিভাইসটি সংযুক্ত করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
  • SparkFun প্রান্তের পাশে ছয় পিন হেডারটি সনাক্ত করুন।
  • প্রতিটি ডিভাইসে "BLK" এবং "GRN" লেবেলযুক্ত পিনগুলি সঠিকভাবে সারিবদ্ধ হয়েছে তা নিশ্চিত করে এই পিনগুলিতে SparkFun USB-C সিরিয়াল বেসিক প্লাগ করুন৷
  • SparkFun USB-C সিরিয়াল বেসিক এবং আপনার কম্পিউটারের মধ্যে একটি USB-C কেবল সংযুক্ত করুন৷

b140822f0019f92a.png

একবার আপনি ব্যাটারি ঢোকানোর মাধ্যমে বা USB প্রোগ্রামার সংযোগ করে আপনার বোর্ড চালিত করলে, বোর্ডটি জেগে উঠবে এবং তার মাইক্রোফোনের সাথে শুনতে শুরু করবে। নীল আলো ঝলকানি শুরু করা উচিত।

বোর্ডে মেশিন লার্নিং মডেলটিকে "হ্যাঁ" এবং "না" শব্দগুলি চিনতে এবং বক্তৃতার উপস্থিতি এবং অনুপস্থিতি সনাক্ত করতে প্রশিক্ষণ দেওয়া হয়। এটি রঙিন এলইডি আলো করে তার ফলাফলগুলিকে যোগাযোগ করে৷ নিম্নলিখিত টেবিল প্রতিটি LED রঙের অর্থ দেখায়:

সনাক্তকরণ ফলাফল

LED রঙ

"হ্যাঁ"

হলুদ

"না"

লাল

অজানা বক্তৃতা

সবুজ

কোন বক্তৃতা সনাক্ত করা যায়নি

কোন এলইডি জ্বলেনি

একবার চেষ্টা করে দেখুন

বোর্ডটি আপনার মুখের কাছে ধরে রাখুন এবং কয়েকবার "হ্যাঁ" বলুন। আপনি হলুদ LED ফ্ল্যাশ দেখতে পাবেন। আপনি "হ্যাঁ" বলার সময় যদি কিছু না ঘটে তবে এখানে চেষ্টা করার জন্য কিছু জিনিস রয়েছে:

  • আপনার মুখ থেকে 10" এর কাছাকাছি বোর্ডটি ধরে রাখুন
  • অত্যধিক পটভূমি শব্দ এড়িয়ে চলুন
  • দ্রুত ধারাবাহিকভাবে কয়েকবার "হ্যাঁ" পুনরাবৃত্তি করুন ("হ্যাঁ হ্যাঁ হ্যাঁ" বলার চেষ্টা করুন)

3. আপনার সফ্টওয়্যার সেট আপ করুন

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

নিম্নলিখিত নির্দেশাবলী লিনাক্স বা MacOS-এর জন্য লেখা আছে।

TensorFlow রেপো ডাউনলোড করুন

কোডটি GitHub-এর টেনসরফ্লো রিপোজিটরিতে নিম্নলিখিত অবস্থানে পাওয়া যায়:

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro

আপনার কম্পিউটারে একটি টার্মিনাল খুলুন, এমন একটি ডিরেক্টরিতে পরিবর্তন করুন যেখানে আপনি সাধারণত কোডিং প্রকল্পগুলি সঞ্চয় করেন, TensorFlow সংগ্রহস্থল ডাউনলোড করুন এবং তৈরি করা ডিরেক্টরি লিখুন, নীচে দেখানো হিসাবে:

cd ~  # change into your home (or any other) directory
git clone --depth 1 https://github.com/tensorflow/tensorflow.git
cd tensorflow

পাইথন নির্ভরতা ডাউনলোড করুন

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

pip3 install pycrypto pyserial --user

4. বাইনারি তৈরি করুন এবং প্রস্তুত করুন

আমরা বাইনারি তৈরি করতে যাচ্ছি এবং কমান্ড চালাতে যাচ্ছি যা এটিকে ডিভাইসে ডাউনলোড করার জন্য প্রস্তুত করে।

বাইনারি তৈরি করুন

সমস্ত প্রয়োজনীয় নির্ভরতা ডাউনলোড করতে এবং বাইনারি তৈরি করতে, নিম্নলিখিত কমান্ডটি চালান:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge micro_speech_bin

যদি বিল্ডটি সফলভাবে কাজ করে, আউটপুটের চূড়ান্ত লাইনটি নিম্নরূপ প্রদর্শিত হবে:

arm-none-eabi-objcopy tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin -O binary

বাইনারি সফলভাবে তৈরি হয়েছে তা নিশ্চিত করতে, নিম্নলিখিত কমান্ডটি চালান:

test -f \
tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin && \
 echo "Binary was successfully created" || echo "Binary is missing"

আপনার দেখা উচিত Binary was successfully created ! আপনি যদি দেখেন Binary is missing , বিল্ড প্রক্রিয়ার সাথে একটি সমস্যা ছিল যার জন্য ডিবাগিং প্রয়োজন হবে।

বাইনারি প্রস্তুত করুন

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

আমরা উন্নয়নের জন্য ব্যবহার করতে পারি এমন কিছু ডামি ক্রিপ্টোগ্রাফিক কী সেট আপ করতে নিম্নলিখিত কমান্ডটি লিখুন:

cp tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info0.py tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/keys_info.py

এখন, একটি স্বাক্ষরিত বাইনারি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_image_blob.py \
--bin tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/micro_speech.bin \
--load-address 0xC000 \
--magic-num 0xCB \
-o main_nonsecure_ota \
--version 0x0

এটি main_nonsecure_ota.bin ফাইল তৈরি করবে। আমরা এখন ফাইলের একটি চূড়ান্ত সংস্করণ তৈরি করতে অন্য একটি কমান্ড চালাব যা বুটলোডার স্ক্রিপ্টের সাথে আমাদের ডিভাইস ফ্ল্যাশ করতে ব্যবহার করা যেতে পারে যা আমরা পরবর্তী ধাপে ব্যবহার করব:

python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/create_cust_wireupdate_blob.py \
--load-address 0x20000 \
--bin main_nonsecure_ota.bin \
-i 6 \
-o main_nonsecure_wire \
--options 0x1

যে ডিরেক্টরিতে আপনি কমান্ডগুলি চালান সেখানে আপনার এখন main_nonsecure_wire.bin নামে একটি ফাইল থাকা উচিত। এই ফাইলটি আমরা ডিভাইসে ফ্ল্যাশ করব।

5. বাইনারি ফ্ল্যাশ করতে প্রস্তুত হন

ঝলকানি কি?

SparkFun Edge বর্তমানে যে প্রোগ্রামটি চলছে তার 512 কিলোবাইট ফ্ল্যাশ মেমরিতে সঞ্চয় করে। আমরা যদি বোর্ডটি একটি নতুন প্রোগ্রাম চালাতে চাই, তবে আমাদের এটিকে বোর্ডে পাঠাতে হবে, যা এটিকে ফ্ল্যাশ মেমরিতে সংরক্ষণ করবে, পূর্বে সংরক্ষিত যেকোনো প্রোগ্রাম ওভাররাইট করে।

এই প্রক্রিয়াটিকে "ফ্ল্যাশিং" বলা হয় এবং আমরা আমাদের প্রোগ্রামটি বোর্ডে পাঠাতে এটি ব্যবহার করব।

বোর্ডে প্রোগ্রামার সংযুক্ত করুন

বোর্ডে নতুন প্রোগ্রাম ডাউনলোড করতে, আমরা SparkFun USB-C সিরিয়াল বেসিক সিরিয়াল প্রোগ্রামার ব্যবহার করব। এই ডিভাইসটি আপনার কম্পিউটারকে USB এর মাধ্যমে মাইক্রোকন্ট্রোলারের সাথে যোগাযোগ করতে দেয়।

আপনার বোর্ডে এই ডিভাইসটি সংযুক্ত করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. SparkFun প্রান্তের পাশে ছয় পিন হেডারটি সনাক্ত করুন।
  2. প্রতিটি ডিভাইসে "BLK" এবং "GRN" লেবেলযুক্ত পিনগুলি সঠিকভাবে সারিবদ্ধ হয়েছে তা নিশ্চিত করে এই পিনগুলিতে SparkFun USB-C সিরিয়াল বেসিক প্লাগ করুন৷

b140822f0019f92a.png

আপনার কম্পিউটারে প্রোগ্রামার সংযুক্ত করুন

আমরা USB এর মাধ্যমে আপনার কম্পিউটারের সাথে বোর্ড সংযোগ করব৷ বোর্ড প্রোগ্রাম করার জন্য, আপনার কম্পিউটার ডিভাইসটিকে যে নাম দেয় তা আমাদের জানতে হবে। এটি করার সর্বোত্তম উপায় হল কম্পিউটারের সমস্ত ডিভাইস সংযুক্ত করার আগে এবং পরে তালিকাভুক্ত করা এবং কোন ডিভাইসটি নতুন তা দেখতে।

USB এর মাধ্যমে ডিভাইসটি সংযুক্ত করার আগে , নিম্নলিখিত কমান্ডটি চালান:

If you are using Linux: ls /dev/tty*
If you are using MacOS: ls /dev/cu*

এটি সংযুক্ত ডিভাইসগুলির একটি তালিকা আউটপুট করা উচিত যা নীচের মত কিছু দেখায়:

/dev/cu.Bluetooth-Incoming-Port
/dev/cu.MALS
/dev/cu.SOC

এখন, প্রোগ্রামারটিকে আপনার কম্পিউটারের USB পোর্টের সাথে সংযুক্ত করুন। নিম্নলিখিত কমান্ডটি আবার লিখুন:

If you are using Linux: ls /dev/tty*
If you are using MacOS: ls /dev/cu*

নীচের উদাহরণের মতো আউটপুটে আপনার একটি অতিরিক্ত আইটেম দেখতে হবে। আপনার নতুন আইটেম একটি ভিন্ন নাম হতে পারে. এই নতুন আইটেমটি ডিভাইসের নাম।

/dev/cu.Bluetooth-Incoming-Port
/dev/cu.MALS
/dev/cu.SOC
/dev/cu.wchusbserial-1450

প্রথমে, আমরা ডিভাইসের নাম সনাক্ত করার জন্য একটি পরিবেশ পরিবর্তনশীল তৈরি করব:

export DEVICENAME=put your device name here

এরপরে, আমরা বড রেট নির্দিষ্ট করার জন্য একটি পরিবেশ পরিবর্তনশীল তৈরি করব, যে গতিতে ডেটা পাঠানো হবে ডিভাইসে:

export BAUD_RATE=921600

6. বাইনারি ফ্ল্যাশ করুন

আপনার বোর্ড ফ্ল্যাশ করতে স্ক্রিপ্ট চালান

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

আসুন বোর্ডে নিম্নলিখিত বোতামগুলির সাথে পরিচিত হই:

64c620570b9d2f83.png

বোর্ড রিসেট এবং ফ্ল্যাশ করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. নিশ্চিত করুন যে আপনার বোর্ড প্রোগ্রামারের সাথে সংযুক্ত আছে এবং পুরো সেটআপটি USB এর মাধ্যমে আপনার কম্পিউটারের সাথে সংযুক্ত রয়েছে।
  2. বোর্ডে 14 চিহ্নিত বোতামটি ধরে রাখা শুরু করুনধাপ 6 পর্যন্ত এটি ধরে রাখুন।
  3. এখনও 14 চিহ্নিত বোতামটি ধরে রেখে, বোর্ডটিকে তার বুটলোডার অবস্থায় পুনরায় সেট করার জন্য, বোর্ডটি পুনরায় সেট করতে RST চিহ্নিত বোতামে ক্লিক করুন।
  4. এখনও 14 চিহ্নিত বোতামটি ধরে রেখে, আপনার টার্মিনালে নিম্নলিখিত কমান্ডটি পেস্ট করুন এবং এটি চালানোর জন্য এন্টার টিপুন (সুবিধার জন্য, আপনি বোতামটি ধরে রাখা শুরু করার আগে এই কমান্ডটি আপনার টার্মিনালে পেস্ট করতে পারেন, তবে আপনি এই ধাপে না পৌঁছানো পর্যন্ত এন্টার টিপুন না )
python3 tensorflow/lite/micro/tools/make/downloads/AmbiqSuite-Rel2.2.0/tools/apollo3_scripts/uart_wired_update.py -b ${BAUD_RATE} ${DEVICENAME} -r 1 -f main_nonsecure_wire.bin -i 6
  1. এখনও 14 চিহ্নিত বোতামটি ধরে রাখলে, আপনি এখন স্ক্রিনে নিচের মত কিছু দেখতে পাবেন:
Connecting with Corvette over serial port /dev/cu.usbserial-1440...
Sending Hello.
Received response for Hello
Received Status
length =  0x58
version =  0x3
Max Storage =  0x4ffa0
Status =  0x2
State =  0x7
AMInfo =
0x1
0xff2da3ff
0x55fff
0x1
0x49f40003
0xffffffff
[...lots more 0xffffffff...]
Sending OTA Descriptor =  0xfe000
Sending Update Command.
number of updates needed =  1
Sending block of size  0x158b0  from  0x0  to  0x158b0
Sending Data Packet of length  8180
Sending Data Packet of length  8180
[...lots more Sending Data Packet of length  8180...]
  1. Sending Data Packet of length 8180 দেখার পরে বোর্ডে 14 চিহ্নিত বোতামটি ধরে রাখা বন্ধ করুন (তবে আপনি এটি ধরে রাখলে ঠিক আছে)। প্রোগ্রামটি টার্মিনালে লাইন মুদ্রণ করতে থাকবে। এটি অবশেষে নিম্নলিখিত মত কিছু দেখাবে:
[...lots more Sending Data Packet of length  8180...]
Sending Data Packet of length  8180
Sending Data Packet of length  6440
Sending Reset Command.
Done.

যদি আপনি Done দেখতে পান তবে এটি একটি সফল ফ্ল্যাশিং নির্দেশ করে। যদি প্রোগ্রামের আউটপুটটি একটি ত্রুটির সাথে শেষ হয়, Sending Reset Command প্রিন্ট করা হয়েছে কিনা তা পরীক্ষা করুন। যদি তাই হয়, ত্রুটি সত্ত্বেও ফ্ল্যাশিং সম্ভবত সফল ছিল।

একটি লিনাক্স মেশিনে, আপনি একটি NoResponse Error সম্মুখীন হতে পারেন। এর কারণ হল ch34x সিরিয়াল ড্রাইভারটি বিদ্যমান সিরিয়াল ড্রাইভারের পাশাপাশি ইনস্টল করা হয়েছে, যা নিম্নরূপ সমাধান করা যেতে পারে:

ধাপ 1 : ch34x লাইব্রেরির সঠিক সংস্করণটি পুনরায় ইনস্টল করুন। ইনস্টলেশনের সময় ডিভাইসটি কম্পিউটার থেকে আনপ্লাগ করা হয়েছে তা নিশ্চিত করুন।

git clone https://github.com/juliagoda/CH341SER.git
cd CH341SER/
make
sudo insmod ch34x.ko
sudo rmmod ch341

ধাপ 2 : বোর্ড USB প্লাগ ইন করুন এবং চালান:

dmesg | grep "ch34x"

আপনি এই মত একটি বার্তা দেখতে হবে:

[ 1299.444724]  ch34x_attach+0x1af/0x280 [ch34x]
[ 1299.445386] usb 2-13.1: ch34x converter now attached to ttyUSB0

যদি ব্যবহৃত ড্রাইভারটি "ch34x" না হয় (যেমন: ch341), অন্য ড্রাইভারটিকে চালিয়ে অক্ষম করার চেষ্টা করুন:

rmmod <non-ch34x driver name>

ডিভাইসটি আনপ্লাগ করুন এবং পুনরায় প্লাগ করুন এবং নিশ্চিত করুন যে ড্রাইভারটি ব্যবহার করা হচ্ছে "ch34x"।

7. ডেমো

প্রোগ্রামটি চেষ্টা করে দেখুন

আপনার বোর্ড সফলভাবে ফ্ল্যাশ হয়ে গেলে, চিহ্নিত বোতামটি টিপুন

বোর্ড পুনরায় চালু করতে এবং প্রোগ্রাম শুরু করতে RST . যদি নীল LED জ্বলতে শুরু করে, ফ্ল্যাশিং সফল হয়। যদি না হয়, নিচে স্ক্রোল করুন " এটা কাজ না করলে কি হবে?" নীচের অধ্যায়।

bf256d403a1821af.gif

বোর্ডে মেশিন লার্নিং মডেলটিকে "হ্যাঁ" এবং "না" শব্দগুলি চিনতে এবং বক্তৃতার উপস্থিতি এবং অনুপস্থিতি সনাক্ত করতে প্রশিক্ষণ দেওয়া হয়। এটি রঙিন এলইডি আলো করে তার ফলাফলগুলিকে যোগাযোগ করে৷ নিম্নলিখিত টেবিল প্রতিটি LED রঙের অর্থ দেখায়:

সনাক্তকরণ ফলাফল

LED রঙ

"হ্যাঁ"

হলুদ

"না"

লাল

অজানা বক্তৃতা

সবুজ

কোন বক্তৃতা সনাক্ত করা যায়নি

কোন এলইডি জ্বলেনি

একবার চেষ্টা করে দেখুন

বোর্ডটি আপনার মুখের কাছে ধরে রাখুন এবং কয়েকবার "হ্যাঁ" বলুন। আপনি হলুদ LED ফ্ল্যাশ দেখতে পাবেন। আপনি "হ্যাঁ" বলার সময় যদি কিছু না ঘটে তবে এখানে চেষ্টা করার জন্য কিছু জিনিস রয়েছে:

  • আপনার মুখ থেকে 10" এর কাছাকাছি বোর্ডটি ধরে রাখুন
  • অত্যধিক পটভূমি শব্দ এড়িয়ে চলুন
  • দ্রুত ধারাবাহিকভাবে কয়েকবার "হ্যাঁ" পুনরাবৃত্তি করুন ("হ্যাঁ হ্যাঁ হ্যাঁ" বলার চেষ্টা করুন)

এটা কাজ না হলে কি?

এখানে কিছু সম্ভাব্য সমস্যা এবং কীভাবে সেগুলি ডিবাগ করবেন:

সমস্যা: ফ্ল্যাশ করার পরে, LED এর কোনোটিই আসছে না।

সমাধান: RST বোতামে আঘাত করার চেষ্টা করুন, অথবা প্রোগ্রামার থেকে বোর্ড সংযোগ বিচ্ছিন্ন এবং পুনরায় সংযোগ করুন। যদি এইগুলির কোনটিই কাজ না করে তবে বোর্ডটি আবার ফ্ল্যাশ করার চেষ্টা করুন।

সমস্যা: নীল LED আলো জ্বলছে, কিন্তু এটি খুব ম্লান।

সমাধান: ব্যাটারি কম চলছে বলে প্রতিস্থাপন করুন। বিকল্পভাবে, বোর্ড প্রোগ্রামার এবং তারের ব্যবহার করে কম্পিউটার দ্বারা চালিত হতে পারে।

8. ডিবাগ আউটপুট পড়ুন (ঐচ্ছিক)

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

একটি সিরিয়াল সংযোগ খুলুন

ডিফল্টরূপে, আমাদের SparkFun Edge নমুনা কোড তাদের আত্মবিশ্বাসের সাথে যেকোনো উচ্চারিত কমান্ড লগ করে। বোর্ডের আউটপুট দেখতে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

screen ${DEVICENAME} 115200

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

Apollo3 Burst Mode is Available

                               Apollo3 operating in Burst Mode (96MHz)

"হ্যাঁ" বা "না" বলে কিছু কমান্ড জারি করার চেষ্টা করুন। আপনি প্রতিটি কমান্ডের জন্য বোর্ড মুদ্রণ ডিবাগ তথ্য দেখতে হবে:

 Heard yes (202) @65536ms

উপরের লগে, yes কমান্ডটি বোঝায়। 202 নম্বরটি আস্থার স্তরকে নির্দেশ করে যে কমান্ডটি শোনা হয়েছিল (200 সর্বনিম্ন হওয়ার সাথে)। অবশেষে, 65536ms বলতে মাইক্রোকন্ট্রোলারটি শেষ রিসেট হওয়ার পর থেকে যে সময় অতিবাহিত হয়েছে তা বোঝায়।

ডিবাগ আউটপুট দেখা বন্ধ করতে, Ctrl+A টিপুন, অবিলম্বে K কী দ্বারা অনুসরণ করুন, তারপর Y কী টিপুন।

ডিবাগ লগ লিখুন

আপনি কমান্ড_responder.cc ফাইলে এই তথ্য লগ করার কোডটি দেখতে পারেন যেটির সাথে আপনি কাজ করছেন:

tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc

ডেটা লগ করার জন্য, আপনি error_reporter->Report() পদ্ধতিতে কল করতে পারেন। এটি স্ট্রিং ইন্টারপোলেশনের জন্য স্ট্যান্ডার্ড printf টোকেন সমর্থন করে, যা আপনি আপনার লগগুলিতে গুরুত্বপূর্ণ তথ্য অন্তর্ভুক্ত করতে ব্যবহার করতে পারেন:

error_reporter->Report("Heard %s (%d) @%dms", found_command, score, current_time);

এই পদ্ধতিটি কার্যকর হওয়া উচিত যখন আপনি পরবর্তী বিভাগে কোডে নিজের পরিবর্তনগুলি করছেন৷

9. কোড প্রসারিত করুন (ঐচ্ছিক)

এখন যেহেতু আপনি জানেন কিভাবে আপনার SparkFun এজ তৈরি এবং ফ্ল্যাশ করতে হয়, আপনি কোডের সাথে খেলা শুরু করতে পারেন এবং ফলাফলগুলি দেখতে আপনার ডিভাইসে এটি স্থাপন করতে পারেন৷

কোড পড়ুন

কোড পড়া শুরু করার জন্য একটি ভাল জায়গা হল নিম্নলিখিত ফাইল, command_responder.cc.

tensorflow/lite/micro/examples/micro_speech/sparkfun_edge/command_responder.cc

আপনি এখানে GitHub-এ ফাইলটি দেখতে পারেন।

এই ফাইলের পদ্ধতি, RespondToCommand , যখন একটি ভয়েস কমান্ড সনাক্ত করা হয় তখন বলা হয়। বিদ্যমান কোডটি "হ্যাঁ", "না" বা একটি অজানা আদেশ শোনার উপর নির্ভর করে একটি ভিন্ন LED চালু করে। নিম্নলিখিত স্নিপেট দেখায় কিভাবে এটি কাজ করে:

if (found_command[0] == 'y') {
  am_hal_gpio_output_set(AM_BSP_GPIO_LED_YELLOW);
}
if (found_command[0] == 'n') {
  am_hal_gpio_output_set(AM_BSP_GPIO_LED_RED);
}
if (found_command[0] == 'u') {
  am_hal_gpio_output_set(AM_BSP_GPIO_LED_GREEN);
}

found_command আর্গুমেন্টে সনাক্ত করা কমান্ডের নাম রয়েছে। প্রথম অক্ষর চেক করে, if স্টেটমেন্টের এই সেটটি নির্ধারণ করে কোন LED আলোতে হবে।

RespondToCommand পদ্ধতিটি বিভিন্ন আর্গুমেন্টের সাথে বলা হয়:

void RespondToCommand(tflite::ErrorReporter* error_reporter,
    int32_t current_time, const char* found_command,
    uint8_t score, bool is_new_command) {
  • error_reporter ডিবাগ তথ্য লগ করতে ব্যবহার করা হয় (পরে আরও)।
  • current_time নির্দেশিত সময় নির্দেশ করে যে কমান্ডটি সনাক্ত করা হয়েছিল।
  • found_command আমাদের বলে যে কোন কমান্ড সনাক্ত করা হয়েছে।
  • score আমাদের বলে যে আমরা কতটা আত্মবিশ্বাসী যে আমরা একটি কমান্ড সনাক্ত করেছি।
  • is_new_command আমাদের জানতে দেয় যে এই প্রথমবার কমান্ড শুনছে কিনা।

score হল 0-255 থেকে একটি পূর্ণসংখ্যার সংখ্যা যা একটি কমান্ড শনাক্ত করার সম্ভাবনার প্রতিনিধিত্ব করে। নমুনা কোড শুধুমাত্র একটি কমান্ডকে বৈধ বলে বিবেচনা করে যদি স্কোর 200-এর বেশি হয়। আমাদের পরীক্ষার উপর ভিত্তি করে, বেশিরভাগ বৈধ কমান্ড 200-210-এর মধ্যে পড়ে।

কোড পরিবর্তন করুন

স্পার্কফান এজ বোর্ডে চারটি এলইডি রয়েছে। বর্তমানে, আমরা নীল এলইডি ফ্ল্যাশ করছি যে স্বীকৃতি ঘটছে তা নির্দেশ করতে। আপনি command_responder.cc ফাইলে এটি দেখতে পারেন:

static int count = 0;

// Toggle the blue LED every time an inference is performed.
++count;
if (count & 1) {
  am_hal_gpio_output_set(AM_BSP_GPIO_LED_BLUE);
} else {
  am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
}

যেহেতু আমাদের চারটি এলইডির একটি ব্যাঙ্ক রয়েছে, আসুন একটি প্রদত্ত কমান্ডের score ভিজ্যুয়াল সূচক হিসাবে সেগুলি ব্যবহার করার জন্য প্রোগ্রামটি পরিবর্তন করি। একটি কম স্কোর একটি একক আলোকিত LED যোগ্য হবে, এবং উচ্চ স্কোরের ফলে একাধিক আলো আসবে৷

প্রোগ্রামটি চলছে কিনা তা জানার জন্য আমাদের কাছে একটি উপায় আছে তা নিশ্চিত করতে, আমরা নীলের পরিবর্তে ক্রমাগত লাল LED ফ্ল্যাশ তৈরি করব। আমাদের সাম্প্রতিক score শক্তি দেখানোর জন্য সংলগ্ন নীল, সবুজ এবং হলুদ LED ব্যবহার করা হবে। এবং সরলতার জন্য, "হ্যাঁ" শব্দটি উচ্চারিত হলেই আমরা সেই এলইডিগুলিকে আলোকিত করব। অন্য শব্দ সনাক্ত করা হলে, LEDs পরিষ্কার হবে.

এই পরিবর্তন করতে, নিম্নলিখিত স্নিপেট দিয়ে আপনার command_responder.cc ফাইলের সমস্ত কোড প্রতিস্থাপন করুন :

#include "tensorflow/lite/micro/examples/micro_speech/command_responder.h"

#include "am_bsp.h"

// This implementation will light up the LEDs on the board in response to different commands.
void RespondToCommand(tflite::ErrorReporter* error_reporter,
                      int32_t current_time, const char* found_command,
                      uint8_t score, bool is_new_command) {
  static bool is_initialized = false;
  if (!is_initialized) {
    // Setup LEDs as outputs
    am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_RED, g_AM_HAL_GPIO_OUTPUT_12);
    am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_BLUE, g_AM_HAL_GPIO_OUTPUT_12);
    am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_GREEN, g_AM_HAL_GPIO_OUTPUT_12);
    am_hal_gpio_pinconfig(AM_BSP_GPIO_LED_YELLOW, g_AM_HAL_GPIO_OUTPUT_12);
    // Ensure all pins are cleared
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_RED);
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_GREEN);
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_YELLOW);
    is_initialized = true;
  }
  static int count = 0;

   // Toggle the red LED every time an inference is performed.
   ++count;
   if (count & 1) {
     am_hal_gpio_output_set(AM_BSP_GPIO_LED_RED);
   } else {
     am_hal_gpio_output_clear(AM_BSP_GPIO_LED_RED);
   }

  if (is_new_command) {
    // Clear the last three LEDs
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_BLUE);
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_GREEN);
    am_hal_gpio_output_clear(AM_BSP_GPIO_LED_YELLOW);
    error_reporter->Report("Heard %s (%d) @%dms", found_command, score,
                           current_time);
    // Only indicate a 'yes'
    if (found_command[0] == 'y') {
      // Always light the blue LED
      am_hal_gpio_output_set(AM_BSP_GPIO_LED_BLUE);
      // Light the other LEDs depending on score
      if (score >= 205) {
        am_hal_gpio_output_set(AM_BSP_GPIO_LED_GREEN);
      }
      if(score >= 210) {
        am_hal_gpio_output_set(AM_BSP_GPIO_LED_YELLOW);
      }
    }
  }
}

যদি একটি নতুন কমান্ড সনাক্ত করা হয়, is_new_command সত্য হবে। আমরা নীল, সবুজ এবং হলুদ LED গুলি সাফ করব, তারপর found_command এবং score মানগুলির উপর নির্ভর করে সেগুলিকে আবার আলোকিত করব।

পুনর্নির্মাণ এবং ফ্ল্যাশ

একবার আপনি কোড পরিবর্তন করে ফেললে, Build থেকে সমস্ত ধাপ চালিয়ে এটি পরীক্ষা করুন এবং বাইনারি প্রস্তুত করুন।

10. পরবর্তী পদক্ষেপ

অভিনন্দন, আপনি সফলভাবে একটি মাইক্রোকন্ট্রোলারে আপনার প্রথম স্পিচ ডিটেক্টর তৈরি করেছেন!

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

রেফারেন্স ডক্স

26699b18f2b199f.png

ধন্যবাদ, এবং মজা বিল্ডিং আছে!