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

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

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

টেনসরফ্লো হল গুগলের ওপেন সোর্স মেশিন লার্নিং ফ্রেমওয়ার্ক যা প্রশিক্ষণ এবং চলমান মডেলগুলির জন্য। টেনসরফ্লো লাইট হল একটি সফ্টওয়্যার ফ্রেমওয়ার্ক, টেনসরফ্লোর একটি অপ্টিমাইজড সংস্করণ, যা মোবাইল ফোনের মতো ছোট, তুলনামূলকভাবে কম শক্তিসম্পন্ন ডিভাইসগুলিতে টেনসরফ্লো মডেলগুলি চালানোর জন্য তৈরি।
TensorFlow Lite For Microcontrollers হল একটি সফটওয়্যার ফ্রেমওয়ার্ক, TensorFlow এর একটি অপ্টিমাইজড সংস্করণ, যা মাইক্রোকন্ট্রোলারের মতো ক্ষুদ্র, কম-শক্তিসম্পন্ন হার্ডওয়্যারে Tensorflow মডেল চালানোর জন্য তৈরি। এটি এই এমবেডেড পরিবেশে প্রয়োজনীয় সীমাবদ্ধতাগুলি মেনে চলে, অর্থাৎ, এর একটি ছোট বাইনারি আকার রয়েছে, এর জন্য অপারেটিং সিস্টেম সমর্থন, কোনও স্ট্যান্ডার্ড C বা C++ লাইব্রেরি, বা গতিশীল মেমরি বরাদ্দ ইত্যাদির প্রয়োজন হয় না।
স্পার্কফান এজ (হার্ডওয়্যার)
স্পার্কফান এজ একটি মাইক্রোকন্ট্রোলার-ভিত্তিক প্ল্যাটফর্ম: একটি একক সার্কিট বোর্ডে একটি ক্ষুদ্র কম্পিউটার। এতে একটি প্রসেসর, মেমোরি এবং I/O হার্ডওয়্যার রয়েছে যা এটিকে অন্যান্য ডিভাইসে ডিজিটাল সিগন্যাল পাঠাতে এবং গ্রহণ করতে দেয়। এতে চারটি সফ্টওয়্যার-নিয়ন্ত্রণযোগ্য LED রয়েছে, আপনার প্রিয় গুগল রঙে।

