สารบัญ:

เครื่องตรวจจับไอขนาดพกพา: 7 ขั้นตอน
เครื่องตรวจจับไอขนาดพกพา: 7 ขั้นตอน

วีดีโอ: เครื่องตรวจจับไอขนาดพกพา: 7 ขั้นตอน

วีดีโอ: เครื่องตรวจจับไอขนาดพกพา: 7 ขั้นตอน
วีดีโอ: รีวิว GPS ขนาดเล็ก ติดตามบอกพิกัด บันทึกเสียงได้ แบต 15 วัน ราคาหลักร้อย 2024, พฤศจิกายน
Anonim
เครื่องตรวจจับไอขนาดพกพา
เครื่องตรวจจับไอขนาดพกพา

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

ในบทช่วยสอนนี้ เราจะสร้างระบบตรวจจับอาการไอโดยใช้ Arduino 33 BLE Sense และ Edge Impulse Studio มันสามารถแยกความแตกต่างระหว่างเสียงพื้นหลังปกติกับการไอในเสียงแบบเรียลไทม์ เราใช้ Edge Impulse Studio เพื่อฝึกชุดข้อมูลตัวอย่างเสียงไอและเสียงพื้นหลัง และสร้างโมเดล TInyML ที่ได้รับการปรับแต่งอย่างสูง ซึ่งสามารถตรวจจับเสียงไอได้แบบเรียลไทม์

เสบียง

ฮาร์ดแวร์

  • Arduino 33 BLE Sense
  • LEDJumper
  • สายไฟ

ซอฟต์แวร์

  • Edge Impulse Studio
  • Arduino IDE

ขั้นตอนที่ 1: แผนภาพวงจร

แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม
แผนภูมิวงจรรวม

แผนภาพวงจรสำหรับการตรวจหาไอโดยใช้ Arduino 33 BLE Sense แสดงไว้ด้านบน ไม่มีส่วน Fritzing สำหรับ Arduino 33 BLE ดังนั้นฉันจึงใช้ Arduino Nano เนื่องจากทั้งคู่มีพินเอาต์เหมือนกัน

ขั้วบวกของ LED เชื่อมต่อกับพินดิจิตอล 4 ของความรู้สึก Arduino 33 BLE และตะกั่วเชิงลบเชื่อมต่อกับพิน GND ของ Arduino

ขั้นตอนที่ 2: การสร้างชุดข้อมูลสำหรับเครื่องตรวจไอ

การสร้างชุดข้อมูลสำหรับเครื่องตรวจไอ
การสร้างชุดข้อมูลสำหรับเครื่องตรวจไอ

ดังที่ได้กล่าวไว้ก่อนหน้านี้ เรากำลังใช้ Edge Impulse Studio เพื่อฝึกโมเดลการตรวจจับอาการไอของเรา ในการนั้น เราต้องรวบรวมชุดข้อมูลที่มีตัวอย่างข้อมูลที่เราต้องการจะรับรู้บน Arduino ของเรา เนื่องจากเป้าหมายคือการตรวจหาอาการไอ คุณจะต้องเก็บตัวอย่างเสียงดังกล่าวและตัวอย่างอื่นๆ เพื่อหาเสียง เพื่อให้สามารถแยกแยะระหว่างอาการไอกับเสียงอื่นๆ เราจะสร้างชุดข้อมูลที่มีสองคลาส "ไอ" และ "เสียง" ในการสร้างชุดข้อมูล ให้สร้างบัญชี Edge Impulse ยืนยันบัญชีของคุณแล้วเริ่มโครงการใหม่ คุณสามารถโหลดตัวอย่างโดยใช้มือถือของคุณ บอร์ด Arduino หรือคุณสามารถนำเข้าชุดข้อมูลไปยังบัญชี Edge Impulse ของคุณ วิธีที่ง่ายที่สุดในการโหลดตัวอย่างลงในบัญชีของคุณคือการใช้โทรศัพท์มือถือของคุณ เพื่อที่คุณจะต้องเชื่อมต่อมือถือของคุณกับ Edge Impulse ในการเชื่อมต่อโทรศัพท์มือถือของคุณ ให้คลิกที่ 'อุปกรณ์' จากนั้นคลิกที่ 'เชื่อมต่ออุปกรณ์ใหม่'

ขั้นตอนที่ 3: เชื่อมต่อกับโทรศัพท์มือถือ

เชื่อมต่อกับโทรศัพท์มือถือ
เชื่อมต่อกับโทรศัพท์มือถือ

ในหน้าต่างถัดไป ให้คลิกที่ 'ใช้โทรศัพท์มือถือของคุณ' และรหัส QR จะปรากฏขึ้น สแกนรหัส QR ด้วยโทรศัพท์มือถือของคุณโดยใช้ Google Lens หรือแอปสแกนรหัส QR อื่น ๆ

สิ่งนี้จะเชื่อมต่อโทรศัพท์ของคุณกับ Edge Impulse studio

ด้วยโทรศัพท์ของคุณที่เชื่อมต่อกับ Edge Impulse Studio คุณสามารถโหลดตัวอย่างของคุณได้แล้ว ในการโหลดตัวอย่าง ให้คลิกที่ 'การเก็บข้อมูล' ในหน้าการรับข้อมูล ให้ป้อนชื่อป้ายกำกับ เลือกไมโครโฟนเป็นเซ็นเซอร์ แล้วป้อนความยาวตัวอย่าง คลิกที่ 'เริ่มสุ่มตัวอย่าง' เพื่อเริ่มสุ่มตัวอย่าง 40 วินาที แทนที่จะบังคับตัวเองให้ไอ คุณสามารถใช้ตัวอย่างไอออนไลน์ที่มีความยาวต่างกันได้ บันทึกตัวอย่างอาการไอทั้งหมด 10 ถึง 12 ตัวอย่างที่มีความยาวต่างกัน

ขั้นตอนที่ 4:

ภาพ
ภาพ
ภาพ
ภาพ

หลังจากอัปโหลดตัวอย่างอาการไอแล้ว ให้ตั้งค่าป้ายกำกับเป็น "เสียง" และรวบรวมตัวอย่างเสียงอีก 10 ถึง 12 ตัวอย่าง

ตัวอย่างเหล่านี้มีไว้สำหรับการฝึกอบรมโมดูล ในขั้นตอนต่อไป เราจะรวบรวมข้อมูลการทดสอบ ข้อมูลการทดสอบควรมีอย่างน้อย 30% ของข้อมูลการฝึก ดังนั้นให้รวบรวม 3 ตัวอย่าง 'เสียงรบกวน' และ 4 ถึง 5 ตัวอย่าง 'ไอ' คุณสามารถนำเข้าชุดข้อมูลของเราไปยังบัญชี Edge Impulse ของคุณโดยใช้ Edge แทนการรวบรวมข้อมูลของคุณ ตัวอัปโหลด CLI แรงกระตุ้น ในการติดตั้ง CLI Uploader ก่อนอื่น ให้ดาวน์โหลดและติดตั้ง Node.js บนแล็ปท็อปของคุณ หลังจากนั้นเปิดพรอมต์คำสั่งและป้อนคำสั่งด้านล่าง:

npm install -g edge-impulse-cli

ตอนนี้ดาวน์โหลดชุดข้อมูล (ลิงก์ชุดข้อมูล) และแตกไฟล์ในโฟลเดอร์โครงการของคุณ เปิดพรอมต์คำสั่งและไปที่ตำแหน่งชุดข้อมูลและเรียกใช้คำสั่งด้านล่าง:

