- ส่วนประกอบที่จำเป็น
- แผนภูมิวงจรรวม
- การสร้างชุดข้อมูลสำหรับเครื่องตรวจจับไอ
- การฝึกอบรมโมเดลและการปรับแต่งโค้ด
COVID19 เป็นโรคระบาดครั้งประวัติศาสตร์ที่ส่งผลกระทบต่อคนทั้งโลกอย่างรุนแรงและผู้คนกำลังสร้างอุปกรณ์ใหม่จำนวนมากเพื่อต่อสู้กับมัน นอกจากนี้เรายังได้สร้างเครื่องฆ่าเชื้ออัตโนมัติและ Thermal Gun สำหรับการคัดกรองอุณหภูมิแบบไม่สัมผัส วันนี้เราจะสร้างอีกหนึ่งอุปกรณ์เพื่อช่วยในการต่อสู้กับ Coronavirus เป็นระบบตรวจจับอาการไอซึ่งสามารถแยกความแตกต่างระหว่างเสียงรบกวนและเสียงไอและสามารถช่วยค้นหาผู้ต้องสงสัย Corona ได้ จะใช้เทคนิคการเรียนรู้ของเครื่อง
ในบทช่วยสอนนี้เราจะสร้างระบบตรวจจับไอโดยใช้ Arduino 33 BLE Sense และ Edge Impulse Studio สามารถแยกความแตกต่างระหว่างเสียงพื้นหลังปกติและเสียงไอในเสียงแบบเรียลไทม์ เราใช้ Edge Impulse Studio เพื่อฝึกชุดข้อมูลของตัวอย่างเสียงไอและเสียงพื้นหลังและสร้างแบบจำลอง TInyML ที่ได้รับการปรับให้เหมาะสมที่สุดซึ่งสามารถตรวจจับเสียงไอได้แบบเรียลไทม์
ส่วนประกอบที่จำเป็น
ฮาร์ดแวร์
- Arduino 33 BLE Sense
- LED
- สายจัมเปอร์
ซอฟต์แวร์
- Edge Impulse Studio
- Arduino IDE
เราได้กล่าวถึงบทช่วยสอนโดยละเอียดเกี่ยวกับ Arduino 33 BLE Sense
แผนภูมิวงจรรวม
แผนภาพวงจรสำหรับการตรวจจับไอโดยใช้ Arduino 33 BLE Sense แสดงไว้ด้านล่าง ส่วน Fritzing สำหรับ Arduino 33 BLE ไม่พร้อมใช้งานดังนั้นฉันจึงใช้ Arduino Nano เนื่องจากทั้งสองมีพินเอาต์เหมือนกัน
ขั้วบวกของ LED เชื่อมต่อกับพินดิจิตอล 4 ของ Arduino 33 BLE sense และขั้วลบเชื่อมต่อกับพิน GND ของ Arduino
การสร้างชุดข้อมูลสำหรับเครื่องตรวจจับไอ
ดังที่ได้กล่าวไว้ก่อนหน้านี้เรากำลังใช้ Edge Impulse Studio เพื่อฝึกโมเดลการตรวจจับอาการไอของเรา ด้วยเหตุนี้เราจึงต้องรวบรวมชุดข้อมูลที่มีตัวอย่างข้อมูลที่เราต้องการให้รับรู้บน Arduino ของเรา เนื่องจากเป้าหมายคือการตรวจหาอาการไอคุณจะต้องรวบรวมตัวอย่างของสิ่งนั้นและตัวอย่างอื่น ๆ เพื่อหาเสียงจึงจะสามารถแยกความแตกต่างระหว่างอาการไอและเสียงอื่น ๆ ได้
เราจะสร้างชุดข้อมูลที่มีสองคลาสคือ "ไอ" และ "เสียงรบกวน" ในการสร้างชุดข้อมูลให้สร้างบัญชี Edge Impulse ตรวจสอบบัญชีของคุณจากนั้นเริ่มโครงการใหม่ คุณสามารถโหลดตัวอย่างได้โดยใช้มือถือบอร์ด Arduino ของคุณหรือคุณสามารถนำเข้าชุดข้อมูลไปยังบัญชี Edge Impulse ของคุณ วิธีที่ง่ายที่สุดในการโหลดตัวอย่างลงในบัญชีของคุณคือการใช้โทรศัพท์มือถือของคุณ เพื่อสิ่งนั้นคุณต้องเชื่อมต่อมือถือของคุณกับ Edge Impulse
การเชื่อมต่อโทรศัพท์มือถือของคุณให้คลิกที่ ' อุปกรณ์ ' และจากนั้นคลิกที่ ' เชื่อมต่ออุปกรณ์ใหม่
ในหน้าต่างถัดไปให้คลิกที่ ' ใช้โทรศัพท์มือถือของคุณ' และรหัส QR จะปรากฏขึ้น สแกนรหัส QR ด้วยโทรศัพท์มือถือของคุณโดยใช้ Google Lens หรือแอปสแกนโค้ด QR อื่น ๆ
เพื่อเชื่อมต่อโทรศัพท์กับ Edge Impulse studio
เมื่อโทรศัพท์ของคุณเชื่อมต่อกับ Edge Impulse Studio คุณสามารถโหลดตัวอย่างได้แล้ว จะโหลดตัวอย่างคลิกที่ ' Data Acquisition' ตอนนี้ในหน้าการรับข้อมูลป้อนชื่อป้ายกำกับเลือกไมโครโฟนเป็นเซ็นเซอร์และป้อนความยาวตัวอย่าง คลิกที่ ' เริ่มการสุ่มตัวอย่าง' เพื่อเริ่มการสุ่มตัวอย่างตัวอย่าง 40 วินาที แทนที่จะบังคับให้ตัวเองไอคุณสามารถใช้ตัวอย่างอาการไอออนไลน์ที่มีความยาวต่างกัน บันทึกตัวอย่างอาการไอทั้งหมด 10 ถึง 12 ตัวอย่างที่มีความยาวต่างกัน
หลังจากอัปโหลดตัวอย่างอาการไอแล้วให้ตั้งค่าป้ายกำกับเป็น "เสียง" และรวบรวมตัวอย่างเสียงรบกวนอีก 10 ถึง 12 ตัวอย่าง
ตัวอย่างเหล่านี้ใช้สำหรับการฝึกอบรมโมดูลในขั้นตอนถัดไปเราจะรวบรวมข้อมูลการทดสอบ ข้อมูลการทดสอบควรเป็นข้อมูลการฝึกอบรมอย่างน้อย 30% ดังนั้นควรเก็บตัวอย่าง "เสียง" 3 ตัวอย่างและ "ไอ" 4 ถึง 5 ตัวอย่าง
แทนที่จะรวบรวมข้อมูลของคุณคุณสามารถนำเข้าชุดข้อมูลของเราไปยังบัญชี Edge Impulse ของคุณโดยใช้ Edge Impulse CLI Uploader
ในการติดตั้ง CLI Uploader ก่อนอื่นให้ดาวน์โหลดและติดตั้ง Node.js บนแล็ปท็อปของคุณ หลังจากนั้นให้เปิดพรอมต์คำสั่งและป้อนคำสั่งด้านล่าง:
npm ติดตั้ง -g edge-impulse-cli
ตอนนี้ดาวน์โหลดชุดข้อมูล (Dataset Link) และแตกไฟล์ในโฟลเดอร์โครงการของคุณ เปิดพรอมต์คำสั่งและไปที่ตำแหน่งชุดข้อมูลและเรียกใช้คำสั่งด้านล่าง:
edge-impulse-uploader - clean edge-impulse-uploader --category training training / *. json edge-impulse-uploader --category training training / * cbor edge-impulse-uploader --category testing testing / *. json edge-impulse-uploader --category testing testing / *. cbor
การฝึกอบรมโมเดลและการปรับแต่งโค้ด
เมื่อชุดข้อมูลพร้อมแล้วตอนนี้เราจะสร้างแรงกระตุ้นสำหรับข้อมูล ไปที่หน้า ' สร้างแรงกระตุ้น '
ตอนนี้ที่ ' สร้างแรงกระตุ้น' หน้าคลิกที่ ' เพิ่มการประมวลผลบล็อก' ในหน้าต่างถัดไปให้เลือกAudio (MFCC) บล็อก หลังจากคลิกที่ ' เพิ่มบล็อกการเรียนรู้' และเลือกโครงข่ายประสาทเทียม (Keras) บล็อก จากนั้นคลิกที่ ' บันทึกดล'
ในขั้นตอนถัดไปไปที่หน้า MFCC และจากนั้นคลิกที่ ' สร้าง Features' มันจะสร้างบล็อก 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)
หลังจากฝึกโมเดลแล้วจะแสดงผลการฝึก สำหรับฉันความแม่นยำคือ 96.5% และการสูญเสียคือ 0.10 ซึ่งเป็นสิ่งที่ดีในการดำเนินการต่อ
เมื่อโมเดลการตรวจจับอาการไอของเราพร้อมแล้วเราจะปรับใช้โมเดลนี้เป็นไลบรารี Arduino ก่อนที่จะดาวน์โหลดรูปแบบเป็นห้องสมุดที่คุณสามารถทดสอบประสิทธิภาพการทำงานได้โดยไปที่ ' การจัดจำแนกสด 'หน้า
ไปที่ ' การปรับใช้ หน้า' และเลือก ' Arduino ห้องสมุด' ตอนนี้เลื่อนลงและคลิกที่ 'สร้าง' เพื่อเริ่มกระบวนการ สิ่งนี้จะสร้างไลบรารี Arduino สำหรับโครงการของคุณ
ตอนนี้เพิ่มไลบรารีใน Arduino IDE ของคุณ เพื่อเปิด Arduino IDE จากนั้นคลิกที่ Sketch> Include Library> Add.ZIP library
จากนั้นโหลดตัวอย่างโดยไปที่ ไฟล์> ตัวอย่าง> ชื่อโปรเจ็กต์ของคุณ - Edge Impulse> nano_ble33_sense_microphone
เราจะทำการเปลี่ยนแปลงบางอย่างในโค้ดเพื่อให้ส่งเสียงเตือนเมื่อ Arduino ตรวจพบอาการไอ ด้วยเหตุนี้สัญญาณเตือนจะเชื่อมต่อกับ Arduino และเมื่อใดก็ตามที่ตรวจพบอาการไอ LED จะกะพริบสามครั้ง
การเปลี่ยนแปลงเกิดขึ้นในฟังก์ชัน void loop () ซึ่งเป็นการพิมพ์ค่าเสียงรบกวนและค่าไอ ในรหัสเดิมเป็นการพิมพ์ทั้งฉลากและค่าพร้อมกัน
สำหรับ (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
เราจะบันทึกทั้งค่าเสียงและค่าไอในตัวแปรต่างๆและเปรียบเทียบค่าเสียง หากค่าเสียงต่ำกว่า 0.50 นั่นหมายความว่าค่าไอมากกว่า 0.50 และจะทำให้เกิดเสียง แทนที่ต้นฉบับสำหรับรหัส loop () ด้วยสิ่งนี้:
สำหรับ (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; ถ้า (ข้อมูล <0.50) {Serial.print ("ตรวจพบไอ"); ปลุก (); }}
หลังจากทำการเปลี่ยนแปลงแล้วให้อัปโหลดรหัสไปยัง Arduino ของคุณ เปิดมอนิเตอร์แบบอนุกรมที่ 115200 บอด
นี่คือวิธีที่สามารถสร้างเครื่องตรวจจับอาการไอได้จึงไม่ใช่วิธีที่มีประสิทธิภาพในการค้นหาผู้ต้องสงสัย COVID19 แต่สามารถทำงานได้ดีในพื้นที่แออัด
วิดีโอการทำงานที่สมบูรณ์พร้อมไลบรารีและรหัสมีให้ด้านล่าง: