วิธีเรียกใช้โมเดลการเรียนรู้ของเครื่อง “Hello World” บนไมโครคอนโทรลเลอร์ STM32

By Jacob Beningo

Contributed By DigiKey's North American Editors

Machine Learning (ML) ได้รับความนิยมอย่างมากในเซิร์ฟเวอร์และแอปพลิเคชันมือถือมาหลายปีแล้ว แต่ขณะนี้ได้ย้ายข้อมูลและกลายเป็นสิ่งสำคัญในอุปกรณ์ Edge เนื่องจากอุปกรณ์ Edge นั้นจำเป็นต้องประหยัดพลังงาน นักพัฒนาจึงต้องเรียนรู้และเข้าใจวิธีปรับใช้โมเดล ML กับระบบที่ใช้ไมโครคอนโทรลเลอร์ โมเดล ML ที่ทำงานบนไมโครคอนโทรลเลอร์มักเรียกว่า tinyML น่าเสียดาย การนำโมเดลไปใช้กับไมโครคอนโทรลเลอร์ไม่ใช่ความพยายามเล็กน้อย อย่างไรก็ตาม มันเริ่มง่ายขึ้น และนักพัฒนาที่ไม่มีการฝึกอบรมเฉพาะทางจะพบว่าพวกเขาสามารถทำได้ในเวลาที่เหมาะสม

บทความนี้สำรวจวิธีที่นักพัฒนาแบบฝังตัวสามารถเริ่มต้นกับ ML โดยใช้ STMicroelectronics ไมโครคอนโทรลเลอร์ STM32 โดยจะแสดงวิธีการสร้างแอปพลิเคชัน "Hello World" โดยแปลงรุ่น TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ สำหรับใช้ในSTM32CubeIDE โดยใช้X-CUBE-AI

รู้เบื้องต้นเกี่ยวกับกรณีการใช้งานของ tinyML

TinyML เป็นสาขาที่กำลังเติบโตซึ่งนำพลังของ ML มาสู่อุปกรณ์ที่มีข้อจำกัดด้านพลังงาน เช่น ไมโครคอนโทรลเลอร์ ซึ่งมักจะใช้โครงข่ายประสาทเทียมระดับลึก อุปกรณ์ไมโครคอนโทรลเลอร์เหล่านี้สามารถเรียกใช้รุ่น ML และทำงานที่มีคุณค่าที่ขอบได้ มีหลายกรณีการใช้งานที่ tinyML น่าสนใจทีเดียว

กรณีการใช้งานครั้งแรก ซึ่งเห็นได้ในอุปกรณ์พกพาและอุปกรณ์ระบบอัตโนมัติในบ้านจำนวนมาก คือการจำแนกคำหลัก การจำคำสำคัญช่วยให้อุปกรณ์ฝังตัวใช้ไมโครโฟนเพื่อจับคำพูดและตรวจจับคำสำคัญที่ฝึกไว้ล่วงหน้า โมเดล tinyML ใช้อินพุตอนุกรมเวลาที่แทนคำพูดและแปลงเป็นคุณลักษณะเสียงพูด โดยปกติแล้วจะเป็นสเปกโตรแกรม สเปกโตรแกรมประกอบด้วยข้อมูลความถี่ในช่วงเวลาหนึ่ง จากนั้นสเปกโตรแกรมจะถูกป้อนเข้าไปในโครงข่ายประสาทเทียมที่ได้รับการฝึกฝนเพื่อตรวจหาคำที่เฉพาะเจาะจง และผลลัพธ์ที่ได้คือความน่าจะเป็นที่จะตรวจพบคำบางคำ รูปที่ 1 แสดงตัวอย่างของกระบวนการนี้

รูปภาพของการจำแนกคำหลักเป็นกรณีการใช้งานที่น่าสนใจสำหรับ tinyML (คลิกเพื่อดูภาพขยาย)รูปที่ 1: การจำแนกคำหลักเป็นกรณีการใช้งานที่น่าสนใจสำหรับ tinyML คำพูดอินพุตจะถูกแปลงเป็นสเปกโตรแกรมแล้วป้อนลงในโครงข่ายประสาทเทียมที่ได้รับการฝึกอบรมเพื่อตรวจสอบว่ามีคำที่ฝึกไว้ล่วงหน้าอยู่หรือไม่ (ที่มาของภาพ:Arm®)

กรณีการใช้งานต่อไปสำหรับ tinyML ที่นักพัฒนาระบบฝังตัวจำนวนมากสนใจคือการจดจำภาพ ไมโครคอนโทรลเลอร์จะจับภาพจากกล้อง แล้วป้อนลงในโมเดลที่ได้รับการฝึกอบรมล่วงหน้า โมเดลสามารถแยกแยะสิ่งที่อยู่ในภาพได้ ตัวอย่างเช่น เราอาจระบุได้ว่ามีแมว สุนัข ปลา และอื่น ๆ ตัวอย่างที่ดีของวิธีการใช้การจดจำภาพที่ขอบคือออดวิดีโอ กริ่งประตูแบบวิดีโอมักจะตรวจจับได้ว่ามีมนุษย์อยู่ที่ประตูหรือไม่ หรือว่ามีพัสดุเหลืออยู่หรือไม่

กรณีการใช้งานล่าสุดที่ได้รับความนิยมสูงคือการใช้ tinyML สำหรับการบำรุงรักษาเชิงคาดการณ์ การบำรุงรักษาเชิงคาดการณ์ใช้ ML เพื่อคาดการณ์สถานะของอุปกรณ์ตามการตรวจจับความผิดปกติ อัลกอริธึมการจำแนกประเภท และแบบจำลองการคาดการณ์ อีกครั้ง มีการใช้งานมากมายตั้งแต่ระบบ HVAC ไปจนถึงอุปกรณ์ในโรงงาน

แม้ว่ากรณีการใช้งานสามกรณีข้างต้นกำลังเป็นที่นิยมสำหรับ tinyML แต่ก็มีกรณีการใช้งานที่เป็นไปได้มากมายที่นักพัฒนาซอฟต์แวร์สามารถค้นหาได้ นี่คือรายการด่วน:

  • การจำแนกท่าทาง
  • การตรวจจับความผิดปกติ
  • เครื่องอ่านมิเตอร์แบบอนาล็อก
  • คำแนะนำและการควบคุม (GNC)
  • การตรวจจับพัสดุ

ไม่ว่ากรณีการใช้งานจะเป็นเช่นไร วิธีที่ดีที่สุดในการเริ่มทำความคุ้นเคยกับ TinyML คือการใช้แอปพลิเคชัน “Hello World” ซึ่งช่วยให้นักพัฒนาเรียนรู้และเข้าใจกระบวนการพื้นฐานที่พวกเขาจะปฏิบัติตามเพื่อให้ระบบทำงานได้น้อยที่สุด มีห้าขั้นตอนที่จำเป็นในการรันโมเดล tinyML บนไมโครคอนโทรลเลอร์ STM32:

  1. เก็บข้อมูล
  2. ข้อมูลฉลาก
  3. ฝึกโครงข่ายประสาท
  4. แปลงโมเดล
  5. เรียกใช้โมเดลบนไมโครคอนโทรลเลอร์

จับภาพ ติดฉลาก และฝึกโมเดล “Hello World”

โดยทั่วไปแล้ว นักพัฒนาจะมีตัวเลือกมากมายสำหรับวิธีที่พวกเขาจะรวบรวมและติดป้ายกำกับข้อมูลที่จำเป็นในการฝึกโมเดลของตน ประการแรก มีฐานข้อมูลการฝึกอบรมออนไลน์มากมาย นักพัฒนาสามารถค้นหาข้อมูลที่ใครบางคนได้รวบรวมและติดป้ายกำกับ ตัวอย่างเช่น สำหรับการตรวจจับภาพพื้นฐาน มี CIFAR-10 หรือ ImageNet ในการฝึกโมเดลให้ตรวจจับรอยยิ้มในภาพถ่าย มีคอลเลกชั่นรูปภาพด้วยเช่นกัน ที่เก็บข้อมูลออนไลน์เป็นที่ที่ดีในการเริ่มต้นอย่างชัดเจน

หากข้อมูลที่จำเป็นยังไม่ได้เปิดเผยต่อสาธารณะบนอินเทอร์เน็ต อีกทางเลือกหนึ่งคือให้นักพัฒนาสร้างข้อมูลของตนเอง Matlab หรือเครื่องมืออื่นๆ สามารถใช้สร้างชุดข้อมูลได้ หากการสร้างข้อมูลอัตโนมัติไม่ใช่ตัวเลือก ก็สามารถทำได้ด้วยตนเอง สุดท้าย หากทั้งหมดนี้ดูเหมือนใช้เวลานานเกินไป มีชุดข้อมูลบางชุดสำหรับซื้อ รวมทั้งบนอินเทอร์เน็ตด้วย การรวบรวมข้อมูลมักจะเป็นตัวเลือกที่น่าตื่นเต้นและน่าสนใจที่สุด แต่ก็เป็นงานที่ดีที่สุดเช่นกัน

ตัวอย่าง “Hello World” ที่กำลังสำรวจอยู่ที่นี่แสดงวิธีการฝึกแบบจำลองเพื่อสร้างคลื่นไซน์และปรับใช้กับ STM32 ตัวอย่างนี้รวบรวมโดย Pete Warden และ Daniel Situnayake ซึ่งเป็นส่วนหนึ่งของงานที่ Google เกี่ยวกับ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ สิ่งนี้ทำให้งานง่ายขึ้นเพราะพวกเขาได้รวบรวมบทแนะนำสาธารณะที่เรียบง่ายเกี่ยวกับการจับภาพ การติดฉลาก และการฝึกโมเดล สามารถพบได้ใน Github ที่นี่ เมื่อมีนักพัฒนาควรคลิกปุ่ม "เรียกใช้ใน Google Colab" Google Colab ย่อมาจาก Google Collaboratory ช่วยให้นักพัฒนาสามารถเขียนและเรียกใช้ Python ในเบราว์เซอร์โดยไม่มีการกำหนดค่าใด ๆ และให้การเข้าถึง Google GPU ได้ฟรี

ผลลัพธ์จากการเดินผ่านตัวอย่างการฝึกอบรมจะมีไฟล์โมเดลที่แตกต่างกันสองไฟล์ model.tflite โมเดล TensorFlow ที่ถูกหาปริมาณสำหรับไมโครคอนโทรลเลอร์ และโมเดล model_no_quant.tflite ที่ไม่ถูกวัดปริมาณ การหาปริมาณจะระบุวิธีการจัดเก็บการเปิดใช้งานโมเดลและอคติในรูปแบบตัวเลข เวอร์ชันควอนไทซ์จะสร้างโมเดลที่เล็กกว่าซึ่งเหมาะกับไมโครคอนโทรลเลอร์มากกว่า สำหรับผู้อ่านที่อยากรู้อยากเห็น ผลลัพธ์ของแบบจำลองที่ได้รับการฝึกอบรมกับผลลัพธ์ของคลื่นไซน์จริงสามารถดูได้ในรูปที่ 2 เอาต์พุตของโมเดลเป็นสีแดง เอาต์พุตคลื่นไซน์ไม่สมบูรณ์แบบ แต่ทำงานได้ดีพอสำหรับโปรแกรม "Hello World"

กราฟของการทำนายแบบจำลอง TensorFlow สำหรับคลื่นไซน์กับค่าจริงรูปที่ 2: การเปรียบเทียบระหว่างการทำนายแบบจำลอง TensorFlow สำหรับคลื่นไซน์กับค่าจริง (แหล่งรูปภาพ: Beningo Embedded Group)

การเลือกบอร์ดพัฒนา

ก่อนที่จะดูวิธีการแปลงโมเดล TensorFlow ให้ทำงานบนไมโครคอนโทรลเลอร์ จำเป็นต้องเลือกไมโครคอนโทรลเลอร์สำหรับการปรับใช้ในโมเดลก่อน บทความนี้จะเน้นที่ไมโครคอนโทรลเลอร์ STM32 เนื่องจาก STMicroelectronics มีเครื่องมือ tinyML/ML จำนวนมากที่ทำงานได้ดีสำหรับการแปลงและใช้งานโมเดล นอกจากนี้ STMicroelectronics ยังมีชิ้นส่วนต่าง ๆ ที่เข้ากันได้กับเครื่องมือ ML (ภาพที่ 3)

ตารางระบบนิเวศ AI ของ STMicroelectronics (คลิกเพื่อดูภาพขยาย)รูปที่ 3: แสดงเป็นไมโครคอนโทรลเลอร์และไมโครโปรเซสเซอร์ (MPU) ซึ่งปัจจุบันรองรับโดยระบบนิเวศ AI ของ STMicroelectronics (แหล่งที่มารูปภาพ: STMicroelectronics)

หากหนึ่งในบอร์ดเหล่านี้วางอยู่รอบ ๆ สำนักงาน เหมาะอย่างยิ่งสำหรับการติดตั้งแอปพลิเคชัน “Hello World” อย่างไรก็ตาม สำหรับผู้ที่สนใจที่จะก้าวข้ามตัวอย่างนี้และเข้าสู่การควบคุมด้วยท่าทางสัมผัสหรือการระบุคำหลัก ให้เลือก STM32 B-L4S5I-IOT01A โหนดการค้นพบ IoT (รูปที่ 4)

บอร์ดนี้มีโปรเซสเซอร์ Arm Cortex®-M4 ที่ใช้ซีรี่ส์ STM32L4+ โปรเซสเซอร์มีหน่วยความจำแฟลช 2 เมกะไบต์ (Mbytes) และ RAM 640 กิโลไบต์ (Kbytes) ซึ่งให้พื้นที่มากมายสำหรับรุ่น tinyML โมดูลนี้ปรับเปลี่ยนได้สำหรับกรณีทดลองของ tinyML เนื่องจากมี MP34DT01 ไมโครโฟนระบบไมโครเครื่องกลไฟฟ้า (MEMS) จาก STMicroelectronics ที่สามารถใช้สำหรับการพัฒนาแอปพลิเคชันการจำคำสำคัญ นอกจากนี้ LIS3MDLTR onboard มาตรความเร่งแบบสามแกนจาก STMicroelectronics เช่นกัน สามารถใช้สำหรับการตรวจจับท่าทางสัมผัสแบบ TinyML

ภาพของ STMicroelectronics STM32 B-L4S5I-IOT01A Discovery IoT Nodeรูปที่ 4: STM32 B-L4S5I-IOT01A Discovery IoT Node เป็นแพลตฟอร์มการทดลองที่ปรับเปลี่ยนได้สำหรับ tinyML เนื่องจากมีโปรเซสเซอร์ Arm Cortex-M4 ออนบอร์ด ไมโครโฟน MEMS และมาตรความเร่งแบบสามแกน (แหล่งที่มารูปภาพ: STMicroelectronics)

การแปลงและรันโมเดล TensorFlow Lite โดยใช้ STM32Cube.AI

ด้วยบอร์ดพัฒนาที่สามารถใช้รันโมเดล tinyML ได้ ตอนนี้นักพัฒนาสามารถเริ่มแปลงโมเดล TensorFlow Lite เป็นสิ่งที่สามารถทำงานบนไมโครคอนโทรลเลอร์ได้ โมเดล TensorFlow Lite สามารถทำงานบนไมโครคอนโทรลเลอร์ได้โดยตรง แต่ต้องใช้สภาพแวดล้อมรันไทม์เพื่อประมวลผล

เมื่อรันโมเดล จะต้องดำเนินการชุดของฟังก์ชันต่าง ๆ ฟังก์ชันเหล่านี้เริ่มต้นด้วยการรวบรวมข้อมูลเซ็นเซอร์ จากนั้นกรอง แยกคุณลักษณะที่จำเป็น และป้อนไปยังโมเดล ตัวแบบจะคายผลลัพธ์ออกมาซึ่งสามารถกรองเพิ่มเติมได้ จากนั้นโดยปกติจะมีการดำเนินการบางอย่าง รูปที่ 5 แสดงภาพรวมของกระบวนการนี้

ไดอะแกรมของข้อมูลไหลจากเซ็นเซอร์ไปยังรันไทม์แล้วจึงไปยังเอาต์พุตรูปที่ 5: วิธีที่ข้อมูลไหลจากเซ็นเซอร์ไปยังรันไทม์ จากนั้นไปยังเอาต์พุตในแอปพลิเคชัน tinyML (แหล่งรูปภาพ: Beningo Embedded Group)

ปลั๊กอิน X-CUBE-AI สำหรับ STM32CubeMx จัดเตรียมสภาพแวดล้อมรันไทม์เพื่อตีความโมเดล TensorFlow Lite และเสนอรันไทม์อื่นและเครื่องมือการแปลงที่นักพัฒนาสามารถใช้ประโยชน์ได้ ปลั๊กอิน X-CUBE-AI ไม่ได้เปิดใช้งานตามค่าเริ่มต้นในโปรเจ็กต์ อย่างไรก็ตาม หลังจากสร้างโปรเจ็กต์ใหม่และเริ่มต้นบอร์ดแล้ว ภายใต้ Software Packs-> Select Components จะมีตัวเลือกในการเปิดใช้งานรันไทม์ AI มีหลายตัวเลือกที่นี่ ตรวจสอบให้แน่ใจว่าใช้เทมเพลตแอปพลิเคชันสำหรับตัวอย่างนี้ ดังแสดงในรูปที่ 6

ต้องเปิดใช้งานรูปภาพของปลั๊กอิน X-CUBE-AIรูปที่ 6: ต้องเปิดใช้งานปลั๊กอิน X-CUBE-AI โดยใช้เทมเพลตแอปพลิเคชันสำหรับตัวอย่างนี้ (แหล่งรูปภาพ: Beningo Embedded Group)

เมื่อเปิดใช้งาน X-CUBE-AI หมวดหมู่ STMicroelectronics X-CUBE-AI จะปรากฏใน toolchain การคลิกที่หมวดหมู่จะทำให้ผู้พัฒนาสามารถเลือกไฟล์โมเดลที่สร้างขึ้นและตั้งค่าพารามิเตอร์ของโมเดลดังแสดงในรูปที่ 7 ปุ่มวิเคราะห์จะวิเคราะห์โมเดลและให้ข้อมูล RAM, ROM และรอบการดำเนินการแก่นักพัฒนา ขอแนะนำอย่างยิ่งให้นักพัฒนาเปรียบเทียบตัวเลือกรุ่น Keras และ TFLite ในตัวอย่างแบบจำลองคลื่นไซน์ ซึ่งมีขนาดเล็ก จะไม่มีอะไรแตกต่างกันมาก แต่สามารถสังเกตได้ สามารถสร้างโครงการได้โดยคลิก "สร้างรหัส"

รูปภาพของข้อมูล RAM, ROM และรอบการดำเนินการรูปที่ 7: ปุ่มวิเคราะห์จะให้ข้อมูล RAM, ROM และรอบการดำเนินการแก่นักพัฒนา (แหล่งรูปภาพ: Beningo Embedded Group)

ตัวสร้างโค้ดจะเริ่มต้นโครงการและสร้างในสภาพแวดล้อมรันไทม์สำหรับโมเดล tinyML อย่างไรก็ตาม ตามค่าเริ่มต้น จะไม่มีสิ่งใดป้อนโมเดล นักพัฒนาจำเป็นต้องเพิ่มโค้ดเพื่อให้ค่าอินพุตของโมเดล - ค่า x - ซึ่งโมเดลจะตีความและใช้เพื่อสร้างค่าไซน์ y ต้องเพิ่มโค้ดสองสามส่วนในฟังก์ชัน earn_and_process_data และ post_process ดังแสดงในรูปที่ 8

รูปภาพของรหัสที่แสดงจะเชื่อมต่อค่าเซ็นเซอร์อินพุตปลอมรูปที่ 8: รหัสที่แสดงจะเชื่อมต่อค่าเซ็นเซอร์อินพุตปลอมกับแบบจำลองคลื่นไซน์ (แหล่งรูปภาพ: Beningo Embedded Group)

ณ จุดนี้ ตัวอย่างพร้อมที่จะเรียกใช้แล้ว หมายเหตุ: เพิ่มคำสั่ง printf เพื่อรับเอาต์พุตโมเดลสำหรับการตรวจสอบอย่างรวดเร็ว การคอมไพล์และการปรับใช้ที่รวดเร็วส่งผลให้โมเดล TinyML ของ “Hello World” ทำงานอยู่ การดึงเอาท์พุตของแบบจำลองสำหรับวงจรเต็มจะส่งผลให้เกิดคลื่นไซน์ที่แสดงในรูปที่ 9 มันไม่สมบูรณ์แบบ แต่มันยอดเยี่ยมสำหรับแอปพลิเคชั่น tinyML ตัวแรก จากที่นี่ นักพัฒนาสามารถผูกเอาท์พุตกับโมดูเลเตอร์ความกว้างพัลส์ (PWM) และสร้างคลื่นไซน์

รูปภาพของเอาต์พุตโมเดลคลื่นไซน์ "Hello World" (คลิกเพื่อดูภาพขยาย)รูปที่ 9: เอาต์พุตแบบจำลองคลื่นไซน์ "Hello World" เมื่อทำงานบน STM32 (แหล่งรูปภาพ: Beningo Embedded Group)

คำแนะนำและเคล็ดลับสำหรับ ML บนระบบฝังตัว

นักพัฒนาที่ต้องการเริ่มต้นใช้งาน ML บนระบบที่ใช้ไมโครคอนโทรลเลอร์จะมีส่วนไม่น้อยในการทำให้แอปพลิเคชั่น tinyML ตัวแรกเริ่มทำงาน อย่างไรก็ตาม มี "เคล็ดลับและลูกเล่น" หลายประการที่ควรคำนึงถึงซึ่งสามารถลดความซับซ้อนและเพิ่มความเร็วในการพัฒนาได้:

  • ดู TensorFlow Lite สำหรับตัวอย่างไมโครคอนโทรลเลอร์ "Hello World" รวมถึงไฟล์ Google Colab ใช้เวลาในการปรับพารามิเตอร์และทำความเข้าใจว่าพารามิเตอร์เหล่านี้ส่งผลต่อโมเดลที่ได้รับการฝึกอบรมอย่างไร
  • ใช้แบบจำลองเชิงปริมาณสำหรับแอปพลิเคชันไมโครคอนโทรลเลอร์ โมเดลเชิงปริมาณถูกบีบอัดเพื่อทำงานกับ uint8_t แทนที่จะเป็นตัวเลขทศนิยม 32 บิต ส่งผลให้โมเดลมีขนาดเล็กลงและดำเนินการเร็วขึ้น
  • สำรวจตัวอย่างเพิ่มเติมในที่เก็บ TensorFlow Lite สำหรับไมโครคอนโทรลเลอร์ ตัวอย่างอื่นๆ ได้แก่ การตรวจจับท่าทางสัมผัสและการตรวจจับคำสำคัญ
  • นำตัวอย่าง “Hello World” โดยการเชื่อมต่อเอาท์พุตของโมเดลเข้ากับ PWM และฟิลเตอร์กรองความถี่ต่ำเพื่อดูคลื่นไซน์ที่เป็นผลลัพธ์ ทดลองกับรันไทม์เพื่อเพิ่มและลดความถี่คลื่นไซน์
  • เลือกบอร์ดพัฒนาที่มีเซ็นเซอร์ "พิเศษ" ที่จะอนุญาตให้ใช้แอปพลิเคชัน ML ได้หลากหลาย
  • แม้ว่าการรวบรวมข้อมูลจะเป็นเรื่องสนุก แต่โดยทั่วไปแล้วการซื้อหรือใช้ฐานข้อมูลโอเพนซอร์สเพื่อฝึกโมเดลนั้นง่ายกว่า

นักพัฒนาซอฟต์แวร์ที่ปฏิบัติตาม "คำแนะนำและเคล็ดลับ" เหล่านี้จะช่วยประหยัดเวลาและความเศร้าโศกได้ไม่น้อยเมื่อรักษาความปลอดภัยให้กับแอปพลิเคชันของตน

สรุป

ML มาถึงขอบเครือข่ายแล้ว และระบบที่ใช้ไมโครคอนโทรลเลอร์ที่มีข้อจำกัดด้านทรัพยากรเป็นเป้าหมายหลัก เครื่องมือล่าสุดช่วยให้สามารถแปลงโมเดล ML และปรับให้เหมาะสมเพื่อให้ทำงานบนระบบแบบเรียลไทม์ได้ ดังที่แสดงไว้ การติดตั้งโมเดลและใช้งานบนบอร์ดพัฒนา STM32 นั้นค่อนข้างง่าย แม้จะมีความซับซ้อนที่เกี่ยวข้องก็ตาม ในขณะที่การอภิปรายตรวจสอบโมเดลอย่างง่ายที่สร้างคลื่นไซน์ แต่โมเดลที่ซับซ้อนกว่ามาก เช่น การตรวจจับท่าทางสัมผัสและการจำแนกคำหลักก็เป็นไปได้

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

About this author

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo เป็นที่ปรึกษาด้านซอฟต์แวร์แบบฝังตัว เขาได้ตีพิมพ์บทความมากกว่า 200 บทความเกี่ยวกับเทคนิคการพัฒนาซอฟต์แวร์แบบฝังตัวเป็นวิทยากรและผู้ฝึกสอนด้านเทคนิคที่เป็นที่ต้องการและสำเร็จการศึกษา 3 ปริญญา รวมถึง ปริญญาโทวิศวกรรมศาสตร์จากมหาวิทยาลัยมิชิแกน

About this publisher

DigiKey's North American Editors