edge-impulse-uploader --cleanedge-impulse-uploader -- การฝึกอบรมประเภทการฝึกอบรม/*.json

edge-impulse-uploader -- การฝึกอบรมหมวดหมู่ /*.cbor

edge-impulse-uploader -- การทดสอบหมวดหมู่การทดสอบ/*.json edge-impulse-uploader -- การทดสอบหมวดหมู่การทดสอบ/*.cbor

ขั้นตอนที่ 5: ฝึกโมเดลและปรับแต่งโค้ด

เมื่อชุดข้อมูลพร้อมแล้ว เราจะสร้างแรงกระตุ้นสำหรับข้อมูล เพื่อไปที่หน้า 'สร้างแรงกระตุ้น'

ตอนนี้ในหน้า 'สร้างแรงกระตุ้น' ให้คลิกที่ 'เพิ่มบล็อกการประมวลผล' ในหน้าต่างถัดไป เลือกบล็อกเสียง (MFCC) หลังจากนั้นคลิกที่ 'เพิ่มบล็อกการเรียนรู้' และเลือกบล็อก Neural Network (Keras) จากนั้นคลิกที่ 'บันทึกแรงกระตุ้น'

ในขั้นตอนต่อไป ไปที่หน้า MFCC จากนั้นคลิกที่ 'สร้างคุณสมบัติ' มันจะสร้างบล็อก MFCC สำหรับหน้าต่างเสียงทั้งหมดของเรา

หลังจากนั้นไปที่หน้า 'NN Classifier' และคลิกที่จุดสามจุดที่มุมขวาบนของ 'Neural Network settings' และเลือก 'Switch to Keras (expert) mode'

แทนที่ต้นฉบับด้วยรหัสต่อไปนี้และเปลี่ยน 'ระดับความเชื่อมั่นขั้นต่ำ' เป็น '0.70' จากนั้นคลิกที่ปุ่ม 'เริ่มการฝึก' มันจะเริ่มฝึกโมเดลของคุณ

นำเข้า tensorflow เป็น tffrom tensorflow.keras.models นำเข้า Sequential จาก tensorflow.keras.layers นำเข้า Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D จาก tensorflow.keras.optimizers นำเข้า Adamasint MaxNorm # model สถาปัตยกรรม model = Sequential() model.add(InputLayer(input_shape=(X_train.shape[1],), name='x_input')) model.add(Reshape((int(X_train.shape[1]) / 13), 13, 1), input_shape=(X_train.shape[1],))) model.add(Conv2D(10, kernel_size=5, enable='relu', padding='same', kernel_constraint=MaxNorm(3)))) model.add (AveragePooling2D(pool_size=2, padding='same')) model.add(Conv2D(5, kernel_size=5, activation='relu', padding='same', kernel_constraint=MaxNorm(3))) model.add (AveragePooling2D(pool_size=2, padding='same')) model.add(Flatten()) model.add(Dense(classes, activation='softmax', name='y_pred', kernel_constraint=MaxNorm) (3))) # สิ่งนี้ควบคุมอัตราการเรียนรู้ opt = Adam(lr=0.005, beta_ 1=0.9, beta_2=0.999) # ฝึกโมเดลโครงข่ายประสาทเทียม (loss='categorical_crossentropy', Optimizer=opt, metrics=['accuracy']) model.fit(X_train, Y_train, batch_size=32, epochs=9, validation_data=(X_test, Y_test), verbose=2)

ขั้นตอนที่ 6:

หลังจากฝึกโมเดลแล้ว จะแสดงประสิทธิภาพการฝึก สำหรับฉันความแม่นยำคือ 96.5% และการสูญเสียคือ 0.10 ซึ่งดีที่จะดำเนินการต่อไป

เมื่อโมเดลการตรวจจับอาการไอของเราพร้อมแล้ว เราจะปรับใช้โมเดลนี้เป็นไลบรารี Arduino ก่อนดาวน์โหลดโมเดลเป็นไลบรารี คุณสามารถทดสอบประสิทธิภาพโดยไปที่หน้า "การจัดหมวดหมู่แบบสด" ไปที่หน้า 'การปรับใช้งาน' และเลือก 'Arduino Library' ตอนนี้เลื่อนลงและคลิกที่ 'สร้าง' เพื่อเริ่มกระบวนการ สิ่งนี้จะสร้างห้องสมุด Arduino สำหรับโครงการของคุณ

ตอนนี้เพิ่มไลบรารีใน Arduino IDE ของคุณ สำหรับสิ่งนั้นให้เปิด Arduino IDE จากนั้นคลิกที่ Sketch > รวมไลบรารี > ไลบรารี Add. ZIP จากนั้นโหลดตัวอย่างโดยไปที่ ไฟล์ > ตัวอย่าง > ชื่อโครงการของคุณ - 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[ix].label, result.classification[ix].value); }เราจะบันทึกทั้งค่าเสียงและการไอในตัวแปรต่างๆ และเปรียบเทียบค่าเสียง หากค่าเสียงต่ำกว่า 0.50 แสดงว่าค่าไอมากกว่า 0.50 และจะทำให้เสียงนั้นดังขึ้น แทนที่รหัส for loop() ดั้งเดิมด้วยสิ่งนี้: for (size_t ix = 1; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) { Serial.print(result.classification[ix].value); float Data = ผลการจัดประเภท[ix].value; ถ้า (ข้อมูล < 0.50) { Serial.print ("ตรวจพบไอ"); เตือน(); } }หลังจากทำการเปลี่ยนแปลงแล้ว ให้อัปโหลดโค้ดไปยัง Arduino ของคุณ เปิดจอภาพอนุกรมที่ 115200 บอด

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

ขั้นตอนที่ 7: รหัส

กรุณาหาไฟล์แนบ

และถ้าคุณชอบอย่าลืมโหวตให้ฉันในการแข่งขันด้านล่าง

แนะนำ: