- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การสร้างชุดข้อมูลสำหรับ Arduino Speech Recognition
- การฝึกอบรมรูปแบบ
- Arduino Code สำหรับ Arduino Voice Recognition
เทคโนโลยีการรู้จำเสียงมีประโยชน์อย่างมากในระบบอัตโนมัติซึ่งไม่เพียง แต่ให้คุณควบคุมอุปกรณ์แบบแฮนด์ฟรี แต่ยังเพิ่มความปลอดภัยให้กับระบบอีกด้วย นอกเหนือจากการสร้างอุปกรณ์ที่ควบคุมด้วยเสียงแล้วการรู้จำเสียงยังให้ความช่วยเหลือที่สำคัญสำหรับผู้ที่ทุกข์ทรมานจากความพิการต่างๆ
ในโครงการก่อนหน้านี้เราได้สร้างตัวแปลง Text to Speech (TTS) จาก Arduino และไฟควบคุมด้วยเสียง ตอนนี้ในโปรเจ็กต์นี้เราจะใช้แมชชีนเลิร์นนิงเพื่อฝึกโมเดลการรู้จำเสียงโดยใช้ Edge Impulse Studio ด้วยคำสั่งสามคำสั่งคือ ' LIGHT ON' , ' LIGHT OFF' และ ' NOISE ' Edge Impulse เป็นแพลตฟอร์มแมชชีนเลิร์นนิงออนไลน์ที่ช่วยให้นักพัฒนาสามารถสร้างโซลูชันอุปกรณ์อัจฉริยะรุ่นต่อไปที่มีการเรียนรู้ของเครื่องในตัว ก่อนหน้านี้เราใช้ Edge impulse studio เพื่อแยกเสียงไอและเสียงรบกวน
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์
- Arduino 33 BLE Sense
- LED
- สายจัมเปอร์
ซอฟต์แวร์
- Edge Impulse Studio
- Arduino IDE
เราได้กล่าวถึงบทช่วยสอนโดยละเอียดเกี่ยวกับ Arduino 33 BLE Sense
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับการจดจำเสียงโดยใช้ Arduinoมีดังต่อไปนี้ ส่วน Fritzing สำหรับ Arduino 33 BLE ไม่พร้อมใช้งานดังนั้นฉันจึงใช้ Arduino Nano เนื่องจากทั้งสองมีพินเอาต์เหมือนกัน
ขั้วบวกของ LED เชื่อมต่อกับพินดิจิทัล 5 ของ Arduino 33 BLE sense และขั้วลบเชื่อมต่อกับพิน GND ของ Arduino
การสร้างชุดข้อมูลสำหรับ Arduino Speech Recognition
ที่นี่ Edge Impulse Studio ใช้เพื่อฝึกโมเดลการรู้จำเสียงของเรา การฝึกโมเดลบน Edge Impulse Studio จะคล้ายกับการฝึกโมเดลแมชชีนเลิร์นนิงบนเฟรมเวิร์กการเรียนรู้ของเครื่องอื่น ๆ สำหรับการฝึกอบรมขั้นตอนแรกของโมเดลแมชชีนเลิร์นนิงคือการรวบรวมชุดข้อมูลที่มีตัวอย่างข้อมูลที่เราต้องการรับรู้
เนื่องจากเป้าหมายของเราคือการควบคุม LED ด้วยคำสั่งเสียงของเราเราจะต้องรวบรวมตัวอย่างเสียงสำหรับคำสั่งและเสียงรบกวนทั้งหมดเพื่อให้สามารถแยกแยะระหว่างคำสั่งเสียงและเสียงอื่น ๆ
เราจะสร้างชุดข้อมูลที่มีสามคลาส " LED ON ", " LED OFF " และ " noise " ในการสร้างชุดข้อมูลให้สร้างบัญชี Edge Impulse ตรวจสอบบัญชีของคุณจากนั้นเริ่มโครงการใหม่ คุณสามารถโหลดตัวอย่างได้โดยใช้มือถือบอร์ด Arduino ของคุณหรือคุณสามารถนำเข้าชุดข้อมูลไปยังบัญชี Edge Impulse ของคุณ วิธีที่ง่ายที่สุดในการโหลดตัวอย่างลงในบัญชีของคุณคือการใช้โทรศัพท์มือถือของคุณ สำหรับการเชื่อมต่อมือถือด้วย Edge Impulse
การเชื่อมต่อโทรศัพท์มือถือในการคลิก ' อุปกรณ์ ' และจากนั้นคลิกที่ ' เชื่อมต่ออุปกรณ์ใหม่
ตอนนี้ในหน้าต่างถัดไปให้คลิกที่ 'ใช้โทรศัพท์มือถือของคุณ' และรหัส QR จะปรากฏขึ้น สแกนรหัส QR ด้วยโทรศัพท์มือถือของคุณหรือป้อน URL ที่ระบุในรหัส QR
เพื่อเชื่อมต่อโทรศัพท์กับ Edge Impulse studio
เมื่อโทรศัพท์ของคุณเชื่อมต่อกับ Edge Impulse Studio คุณสามารถโหลดตัวอย่างได้แล้ว จะโหลดตัวอย่างคลิกที่ ' Data Acquisition' ตอนนี้ในหน้าการเก็บข้อมูลให้ป้อนชื่อป้ายกำกับเลือกไมโครโฟนเป็นเซ็นเซอร์และป้อนความยาวตัวอย่าง คลิกที่ ' เริ่มการสุ่มตัวอย่าง' อุปกรณ์ของคุณจะจับตัวอย่าง 2 วินาที บันทึกตัวอย่างเสียงทั้งหมด 10 ถึง 12 ตัวอย่างในสภาวะที่แตกต่างกัน
หลังจากอัปโหลดตัวอย่างสำหรับชั้นหนึ่งแล้วให้ตั้งค่าการเปลี่ยนแปลงป้ายกำกับและรวบรวมตัวอย่างสำหรับคลาส " ปิดไฟ" และ "เสียงรบกวน"
ตัวอย่างเหล่านี้ใช้สำหรับการฝึกอบรมโมดูลในขั้นตอนถัดไปเราจะรวบรวมข้อมูลการทดสอบ ข้อมูลการทดสอบควรมีอย่างน้อย 30% ของข้อมูลการฝึกอบรมดังนั้นควรรวบรวมตัวอย่าง "สัญญาณรบกวน" 4 ตัวอย่างและ 4 ถึง 5 ตัวอย่างสำหรับ "เปิดไฟ" และ "ปิดไฟ"
การฝึกอบรมรูปแบบ
เมื่อชุดข้อมูลของเราพร้อมแล้วตอนนี้เราสามารถสร้างแรงกระตุ้นสำหรับข้อมูลได้ ไปที่หน้า ' สร้าง แรงกระตุ้น ' เปลี่ยนการตั้งค่าเริ่มต้นของขนาดหน้าต่าง 1000 ms เป็น 1200ms และหน้าต่าง 500 ms เพิ่มเป็น 50ms ซึ่งหมายความว่าข้อมูลของเราจะถูกประมวลผลครั้งละ 1.2 วินาทีโดยเริ่มจาก 58 มิลลิวินาที
ตอนนี้ใน ' สร้างแรงกระตุ้น' หน้าคลิกที่ ' เพิ่มการประมวลผลบล็อก' ในหน้าต่างถัดไปเลือกเสียง (MFCC) บล็อก หลังจากคลิกที่ ' เพิ่มบล็อกการเรียนรู้' และเลือกโครงข่ายประสาทเทียม (Keras) บล็อก จากนั้นคลิกที่ ' บันทึกดล'
ในขั้นตอนถัดไปไปที่หน้า MFCC จากนั้นคลิกที่ 'สร้างคุณสมบัติ' มันจะสร้างบล็อก MFCC สำหรับหน้าต่างเสียงทั้งหมดของเรา
หลังจากที่เดินทางไป 'ที่ NN ลักษณนาม' หน้าและคลิกที่จุดสามจุดที่มุมขวาบนของ ' การตั้งค่าเครือข่ายประสาท' และเลือก ' เปลี่ยนเป็นโหมด Keras (ผู้เชี่ยวชาญ)'
แทนที่เดิมที่มีรหัสต่อไปและเปลี่ยน ' คะแนนความเชื่อมั่นขั้นต่ำ' เป็น ' 0.70'จากนั้นคลิกที่ ' เริ่มต้นการฝึกอบรม' ปุ่ม มันจะเริ่มฝึกโมเดลของคุณ
นำเข้าเทนเซอร์โฟลว์เป็น tf จาก tensorflow.keras.models นำเข้าลำดับจาก tensorflow.keras.layers นำเข้า Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D จาก tensorflow.keras.optimizers นำเข้า Adam จาก tensorflowints.keras.constra นำเข้า MaxNorm # model architecture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2, padding = 'เดียวกัน')) model.add (Conv2D (5, kernel_size = 5, การเปิดใช้งาน = 'relu', padding = 'เดียวกัน', kernel_constraint = MaxNorm (3))) model.add (AveragePooling2D (pool_size = 2,padding = 'same')) model.add (Flatten ()) model.add (Dense (class, activation = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # สิ่งนี้ควบคุมการเลือกอัตราการเรียนรู้ = Adam (lr = 0.005, beta_1 = 0.9, beta_2 = 0.999) # ฝึก neural network model.compile (loss = 'จัดหมวดหมู่ _crossentropy', เครื่องมือเพิ่มประสิทธิภาพ = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, epochs = 9, validation_data = (X_test, Y_test), verbose = 2)verbose = 2)verbose = 2)
หลังจากฝึกโมเดลแล้วจะแสดงผลการฝึก สำหรับฉันความแม่นยำคือ 81.1%และการสูญเสียคือ 0.45 ซึ่งไม่ใช่ประสิทธิภาพในอุดมคติ แต่เราสามารถดำเนินการต่อได้ คุณสามารถเพิ่มประสิทธิภาพของโมเดลของคุณได้โดยการสร้างชุดข้อมูลขนาดใหญ่
เมื่อโมเดลการรู้จำเสียงของเราพร้อมแล้วเราจะปรับใช้โมเดลนี้เป็นไลบรารี Arduino ก่อนที่จะดาวน์โหลดรูปแบบเป็นห้องสมุดที่คุณสามารถทดสอบประสิทธิภาพการทำงานได้โดยไปที่ ' การจัดจำแนกสด' หน้า คุณลักษณะการจัดหมวดหมู่แบบสดช่วยให้คุณสามารถทดสอบโมเดลทั้งกับข้อมูลการทดสอบที่มีอยู่ซึ่งมาพร้อมกับชุดข้อมูลหรือโดยการสตรีมข้อมูลเสียงจากโทรศัพท์มือถือของคุณ
ในการทดสอบข้อมูลด้วยโทรศัพท์ของคุณให้เลือก " เปลี่ยนเป็นโหมดการจัดหมวดหมู่" บนโทรศัพท์ของคุณ
ตอนนี้เพื่อดาวน์โหลดรูปแบบเป็น Arduino ห้องสมุดไปที่ ' การปรับใช้ ' และเลือก ' Arduino ห้องสมุด' ตอนนี้เลื่อนลงและคลิกที่ ' สร้าง ' เพื่อเริ่มกระบวนการ สิ่งนี้จะสร้างไลบรารี Arduino สำหรับโครงการของคุณ
ตอนนี้เพิ่มไลบรารีใน Arduino IDE ของคุณ เพื่อเปิด Arduino IDE จากนั้นคลิกที่ Sketch> Include Library> Add.ZIP library
จากนั้นโหลดตัวอย่างโดยไปที่ ไฟล์> ตัวอย่าง> ชื่อโปรเจ็กต์ของคุณ - Edge Impulse> nano_ble33_sense_microphone
Arduino Code สำหรับ Arduino Voice Recognition
ต่อไปนี้มีการเปลี่ยนแปลงบางอย่างเพื่อควบคุม LED ด้วยคำสั่งเสียง
เรากำลังทำการเปลี่ยนแปลงบางอย่างใน void loop () ซึ่งเป็นการพิมพ์ความน่าจะเป็นของคำสั่ง ในรหัสเดิมเป็นการพิมพ์ฉลากและค่าทั้งหมดเข้าด้วยกัน
สำหรับ (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
ในการควบคุม LED เราต้องบันทึกความน่าจะเป็นของคำสั่งทั้งหมดในตัวแปรที่แตกต่างกันสามตัวแปรเพื่อให้เราสามารถใส่คำสั่งเงื่อนไขให้ ดังนั้นตามรหัสใหม่หากความน่าจะเป็นของคำสั่ง' light on' มากกว่า 0.50 มันจะเปิด LED และหากความน่าจะเป็นของคำสั่ง' light off' มากกว่า 0.50 กว่าที่มันจะปิด LED
สำหรับ (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("เสียงรบกวน:"); Serial.println (สัญญาณรบกวน); } สำหรับ (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("ปิดไฟ:"); Serial.print (lightoff); } lighton = 1- (สัญญาณรบกวน + lightoff); Serial.println ("เปิดไฟ:"); Serial.print (lighton); ถ้า (lighton> 0.50) {digitalWrite (led, HIGH); } if (lightoff> 0.50) {digitalWrite (led, LOW); }
หลังจากทำการเปลี่ยนแปลงแล้วให้อัปโหลดรหัสไปยัง Arduino ของคุณ เปิดมอนิเตอร์แบบอนุกรมที่ 115200 บอด
นี่คือวิธีที่คุณสามารถสร้างการรู้จำเสียงโดยใช้ Arduinoและให้คำสั่งเพื่อใช้งานอุปกรณ์
วิดีโอการทำงานที่สมบูรณ์พร้อมไลบรารีและรหัสมีให้ด้านล่าง