একটি কম্পিউটারের মতো, একটি মাইক্রোকন্ট্রোলার কোনও অপারেটিং সিস্টেম চালায় না। পরিবর্তে, আপনি যে প্রোগ্রামগুলি লেখেন তা সরাসরি হার্ডওয়্যারে চলে। আপনি একটি কম্পিউটারে আপনার কোডটি লিখেন এবং প্রোগ্রামার নামক একটি ডিভাইসের মাধ্যমে মাইক্রোকন্ট্রোলারে ডাউনলোড করেন।
মাইক্রোকন্ট্রোলারগুলি শক্তিশালী কম্পিউটার নয়। এগুলির প্রসেসর ছোট, এবং খুব বেশি মেমোরি নেই। কিন্তু যেহেতু এগুলি যতটা সম্ভব সহজ করে ডিজাইন করা হয়েছে, তাই একটি মাইক্রোকন্ট্রোলার খুব কম শক্তি ব্যবহার করতে পারে। আপনার প্রোগ্রাম কী করে তার উপর নির্ভর করে, স্পার্কফান এজ একটি একক কয়েন সেল ব্যাটারিতে সপ্তাহব্যাপী চলতে পারে!
তুমি কি শিখবে
- আপনার কম্পিউটারে SparkFun Edge এর জন্য নমুনা প্রোগ্রামটি কম্পাইল করুন।
- আপনার ডিভাইসে প্রোগ্রামটি স্থাপন করুন
- প্রোগ্রামটিতে পরিবর্তন করুন এবং এটি আবার স্থাপন করুন
তোমার যা লাগবে
আপনার নিম্নলিখিত হার্ডওয়্যারগুলির প্রয়োজন হবে:
- লিনাক্স বা ম্যাকওএস কম্পিউটার
- স্পার্কফান এজ বোর্ড
- স্পার্কফান ইউএসবি-সি সিরিয়াল বেসিক প্রোগ্রামার
- USB-C থেকে USB-A কেবল (যদি আপনি একটি USB-C কম্পিউটার ব্যবহার করেন, তাহলে USB-C থেকে USB-C কেবল নিন)
- (ঐচ্ছিক) 3V 20mm কয়েন সেল লিথিয়াম ব্যাটারি (CR2032) প্রোগ্রামার এবং কেবল ছাড়াই অনুমান চালানোর জন্য
আপনার নিম্নলিখিত সফ্টওয়্যারটির প্রয়োজন হবে:
- গিট (কমান্ড লাইনে
gitচালিয়ে এটি ইনস্টল করা আছে কিনা তা পরীক্ষা করুন) - পাইথন ৩ (কমান্ড লাইনে
python3অথবাpython --versionচালিয়ে এটি ইনস্টল করা আছে কিনা তা পরীক্ষা করুন) - পাইথন ৩ এর জন্য পিপ ( সহায়ক স্ট্যাকওভারফ্লো উত্তর )
- ৪.২.১ বা তার বেশি সংস্করণ তৈরি করুন (কমান্ড লাইনে
make --versionচালিয়ে এটি ইনস্টল করা আছে কিনা তা পরীক্ষা করুন) - স্পার্কফান সিরিয়াল বেসিক ড্রাইভার
2. আপনার হার্ডওয়্যার সেট আপ করুন
স্পার্কফান এজ মাইক্রোকন্ট্রোলারটি একটি আগে থেকে ইনস্টল করা বাইনারি সহ আসে যা স্পিচ মডেলটি চালাতে পারে। আমাদের নিজস্ব সংস্করণ দিয়ে এটি ওভাররাইট করার আগে, প্রথমে এই মডেলটি চালানো যাক।
আপনার বোর্ডকে শক্তিশালী করুন:
- বোর্ডের পিছনের ব্যাটারি সংযোগকারীতে একটি কয়েন সেল ব্যাটারি ঢোকান (ব্যাটারির "+" দিকটি উপরের দিকে রেখে। যদি আপনার বোর্ডে ইতিমধ্যেই একটি ব্যাটারি ঢোকানো থাকে, তাহলে প্লাস্টিকের ট্যাবটি টেনে বের করুন এবং ব্যাটারিটি পুরোপুরি ঢোকানো হয়েছে কিনা তা নিশ্চিত করার জন্য ধাক্কা দিন)

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

একবার আপনি ব্যাটারি ঢুকিয়ে অথবা USB প্রোগ্রামার সংযুক্ত করে আপনার বোর্ডটি চালু করলে, বোর্ডটি জেগে উঠবে এবং তার মাইক্রোফোন দিয়ে শুনতে শুরু করবে। নীল আলো জ্বলতে শুরু করবে।
বোর্ডে থাকা মেশিন লার্নিং মডেলটিকে "হ্যাঁ" এবং "না" শব্দগুলি চিনতে এবং কথা বলার উপস্থিতি এবং অনুপস্থিতি সনাক্ত করতে প্রশিক্ষণ দেওয়া হয়েছে। এটি রঙিন LED লাইট জ্বালানোর মাধ্যমে এর ফলাফল প্রকাশ করে। নিম্নলিখিত টেবিলটি প্রতিটি LED রঙের অর্থ দেখায়:
সনাক্তকরণের ফলাফল | এলইডি রঙ |
"হ্যাঁ" | হলুদ |
"না" | লাল |
অজানা বক্তৃতা | সবুজ |
কোনও স্পিচ শনাক্ত করা যায়নি | কোনও LED জ্বলছে না |
একবার চেষ্টা করে দেখো
বোর্ডটি আপনার মুখের কাছে ধরে কয়েকবার "হ্যাঁ" বলুন। আপনি হলুদ LED ফ্ল্যাশ দেখতে পাবেন। "হ্যাঁ" বলার পরেও যদি কিছু না ঘটে, তাহলে এখানে কিছু জিনিস চেষ্টা করে দেখুন:
- বোর্ডটি আপনার মুখ থেকে প্রায় ১০" দূরে ধরুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড নয়েজ এড়িয়ে চলুন
- "হ্যাঁ" দ্রুত পরপর কয়েকবার পুনরাবৃত্তি করুন ("হ্যাঁ হ্যাঁ হ্যাঁ" বলার চেষ্টা করুন)
৩. আপনার সফটওয়্যার সেট আপ করুন
আমরা এখন মাইক্রোকন্ট্রোলারে স্পিচ মডেলটি ডাউনলোড, ইনস্টল এবং রান করব। এর জন্য, আমরা প্রথমে এই প্রোগ্রামটির সোর্স কোড এবং এটি তৈরি করার জন্য প্রয়োজনীয় নির্ভরতাগুলি ডাউনলোড করব। প্রোগ্রামটি C++ তে লেখা, যা বোর্ডে ডাউনলোড করার আগে একটি বাইনারিতে কম্পাইল করতে হবে। বাইনারি হল এমন একটি ফাইল যাতে প্রোগ্রামটি এমন একটি আকারে থাকে যা সরাসরি স্পার্কফান এজ হার্ডওয়্যার দ্বারা চালানো যেতে পারে।
নিম্নলিখিত নির্দেশাবলী Linux বা MacOS এর জন্য লেখা।
টেনসরফ্লো রেপো ডাউনলোড করুন
কোডটি GitHub-এর TensorFlow সংগ্রহস্থলে নিম্নলিখিত স্থানে পাওয়া যাবে:
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
পাইথন নির্ভরতা ডাউনলোড করুন
আমরা আমাদের বাইনারি প্রস্তুত করতে এবং ডিভাইসে ফ্ল্যাশ করতে Python 3 ব্যবহার করব। Python স্ক্রিপ্টগুলি নির্দিষ্ট লাইব্রেরির উপলব্ধতার উপর নির্ভর করে। এই নির্ভরতাগুলি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
pip3 install pycrypto pyserial --user
৪. বাইনারি তৈরি এবং প্রস্তুত করুন
আমরা বাইনারি তৈরি করব এবং কমান্ডগুলি চালাব যা ডিভাইসে ডাউনলোডের জন্য এটি প্রস্তুত করবে।
বাইনারি তৈরি করুন
সমস্ত প্রয়োজনীয় নির্ভরতা ডাউনলোড করতে এবং বাইনারি তৈরি করতে, নিম্নলিখিত কমান্ডটি চালান:
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 নামে একটি ফাইল থাকা উচিত। এই ফাইলটি আমরা ডিভাইসে ফ্ল্যাশ করব।
৫. বাইনারি ফ্ল্যাশ করার জন্য প্রস্তুত হোন
ঝলকানি কি?
স্পার্কফান এজ বর্তমানে চলমান প্রোগ্রামটি তার ৫১২ কিলোবাইট ফ্ল্যাশ মেমোরিতে সংরক্ষণ করে। যদি আমরা চাই বোর্ড একটি নতুন প্রোগ্রাম চালাক, তাহলে আমাদের এটি বোর্ডে পাঠাতে হবে, যা এটিকে ফ্ল্যাশ মেমোরিতে সংরক্ষণ করবে, পূর্বে সংরক্ষিত যেকোনো প্রোগ্রাম ওভাররাইট করবে।
এই প্রক্রিয়াটিকে "ফ্ল্যাশিং" বলা হয়, এবং আমরা আমাদের প্রোগ্রামটি বোর্ডে পাঠানোর জন্য এটি ব্যবহার করব।
প্রোগ্রামারটিকে বোর্ডে সংযুক্ত করুন।
বোর্ডে নতুন প্রোগ্রাম ডাউনলোড করার জন্য, আমরা SparkFun USB-C Serial Basic সিরিয়াল প্রোগ্রামার ব্যবহার করব। এই ডিভাইসটি আপনার কম্পিউটারকে USB এর মাধ্যমে মাইক্রোকন্ট্রোলারের সাথে যোগাযোগ করতে দেয়।
এই ডিভাইসটি আপনার বোর্ডে সংযুক্ত করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
- স্পার্কফান এজের পাশে ছয় পিনের হেডারটি সনাক্ত করুন।
- এই পিনগুলিতে SparkFun USB-C Serial Basic প্লাগ করুন, নিশ্চিত করুন যে প্রতিটি ডিভাইসে "BLK" এবং "GRN" লেবেলযুক্ত পিনগুলি সঠিকভাবে লাইন আপ করা আছে।

আপনার কম্পিউটারে প্রোগ্রামারটি সংযুক্ত করুন।
আমরা 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
৬. বাইনারি ফ্ল্যাশ করুন
আপনার বোর্ড ফ্ল্যাশ করার জন্য স্ক্রিপ্টটি চালান।
বোর্ডটি ফ্ল্যাশ করার জন্য, আমাদের এটিকে একটি বিশেষ "বুটলোডার" অবস্থায় রাখতে হবে যা এটিকে নতুন বাইনারি গ্রহণের জন্য প্রস্তুত করে। এরপর আমরা বোর্ডে বাইনারি পাঠানোর জন্য একটি স্ক্রিপ্ট চালাব।
আসুন বোর্ডের নিম্নলিখিত বোতামগুলির সাথে পরিচিত হই:

বোর্ডটি রিসেট এবং ফ্ল্যাশ করার জন্য নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
- নিশ্চিত করুন যে আপনার বোর্ড প্রোগ্রামারের সাথে সংযুক্ত আছে এবং সম্পূর্ণ সেটআপটি USB এর মাধ্যমে আপনার কম্পিউটারের সাথে সংযুক্ত আছে।
- বোর্ডে
14চিহ্নিত বোতামটি ধরে রাখা শুরু করুন । ধাপ ৬ পর্যন্ত এটি ধরে রাখুন। - বোর্ডটিকে তার বুটলোডার অবস্থায় রিসেট করার জন্য,
14চিহ্নিত বোতামটি ধরে রেখে, বোর্ডটি রিসেট করতেRSTচিহ্নিত বোতামটি ক্লিক করুন। -
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
-
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...]
-
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 সিরিয়াল ড্রাইভারটি বিদ্যমান সিরিয়াল ড্রাইভারের সাথে ইনস্টল করা হয়েছে, যা নিম্নলিখিতভাবে সমাধান করা যেতে পারে:
ধাপ ১ : ch34x লাইব্রেরির সঠিক সংস্করণটি পুনরায় ইনস্টল করুন। ইনস্টলেশনের সময় নিশ্চিত করুন যে ডিভাইসটি কম্পিউটার থেকে আনপ্লাগ করা আছে।
git clone https://github.com/juliagoda/CH341SER.git cd CH341SER/ make sudo insmod ch34x.ko sudo rmmod ch341
ধাপ ২ : বোর্ড ইউএসবি প্লাগ ইন করুন এবং চালান:
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"।
৭. ডেমো
প্রোগ্রামটি ব্যবহার করে দেখুন
আপনার বোর্ড সফলভাবে ফ্ল্যাশ হয়ে গেলে, চিহ্নিত বোতামটি টিপুন
বোর্ডটি পুনরায় চালু করতে এবং প্রোগ্রামটি শুরু করতে RST । যদি নীল LED জ্বলতে শুরু করে, তাহলে ফ্ল্যাশিং সফল হয়। যদি না হয়, তাহলে নীচের " যদি এটি কাজ না করে?" বিভাগে স্ক্রোল করুন।

