สารบัญ:

ตัวระบุเสียงห้องครัวแบบกำหนดเอง: 4 ขั้นตอน
ตัวระบุเสียงห้องครัวแบบกำหนดเอง: 4 ขั้นตอน

วีดีโอ: ตัวระบุเสียงห้องครัวแบบกำหนดเอง: 4 ขั้นตอน

วีดีโอ: ตัวระบุเสียงห้องครัวแบบกำหนดเอง: 4 ขั้นตอน
วีดีโอ: 4 ขั้นตอนปรับพฤติกรรมเล็กๆ เพื่อชีวิตที่ดีได้กว่าที่เป็น | Readery EP.108 2024, พฤศจิกายน
Anonim
Image
Image
ตัวระบุเสียงในครัวที่กำหนดเอง
ตัวระบุเสียงในครัวที่กำหนดเอง

สำหรับโครงการสุดท้ายของเราในหลักสูตรระบบโต้ตอบในฤดูใบไม้ผลินี้ เราได้สร้างระบบแบบเรียลไทม์สำหรับการระบุและแสดงภาพเสียงทั่วไปในห้องครัวโดยใช้การจำแนกประเภท Support-Vector Machine ระบบประกอบด้วยแล็ปท็อปสำหรับการสุ่มตัวอย่าง/การจัดประเภทเสียง และจอแสดงผล Arduino/ดอทเมทริกซ์สำหรับการแสดงภาพ ต่อไปนี้คือแนวทางในการสร้างเวอร์ชันของระบบนี้สำหรับเสียงจากห้องครัวของคุณเอง

กรณีการใช้งานดั้งเดิมของเราใช้เป็นอุปกรณ์สำหรับใช้ในครัวของคนหูหนวกและมีปัญหาทางการได้ยิน แต่ระบบนี้สามารถปรับตามทฤษฎีเพื่อระบุชุดของเสียงในบริบทต่างๆ ได้ ห้องครัวเป็นสถานที่ที่เหมาะสำหรับการเริ่มต้น เนื่องจากมักจะค่อนข้างเงียบและมีเสียงที่ชัดเจนและเรียบง่ายในปริมาณที่เหมาะสม

ที่เก็บ GitHub สำหรับโครงการนี้สามารถพบได้ที่นี่

เสบียง

  • Arduino Leonardo Microcontroller พร้อมส่วนหัว
  • KEYESTUDIO 16x16 Dot Matrix LED Display สำหรับ Arduino
  • สายจัมเปอร์เขียงหั่นขนม
  • สาย Micro-USB เป็น USB 2.0
  • แล็ปท็อปที่มี Jupyter Notebook (การติดตั้ง Anaconda)

    คู่มือสำหรับผู้เริ่มต้นใช้งาน Jupyter Notebook สามารถพบได้ที่นี่

  • อิฐเลโก้ที่ไม่ตรงกันจำนวนมากสำหรับที่อยู่อาศัยของระบบ

    (แต่จริงๆ แล้วคุณสามารถแทนที่สิ่งเหล่านี้ด้วยวัสดุก่อสร้าง DIY ที่คุณต้องการ!)

ขั้นตอนที่ 1: รวบรวมตัวอย่างเสียงในครัว

รวบรวมตัวอย่างเสียงในครัว
รวบรวมตัวอย่างเสียงในครัว

รูปด้านบน: ข้อมูลเสียงที่นำมาจากการบันทึกส้อมและมีดกระทบกันโดยใช้กระบวนการรวบรวมนี้

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

ขั้นตอนที่ 1.1: คัดลอกสมุดบันทึก CollectSamples.ipynb ไปยังไดเร็กทอรี Jupyter Notebook ที่ใช้งานได้แล้วเปิดขึ้น

ขั้นตอนที่ 1.2: เรียกใช้แต่ละเซลล์ทีละเซลล์ โดยให้ความสนใจกับบันทึกย่อที่เราให้ไว้ในส่วนหัว หยุดเมื่อคุณไปถึงหนึ่งชื่อ "การบันทึกตัวอย่าง"

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

ขั้นตอนที่ 1.3: สร้างไดเร็กทอรีว่างเพื่อเก็บตัวอย่างของคุณภายในไดเร็กทอรีการทำงานของคุณสำหรับโครงการนี้

ขั้นตอนที่ 1.4: แก้ไขตัวแปร SAMPLES_LOCATION ในเซลล์ "Sample Recording" เพื่อให้ตรงกับตำแหน่งของไดเรกทอรีว่างของคุณ

ขั้นตอนที่ 1.5: เพิ่มหรือลบเสียงได้มากเท่าที่คุณต้องการในตัวแปร SOUND_LABELS

เพื่อให้โค้ดบันทึกตัวอย่างทำงาน แต่ละบรรทัดของตัวแปรนี้ต้องคั่นด้วยเครื่องหมายจุลภาคและอยู่ในรูปแบบต่อไปนี้:

'ts':Sound("TargetedSound", "ts")

ขั้นตอนที่ 1.6: เมื่อเพิ่มป้ายกำกับทั้งหมดแล้ว ให้ประเมินเซลล์ "การบันทึกตัวอย่าง" โดยเริ่มกระบวนการรวบรวมตัวอย่าง ในเอาต์พุตของเซลล์ คุณจะได้รับแจ้งให้ป้อนรหัสสั้นที่คุณเชื่อมโยงกับแต่ละเสียงในป้ายกำกับ (เช่น "ts" สำหรับ TargetedSound) อย่าเพิ่งทำเช่นนี้

ขั้นตอนที่ 1.7: นำแล็ปท็อปของคุณไปที่ห้องครัวและวางไว้ในพื้นที่ที่คุณน่าจะวางระบบที่เสร็จแล้วได้มากที่สุด ตำแหน่งนี้ควรเป็นศูนย์กลางสำหรับการรวบรวมเสียงที่ดีและแห้งและห่างจากการรั่วไหลที่อาจเกิดขึ้นเพื่อปกป้องอุปกรณ์อิเล็กทรอนิกส์ของคุณ

ขั้นตอนที่ 1.8: เตรียมเสียงเป้าหมายแรกของคุณ หากนี่คือเสียงบี๊บของตัวจับเวลาเตาอบ คุณอาจตั้งเวลาเป็นหนึ่งนาทีและรอให้นับถอยหลังเหลือ 20 วินาทีหรือมากกว่านั้นก่อนที่จะดำเนินการในขั้นตอนต่อไป

ขั้นตอนที่ 1.9: พิมพ์รหัสฉลากลงในพร้อมท์ (เช่น "ts") แล้วกด Enter/Return

ระบบจะเริ่มฟังเหตุการณ์เสียงที่แตกต่างจากเสียงรบกวนรอบข้างของห้อง เมื่อตรวจพบเหตุการณ์เสียงนี้ จะเริ่มบันทึกจนกว่าเสียงในห้องจะกลับสู่ระดับแวดล้อม จากนั้นจะบันทึกเสียงเป็นไฟล์ WAV 16 บิตไปยังไดเร็กทอรีที่ระบุใน SAMPLES_LOCATION ในรูปแบบ:

TargetedSound_#_captured.wav

ส่วน # ของชื่อไฟล์นี้สอดคล้องกับจำนวนตัวอย่างของเสียงเป้าหมายที่คุณรวบรวมไว้ หลังจากบันทึกไฟล์ WAV แล้ว ข้อความแจ้งจะทำซ้ำ ช่วยให้คุณสามารถรวบรวมตัวอย่างเสียงเดียวกันได้หลายตัวอย่างในการดำเนินการเซลล์เดียว

อย่าเปลี่ยนชื่อไฟล์นี้ เป็นสิ่งสำคัญสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 1.10: ทำซ้ำขั้นตอนที่ 1.8 และ 1.9 จนกว่าคุณจะรวบรวมตัวอย่างแต่ละเสียงได้ 5-10 ตัวอย่าง

ขั้นตอนที่ 1.11: ป้อน "x" เมื่อเสร็จสิ้นเพื่อออกจากการดำเนินการ

คำเตือน: การไม่ออกจากเซลล์ในลักษณะนี้อาจทำให้โน้ตบุ๊กพังได้ ในกรณีนี้ ต้องรีเซ็ตเคอร์เนลของ Notebook และแต่ละเซลล์จะทำงานอีกครั้งจากด้านบน

ขั้นตอนที่ 1.11 (ไม่บังคับ): ตรวจสอบข้อมูล WAV ของแต่ละไฟล์ในเซลล์ "Quick Sound Visualization" เพื่อให้แน่ใจว่าคุณได้บันทึกข้อมูลที่ต้องการทั้งหมดแล้ว

เคล็ดลับบางประการ:

  • บันทึกเมื่อห้องครัวของคุณเงียบ
  • บันทึกเสียงเพียงครั้งเดียว ระบบไม่สามารถแยกแยะเสียงที่ทับซ้อนกันได้
  • พยายามทำให้การทดลองใช้เสียงแต่ละครั้งมีความสอดคล้องกันมากที่สุด ซึ่งจะช่วยให้ความถูกต้องของการระบุตัวตน
  • การประเมินเซลล์การบันทึกอีกครั้งจะรีเซ็ตค่า # ในชื่อไฟล์และเขียนทับไฟล์ที่มีอยู่ซึ่งตรงกับ # เราพบว่าการบันทึกเสียงตัวอย่างทั้งหมดในคราวเดียวนั้นง่ายที่สุด จากนั้นจึงหยุดเซลล์การบันทึก
  • หากระบบไม่รับเสียงเป้าหมายของคุณ ให้ลองลดค่า THRESHOLD (ตั้งค่าเป็น 30 เพื่อเริ่มต้น) และประเมินเซลล์อีกครั้ง
  • หากการบันทึกถูกกระตุ้นโดยเสียงอื่นที่อยู่นอกเสียงเป้าหมาย ให้ลองเพิ่มค่า THRESHOLD (ตั้งค่าเป็น 30 เพื่อเริ่มต้น) และประเมินเซลล์อีกครั้ง