বোর্ডে থাকা মেশিন লার্নিং মডেলটিকে "হ্যাঁ" এবং "না" শব্দগুলি চিনতে এবং কথা বলার উপস্থিতি এবং অনুপস্থিতি সনাক্ত করতে প্রশিক্ষণ দেওয়া হয়েছে। এটি রঙিন LED লাইট জ্বালানোর মাধ্যমে এর ফলাফল প্রকাশ করে। নিম্নলিখিত টেবিলটি প্রতিটি LED রঙের অর্থ দেখায়:
সনাক্তকরণের ফলাফল | এলইডি রঙ |
"হ্যাঁ" | হলুদ |
"না" | লাল |
অজানা বক্তৃতা | সবুজ |
কোনও স্পিচ শনাক্ত করা যায়নি | কোনও LED জ্বলছে না |
একবার চেষ্টা করে দেখো
বোর্ডটি আপনার মুখের কাছে ধরে কয়েকবার "হ্যাঁ" বলুন। আপনি হলুদ LED ফ্ল্যাশ দেখতে পাবেন। "হ্যাঁ" বলার পরেও যদি কিছু না ঘটে, তাহলে এখানে কিছু জিনিস চেষ্টা করে দেখুন:
- বোর্ডটি আপনার মুখ থেকে প্রায় ১০" দূরে ধরুন।
- অতিরিক্ত ব্যাকগ্রাউন্ড নয়েজ এড়িয়ে চলুন
- "হ্যাঁ" দ্রুত পরপর কয়েকবার পুনরাবৃত্তি করুন ("হ্যাঁ হ্যাঁ হ্যাঁ" বলার চেষ্টা করুন)
যদি এটা কাজ না করে?
এখানে কিছু সম্ভাব্য সমস্যা এবং সেগুলি কীভাবে ডিবাগ করবেন তা দেওয়া হল:
সমস্যা: ফ্ল্যাশ করার পর, কোনও LED জ্বলছে না।
সমাধান: RST বোতাম টিপে দেখুন, অথবা প্রোগ্রামার থেকে বোর্ডটি সংযোগ বিচ্ছিন্ন করে পুনরায় সংযোগ করার চেষ্টা করুন। যদি এর কোনটিই কাজ না করে, তাহলে আবার বোর্ডটি ফ্ল্যাশ করার চেষ্টা করুন।
সমস্যা: নীল LED জ্বলছে, কিন্তু খুব মৃদু।
সমাধান: ব্যাটারির চার্জ শেষ হওয়ায় এটি পরিবর্তন করুন। বিকল্পভাবে, প্রোগ্রামার এবং তারের সাহায্যে কম্পিউটারের মাধ্যমে বোর্ডটি চালানো যেতে পারে।
৮. ডিবাগ আউটপুট পড়ুন (ঐচ্ছিক)
যদি আপনার কোনও সমস্যার সম্মুখীন হন এবং আপনার কোডটি বিস্তারিতভাবে ডিবাগ করার প্রয়োজন হয়, তাহলে এই বিভাগটি পর্যালোচনা করুন । আপনার কোডটি চালানোর সময় মাইক্রোকন্ট্রোলারে কী ঘটছে তা বোঝার জন্য, আপনি বোর্ডের সিরিয়াল সংযোগের মাধ্যমে ডিবাগিং তথ্য প্রিন্ট করতে পারেন। আপনি আপনার কম্পিউটার ব্যবহার করে বোর্ডের সাথে সংযোগ স্থাপন করেন এবং বোর্ড যে ডেটা পাঠাচ্ছে তা প্রদর্শন করেন।
একটি সিরিয়াল সংযোগ খুলুন
ডিফল্টরূপে, আমাদের SparkFun Edge নমুনা কোড যেকোনো স্পোকেন কমান্ড, তার আত্মবিশ্বাস সহ লগ করে। বোর্ডের আউটপুট দেখতে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:
screen ${DEVICENAME} 115200
আপনি প্রথমে এমন একটি আউটপুট দেখতে পাবেন যা দেখতে নিচের মতো কিছু হবে: (এটি কেবল তখনই প্রদর্শিত হবে যদি বোর্ডটি একবার সংযুক্ত হয়ে গেলে রিসেট করা হয় অন্যথায় আপনি ডিবাগ তথ্য দেখতে শুরু করতে পারেন)
Apollo3 Burst Mode is Available
Apollo3 operating in Burst Mode (96MHz)
"হ্যাঁ" অথবা "না" বলে কিছু কমান্ড ইস্যু করার চেষ্টা করুন। আপনি প্রতিটি কমান্ডের জন্য বোর্ডে ডিবাগ তথ্য মুদ্রণ করতে দেখতে পাবেন:
Heard yes (202) @65536ms
উপরের লগে, yes বলতে কমান্ড বোঝায়। 202 সংখ্যাটি কমান্ডটি শোনার আস্থার স্তরকে বোঝায় (সর্বনিম্ন ২০০)। পরিশেষে, 65536ms বলতে মাইক্রোকন্ট্রোলারটি শেষবার রিসেট করার পর থেকে অতিবাহিত সময়ের পরিমাণকে বোঝায়।
ডিবাগ আউটপুট দেখা বন্ধ করতে, Ctrl+A টিপুন, তারপর K কী টিপুন, তারপর Y কী টিপুন।
ডিবাগ লগ লিখুন
আপনি যে command_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);
পরবর্তী বিভাগে কোডে নিজের পরিবর্তন করার সময় এই পদ্ধতিটি কাজে আসবে।
৯. কোডটি প্রসারিত করুন (ঐচ্ছিক)
এখন যেহেতু আপনি জানেন কিভাবে আপনার SparkFun Edge তৈরি এবং ফ্ল্যাশ করতে হয়, আপনি কোডটি নিয়ে খেলা শুরু করতে পারেন এবং ফলাফল দেখতে এটি আপনার ডিভাইসে স্থাপন করতে পারেন।
কোডটি পড়ুন।
কোডটি পড়া শুরু করার জন্য একটি ভালো জায়গা হল নিম্নলিখিত ফাইল, 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 হল ০-২৫৫ পর্যন্ত একটি পূর্ণসংখ্যা সংখ্যা যা একটি কমান্ড সনাক্ত হওয়ার সম্ভাব্যতা প্রতিনিধিত্ব করে। নমুনা কোড শুধুমাত্র একটি কমান্ডকে বৈধ বলে বিবেচনা করে যদি স্কোর ২০০-এর বেশি হয়। আমাদের পরীক্ষার উপর ভিত্তি করে, বেশিরভাগ বৈধ কমান্ড ২০০-২১০ এর মধ্যে পড়ে।
কোডটি পরিবর্তন করুন
SparkFun Edge বোর্ডে চারটি LED আছে। বর্তমানে, আমরা নীল LED ফ্ল্যাশ করছি যাতে বোঝা যায় যে শনাক্তকরণ হচ্ছে। আপনি এটি 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);
}
যেহেতু আমাদের কাছে চারটি LED এর একটি ব্যাংক আছে, আসুন প্রোগ্রামটি পরিবর্তন করে একটি প্রদত্ত কমান্ডের score ভিজ্যুয়াল সূচক হিসেবে ব্যবহার করি। কম স্কোর হলে একটি একক আলোকিত LED এর যোগ্য হবে, এবং উচ্চ স্কোর হলে একাধিক আলোর যোগ্য হবে।
প্রোগ্রামটি চলছে কিনা তা জানার জন্য, আমরা নীল রঙের পরিবর্তে লাল LED ফ্ল্যাশটি ক্রমাগত চালু রাখব। আমাদের সাম্প্রতিক score শক্তি দেখানোর জন্য সংলগ্ন নীল, সবুজ এবং হলুদ LED ব্যবহার করা হবে। এবং সহজতার জন্য, "হ্যাঁ" শব্দটি উচ্চারণ করলেই আমরা কেবল LED গুলি জ্বালাবো। যদি অন্য কোনও শব্দ সনাক্ত করা হয়, তাহলে LED গুলি পরিষ্কার হয়ে যাবে।
এই পরিবর্তনটি করতে, আপনার 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 থেকে সমস্ত ধাপ চালিয়ে বাইনারি প্রস্তুত করে এটি পরীক্ষা করুন।
১০. পরবর্তী পদক্ষেপ
অভিনন্দন, আপনি সফলভাবে একটি মাইক্রোকন্ট্রোলারের উপর আপনার প্রথম স্পিচ ডিটেক্টর তৈরি করেছেন!
আমরা আশা করি আপনি মাইক্রোকন্ট্রোলারের জন্য টেনসরফ্লো লাইটের উন্নয়নের এই সংক্ষিপ্ত ভূমিকাটি উপভোগ করেছেন। মাইক্রোকন্ট্রোলারের উপর গভীর শিক্ষার ধারণাটি নতুন এবং উত্তেজনাপূর্ণ, এবং আমরা আপনাকে বাইরে গিয়ে পরীক্ষা-নিরীক্ষা করার জন্য উৎসাহিত করছি!
রেফারেন্স ডক্স
- এখন যেহেতু আপনার মৌলিক প্রোগ্রামের সাথে কাজ করার অভিজ্ঞতা আছে, তাই বিভিন্ন কমান্ড বোঝার জন্য আপনার নিজস্ব মডেলকে প্রশিক্ষণ দিন । দ্রষ্টব্য: প্রশিক্ষণে কয়েক ঘন্টা সময় লাগবে!
- মাইক্রোকন্ট্রোলারের জন্য টেনসরফ্লো লাইট সম্পর্কে আরও জানুন ( ওয়েবসাইট , গিটহাব )।
- অন্যান্য উদাহরণ চেষ্টা করে দেখুন এবং যদি এটি সমর্থিত হয় তবে SparkFun Edge-এ সেগুলি চালানোর চেষ্টা করুন।
- O'Reilly বইটি TinyML: Machine Learning with TensorFlow on Arduino and Ultra-Low Power Micro-Controllers দেখুন, যা ক্ষুদ্র ডিভাইসগুলিতে মেশিন লার্নিং চালু করে এবং বেশ কয়েকটি মজাদার প্রকল্পের মধ্য দিয়ে যায়। এই কোডল্যাবটি বইটির অধ্যায় 7 এবং 8 এর উপর ভিত্তি করে তৈরি।

ধন্যবাদ, এবং নির্মাণের আনন্দ উপভোগ করুন!