ขั้นตอนที่ 2: การเตรียม Arduino/Matrix Display

กำลังเตรียม Arduino/Matrix Display
กำลังเตรียม Arduino/Matrix Display
กำลังเตรียม Arduino/Matrix Display
กำลังเตรียม Arduino/Matrix Display
กำลังเตรียม Arduino/Matrix Display
กำลังเตรียม Arduino/Matrix Display

ต่อไป เราจะตั้งค่าระบบการแสดงภาพโดยใช้จอแสดงผลดอทเมทริกซ์ Arduino Leonardo และ KEYESTUDIO 16x16 LED นี่คือการแสดงการคาดการณ์เสียงที่ตรวจพบของแบบจำลองการจัดหมวดหมู่ ก่อนหน้านี้ เราได้จัดเตรียมไฟล์ที่จำเป็นทั้งหมดไว้ทั้งที่นี่และในที่เก็บ GitHub ของโปรเจ็กต์

ขั้นตอนที่ 2.1: ต่อ Arduino และ LED matrix ตามแผนภาพด้านบน KEYESTUDIO มีสายไฟเพื่อเชื่อมต่อกับดอทเมทริกซ์ แต่ต้องใช้สายจัมเปอร์ของเขียงหั่นขนมเพื่อเชื่อมต่อสายเหล่านี้กับ Arduino

ขั้นตอนที่ 2.2: เปิด "arduino_listener.ino" โดยใช้ Ardunio IDE และอัปโหลดไปยัง Leonardo หากต่อสายอย่างถูกต้อง คุณจะเห็นไอคอน "กำลังฟัง" (ดูเหมือน Wi-Fi) ดังที่แสดงในภาพด้านบน

ขั้นตอนที่ 2.3: เตรียมไอคอนที่คุณต้องการแสดงสำหรับแต่ละเสียงเป้าหมายของคุณ หากต้องการทราบว่าไฟ LED ใดจะสว่างขึ้น ต้องส่งไอคอนจาก Arduino ไปยังเมทริกซ์เป็นอาร์เรย์ไบต์ ตัวอย่างเช่น ไอคอนถ้วยกาแฟของเรา (ในภาพด้านบน) จะถูกส่งไปยังเมทริกซ์ในรูปแบบนี้:

{

0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf7, 0xfb, 0xf, 0xf 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff };

เราวาดไอคอนของเราโดยใช้เครื่องมือออนไลน์ Dot2Pic โดยเลือก 16 คอลัมน์ 16 แถว และ "ขาวดำ 8 พิกเซลต่อไบต์ การตั้งค่าแนวตั้ง" จากเมนูแบบเลื่อนลง ของเราสามารถพบได้ในอาร์เรย์ "sample_icon_bytes.txt"

หมายเหตุ: อาจมีเครื่องมือออนไลน์ที่สามารถทำได้โดยอัตโนมัติกับไฟล์ที่อัปโหลด

ขั้นตอนที่ 2.4: วาดแต่ละไอคอน เมื่อวาดเสร็จแล้ว ให้เลือก "แปลงเป็นอาร์เรย์"

ขั้นตอนที่ 2.5: แทนที่ไอคอนที่ไม่จำเป็นซึ่งกำหนดไว้ที่ด้านบนของโค้ด "arduino_listening.ino" ตามต้องการ อย่าลืมเพิ่มความคิดเห็นที่อธิบายไอคอนเพื่อให้คุณจำได้ว่าอันไหน!

ขั้นตอนที่ 2.6: อัปโหลดรหัสใหม่ไปยัง Arduino อย่าเพิ่งปิดไฟล์ เราต้องการมันสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 3: เรียกใช้ตัวแยกประเภทและระบุเสียง

เรียกใช้ลักษณนามและการระบุเสียง
เรียกใช้ลักษณนามและการระบุเสียง
เรียกใช้ลักษณนามและการระบุเสียง
เรียกใช้ลักษณนามและการระบุเสียง

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

ขั้นตอนที่ 3.1: คัดลอกโน้ตบุ๊ก FullPipeline.ipynb ไปยังไดเร็กทอรี Jupyter Notebook ที่ใช้งานได้แล้วเปิดขึ้น

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

ขั้นตอนที่ 3.3: แก้ไขตัวแปร SAMPLES_LOCATION_ROOT ในเซลล์ "โหลดข้อมูลการฝึกอบรม" ไปยังไดเร็กทอรีหลักของตำแหน่งของไดเร็กทอรีตัวอย่างก่อนหน้าของคุณ จากนั้น เปลี่ยนตัวแปร SAMPLES_DIR_NAME เป็นชื่อของไดเร็กทอรีของคุณ ดังนั้นหากคุณตั้งค่าตำแหน่งใน CollectSamples.ipynb เป็น:

SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"

ตอนนี้คุณจะตั้งค่าตัวแปรเหล่านี้เป็น:

SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/"SAMPLES_DIR_NAME = "NewDir"

การทำเช่นนี้ทำให้สามารถเปลี่ยนแปลงตัวแยกประเภทได้อย่างรวดเร็วในกรณีที่มีความไม่ถูกต้อง คุณสามารถสลับไปมาระหว่างคอลเล็กชันตัวอย่างต่างๆ เพื่อปรับแต่งข้อมูลของคุณ

ขั้นตอนที่ 3.4: ประเมินเซลล์ คุณควรเห็นแต่ละคอลเลกชันโหลดสำเร็จ

ขั้นตอนที่ 3.5: เรียกใช้แต่ละเซลล์ต่อไปทีละเซลล์ โดยให้ความสนใจกับบันทึกย่อที่เราให้ไว้ในส่วนหัว

ขั้นตอนที่ 3.6: หยุดเมื่อคุณไปถึงเซลล์ "Messaging Arduino" กำหนดพอร์ตอนุกรมที่คอมพิวเตอร์ของคุณจะใช้สำหรับการสื่อสารกับ Arduino ในตัวแปร PORT_DEF สามารถพบได้ใน Arduino IDE และไปที่ Tools > Port

ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่.

ขั้นตอนที่ 3.8: เปิด Arduino IDE ของคุณอีกครั้ง ในสถานที่ที่คุณทำการเปลี่ยนแปลงไอคอน ให้จดตัวอักษรไว้ข้างๆ ค่าอาร์เรย์ แต่อย่าเปลี่ยน ในตัวอย่างด้านล่าง นี่คือ "g"

// การกำจัดขยะconst ถ่านที่ไม่ได้ลงชื่อ g[1][32] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff, };

ขั้นตอนที่ 3.7: (กลับไปที่เซลล์ "Messaging Arduino" ของ Notebook) เปลี่ยนป้ายกำกับในพจนานุกรม self.sounds ให้ตรงกับป้ายกำกับที่คุณใช้ในการบันทึกตัวอย่าง ตรวจสอบให้แน่ใจว่าป้ายกำกับแต่ละอันสอดคล้องกับตัวอักษรตัวเดียวที่คุณระบุไว้ก่อนหน้านี้ ขั้นตอน "การบันทึก" และ "การฟัง" เป็นส่วนหนึ่งของฟังก์ชันหลักของระบบและไม่ควรเปลี่ยนแปลง อย่าเปลี่ยนตัวอักษรตัวที่สองเว้นแต่คุณจะรู้สึกมั่นใจในการเปลี่ยนแปลงเพิ่มเติมเล็กน้อยในโค้ด Arduino เช่นกัน เพราะจะทำให้การสื่อสารกับ Arduino/matrix ยุ่งเหยิง

ขั้นตอนที่ 3.8: เรียกใช้ฟังก์ชันหลัก! รหัสจะดึงข้อมูลการฝึก ดึงคุณสมบัติหลัก ป้อนลงในไปป์ไลน์ สร้างแบบจำลองการจำแนกประเภท จากนั้นเริ่มฟังเหตุการณ์เสียง เมื่อสัมผัสได้ คุณจะเห็นเมทริกซ์เปลี่ยนเป็นสัญลักษณ์การบันทึก (สี่เหลี่ยมจัตุรัสที่มีวงกลมอยู่ข้างใน) และจะแบ่งข้อมูลนี้และป้อนลงในแบบจำลอง สิ่งที่โมเดลคาดการณ์ไว้จะปรากฏขึ้นในไม่กี่วินาทีต่อมาบนการแสดงเมทริกซ์

คุณสามารถติดตามได้ในผลลัพธ์ของเซลล์ด้านล่าง มาดูกันว่าจะได้แม่นขนาดไหน!

ขั้นตอนที่ 4: การสร้างที่อยู่อาศัยของ LEGO

การสร้างที่อยู่อาศัยเลโก้
การสร้างที่อยู่อาศัยเลโก้
การสร้างที่อยู่อาศัยเลโก้
การสร้างที่อยู่อาศัยเลโก้
การสร้างที่อยู่อาศัยเลโก้
การสร้างที่อยู่อาศัยเลโก้

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

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

แนะนำ: