Mục lục:

Bộ nhận dạng âm thanh nhà bếp tùy chỉnh: 4 bước
Bộ nhận dạng âm thanh nhà bếp tùy chỉnh: 4 bước

Video: Bộ nhận dạng âm thanh nhà bếp tùy chỉnh: 4 bước

Video: Bộ nhận dạng âm thanh nhà bếp tùy chỉnh: 4 bước
Video: Cách bố trí Tủ Bếp đẹp và tiện dụng nhất | HUY BẾP 2024, Tháng mười một
Anonim
Image
Image
Bộ nhận dạng âm thanh nhà bếp tùy chỉnh
Bộ nhận dạng âm thanh nhà bếp tùy chỉnh

Đối với dự án cuối cùng của chúng tôi trong một khóa học về hệ thống tương tác vào mùa xuân này, chúng tôi đã tạo một hệ thống thời gian thực để xác định và hình dung các âm thanh phổ biến trong nhà bếp bằng cách sử dụng phân loại Máy hỗ trợ vectơ. Hệ thống này bao gồm một máy tính xách tay để lấy mẫu / phân loại âm thanh và một màn hình Arduino / ma trận điểm để hiển thị trực quan. Sau đây là hướng dẫn để tạo phiên bản hệ thống này của riêng bạn cho âm thanh từ nhà bếp của riêng bạn.

Trường hợp sử dụng ban đầu của chúng tôi là một thiết bị dành cho nhà bếp của một người khiếm thính và khiếm thính, nhưng về mặt lý thuyết, hệ thống này có thể được điều chỉnh để xác định một tập hợp âm thanh trong nhiều ngữ cảnh khác nhau. Nhà bếp là một nơi lý tưởng để bắt đầu, vì nó có xu hướng tương đối yên tĩnh và chứa một lượng hợp lý các âm thanh đơn giản, riêng biệt.

Bạn có thể tìm thấy kho lưu trữ GitHub cho dự án này tại đây.

Quân nhu

  • Vi điều khiển Arduino Leonardo có tiêu đề
  • KEYESTUDIO Màn hình LED ma trận 16x16 chấm cho Arduino
  • Dây jumper bảng mạch
  • Cáp Micro-USB sang USB 2.0
  • Máy tính xách tay có Máy tính xách tay Jupyter (cài đặt Anaconda)

    Hướng dẫn cho người mới bắt đầu về Máy tính xách tay Jupyter có thể được tìm thấy tại đây

  • Một lượng đáng kể các viên gạch LEGO không khớp cho nhà ở của hệ thống

    (Nhưng thực sự bạn có thể thay thế những thứ này bằng bất kỳ vật liệu xây dựng DIY nào bạn muốn!)

Bước 1: Thu thập các mẫu âm thanh nhà bếp

Thu thập các mẫu âm thanh nhà bếp
Thu thập các mẫu âm thanh nhà bếp

Hình trên: Dữ liệu âm thanh được lấy từ việc ghi lại tiếng dao nĩa và dao kêu vào nhau bằng cách sử dụng quy trình thu thập này

Để xác định âm thanh trong thời gian thực, chúng tôi cần cung cấp mô hình học máy của mình với các ví dụ chất lượng để so sánh. Chúng tôi đã tạo một sổ ghi chép Jupyter cho quá trình này, có thể được truy cập tại đây hoặc thông qua kho lưu trữ GitHub của dự án của chúng tôi. Kho lưu trữ cũng chứa các bộ sưu tập mẫu từ hai nhà bếp khác nhau cho mục đích thử nghiệm.

Bước 1.1: Sao chép sổ ghi chép CollectSamples.ipynb vào thư mục Sổ tay Jupyter đang hoạt động của bạn và mở nó.

Bước 1.2: Chạy từng ô một, chú ý đến bất kỳ ghi chú nào mà chúng tôi đã cung cấp trong các tiêu đề. Dừng lại khi bạn đến một mục có tiêu đề "Bản ghi mẫu".

LƯU Ý: Một số thư viện Python được sử dụng trong sổ ghi chép này và mỗi thư viện yêu cầu cài đặt trước khi chúng có thể được nhập thành công vào dự án. Bạn có thể thực hiện việc này theo cách thủ công, mặc dù bạn có thể tìm thấy hướng dẫn cài đặt thư viện trong Máy tính xách tay Jupyter tại đây.

Bước 1.3: Tạo một thư mục trống để lưu trữ các mẫu của bạn trong thư mục làm việc của bạn cho dự án này.

Bước 1.4: Chỉnh sửa biến SAMPLES_LOCATION trong ô "Bản ghi mẫu" để khớp với vị trí thư mục trống của bạn.

Bước 1.5: Thêm hoặc xóa bao nhiêu âm thanh tùy thích vào biến SOUND_LABELS.

Để mã ghi mẫu hoạt động, mỗi dòng của biến này phải được phân tách bằng dấu phẩy và có dạng sau:

'ts': Âm thanh ("TargetedSound", "ts")

Bước 1.6: Khi tất cả các nhãn đã được thêm vào, đánh giá ô "Ghi mẫu" và bắt đầu quá trình thu thập mẫu. Trong đầu ra của ô, bạn sẽ được nhắc nhập mã ngắn mà bạn đã liên kết với mỗi âm thanh trong các nhãn (tức là "ts" cho TargetedSound). Đừng làm điều này chỉ được nêu ra.

Bước 1.7: Mang máy tính xách tay của bạn vào nhà bếp và đặt nó vào khu vực bạn sẽ đặt hệ thống hoàn thiện nhất. Vị trí này phải là trung tâm để thu thập âm thanh tốt, và khô ráo và tránh xa bất kỳ sự cố tràn nào có thể xảy ra để bảo vệ thiết bị điện tử của bạn.

Bước 1.8: Chuẩn bị âm thanh được nhắm mục tiêu đầu tiên của bạn. Nếu đây là tiếng bíp của bộ hẹn giờ lò nướng, bạn có thể đặt bộ hẹn giờ thành một phút và đợi nó đếm ngược đến 20 giây hoặc lâu hơn trước khi tiếp tục bước tiếp theo.

Bước 1.9: Nhập mã nhãn vào lời nhắc (tức là "ts") và nhấn Enter / Return.

Hệ thống sẽ bắt đầu lắng nghe một sự kiện âm thanh khác với tiếng ồn xung quanh trong phòng. Khi cảm nhận được sự kiện âm thanh này, thiết bị sẽ bắt đầu ghi âm cho đến khi cảm nhận được âm thanh trong phòng đã trở lại mức xung quanh. Sau đó, nó sẽ lưu âm thanh dưới dạng tệp WAV 16 bit vào thư mục được xác định trong SAMPLES_LOCATION ở định dạng:

TargetedSound _ # _ capture.wav

# Phần của tên tệp này tương ứng với số lượng mẫu âm thanh được nhắm mục tiêu mà bạn đã thu thập. Sau khi tệp WAV được lưu, lời nhắc sẽ lặp lại, cho phép bạn thu thập một số mẫu âm thanh giống nhau trong một lần thực thi ô.

KHÔNG thay đổi tên tệp này. Nó quan trọng cho bước tiếp theo.

Bước 1.10: Lặp lại các bước 1.8 và 1.9 cho đến khi bạn thu thập được 5-10 mẫu của mỗi âm thanh.

Bước 1.11: Nhập "x" khi kết thúc để thoát khỏi quá trình thực thi.

CẢNH BÁO: Không thoát khỏi ô theo cách này có thể khiến Máy tính xách tay bị hỏng. Trong trường hợp này, nhân Notebook phải được đặt lại và mỗi ô chạy lại từ trên cùng.

Bước 1.11 (Tùy chọn): Kiểm tra dữ liệu WAV của các tệp riêng lẻ trong ô "Hình ảnh hóa âm thanh nhanh" để đảm bảo bạn đã nắm bắt được tất cả thông tin mong muốn.

Một số lời khuyên:

  • Ghi lại khi nhà bếp của bạn yên tĩnh.
  • Chỉ ghi một âm thanh cùng một lúc. Hệ thống không thể phân biệt sự chồng chéo trong âm thanh.
  • Cố gắng làm cho mỗi lần thử âm thanh nhất quán nhất có thể. Điều này sẽ giúp độ chính xác của nhận dạng.
  • Đánh giá lại ô Ghi sẽ đặt lại giá trị # trong tên tệp và ghi đè lên bất kỳ tệp hiện có nào khớp với # đó. Chúng tôi thấy dễ dàng nhất khi ghi tất cả các mẫu của một âm thanh cùng một lúc, sau đó dừng ô Ghi.
  • Nếu hệ thống không nhận âm thanh được nhắm mục tiêu của bạn, hãy thử giảm giá trị THRESHOLD (đặt thành 30 để bắt đầu) và đánh giá lại ô.
  • Nếu bản ghi được kích hoạt bởi các âm thanh khác bên ngoài âm thanh được nhắm mục tiêu, hãy thử tăng giá trị THRESHOLD (đặt thành 30 để bắt đầu) và đánh giá lại ô.

Bước 2: Chuẩn bị màn hình Arduino / Matrix

Chuẩn bị màn hình Arduino / Ma trận
Chuẩn bị màn hình Arduino / Ma trận
Chuẩn bị màn hình Arduino / Ma trận
Chuẩn bị màn hình Arduino / Ma trận
Chuẩn bị màn hình Arduino / Ma trận
Chuẩn bị màn hình Arduino / Ma trận

Tiếp theo, chúng ta sẽ thiết lập hệ thống hiển thị bằng cách sử dụng màn hình ma trận điểm LED 16x16 của Arduino Leonardo và KEYESTUDIO 16x16. Điều này là để xuất ra dự đoán của mô hình phân loại về các âm thanh được phát hiện. Như trước đây, chúng tôi đã cung cấp tất cả các tệp được yêu cầu cả ở đây và trong kho lưu trữ GitHub của dự án.

Bước 2.1: Đấu dây Arduino và ma trận LED theo sơ đồ trên. KEYESTUDIO bao gồm các dây để kết nối với ma trận điểm của chúng, nhưng sẽ cần các dây jumper trên breadboard để kết nối các dây này với Arduino

Bước 2.2: Mở "arduino_listener.ino" bằng Ardunio IDE và tải nó lên Leonardo. Nếu được nối dây chính xác, bạn sẽ thấy biểu tượng "đang nghe" (trông giống như Wi-Fi) như trong hình trên.

Bước 2.3: Chuẩn bị các biểu tượng bạn muốn hiển thị cho từng âm thanh mục tiêu của bạn. Để biết đèn LED nào sẽ sáng, biểu tượng phải được gửi từ Arduino đến ma trận dưới dạng một mảng byte. Ví dụ: biểu tượng tách cà phê của chúng tôi (trong hình trên) được gửi đến ma trận ở định dạng sau:

{

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

Chúng tôi đã vẽ các biểu tượng của mình bằng công cụ trực tuyến Dot2Pic, với 16 cột, 16 hàng và "đơn sắc, 8 pixel mỗi byte, thiết lập theo chiều dọc" được chọn từ menu thả xuống. Chúng tôi có thể được tìm thấy trong mảng "sample_icon_bytes.txt".

LƯU Ý: Cũng có thể có các công cụ trực tuyến có thể thực hiện việc này tự động với các tệp đã tải lên.

Bước 2.4: Vẽ từng biểu tượng. Khi vẽ xong, chọn "Chuyển sang mảng".

Bước 2.5: Thay thế các biểu tượng không cần thiết được xác định ở đầu mã "arduino_listening.ino" như mong muốn. Hãy nhớ thêm nhận xét mô tả biểu tượng để bạn nhớ đó là biểu tượng nào!

Bước 2.6: Tải mã mới lên Arduino. Đừng đóng tệp ngay, chúng tôi sẽ cần nó cho bước tiếp theo.

Bước 3: Chạy bộ phân loại và nhận dạng âm thanh

Chạy bộ phân loại và nhận dạng âm thanh
Chạy bộ phân loại và nhận dạng âm thanh
Chạy bộ phân loại và nhận dạng âm thanh
Chạy bộ phân loại và nhận dạng âm thanh

Bây giờ đã đến lúc đặt hệ thống lại với nhau. Quy trình phân loại, giao tiếp Arduino và thu âm thanh trực tiếp đều được thực hiện thông qua một sổ ghi chép Arduino duy nhất, đã được cung cấp tại đây hoặc có thể được truy cập thông qua kho lưu trữ GitHub của dự án của chúng tôi.

Bước 3.1: Sao chép sổ ghi chép FullPipeline.ipynb vào thư mục Sổ tay Jupyter đang hoạt động của bạn và mở nó.

Bước 3.2: Chạy từng ô một, chú ý đến bất kỳ ghi chú nào mà chúng tôi đã cung cấp trong các tiêu đề. Không có đầu ra được mong đợi. Dừng lại khi bạn đến ô có tiêu đề "Tải dữ liệu đào tạo".

Bước 3.3: Chỉnh sửa biến SAMPLES_LOCATION_ROOT trong ô "Tải Dữ liệu Đào tạo" vào thư mục mẹ của vị trí thư mục mẫu trước đó của bạn. Sau đó, thay đổi biến SAMPLES_DIR_NAME thành tên thư mục của bạn. Vì vậy, nếu bạn đã đặt vị trí trong CollectSamples.ipynb thành:

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

Bây giờ bạn sẽ đặt các biến này thành:

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

Chúng tôi đã làm điều này cho phép các thay đổi nhanh chóng đối với bộ phân loại trong trường hợp không chính xác. Bạn có thể chuyển đổi giữa các bộ sưu tập mẫu khác nhau để điều chỉnh dữ liệu của mình.

Bước 3.4: Đánh giá ô. Bạn sẽ thấy từng bộ sưu tập được tải thành công.

Bước 3.5: Tiếp tục chạy từng ô một, chú ý đến bất kỳ ghi chú nào mà chúng tôi đã cung cấp trong các tiêu đề.

Bước 3.6: Dừng lại khi bạn đến ô "Nhắn tin Arduino". Xác định cổng nối tiếp mà máy tính của bạn sẽ sử dụng để giao tiếp với Arduino trong biến PORT_DEF. Điều này có thể được tìm thấy trong Arduino IDE và đi tới Công cụ> Cổng.

Thông tin chi tiết có thể được tìm thấy ở đây.

Bước 3.8: Mở lại Arduino IDE của bạn. Ở những nơi bạn đã thực hiện thay đổi đối với các biểu tượng, hãy ghi chú chữ cái bên cạnh giá trị mảng, nhưng KHÔNG thay đổi nó. Trong ví dụ dưới đây, đây là "g".

// xử lý rácconst unsigned char 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,};

Bước 3.7: (Quay lại ô "Arduino Nhắn tin" của Máy tính xách tay) Thay đổi các nhãn trong từ điển self.sounds để khớp với các nhãn bạn đã sử dụng khi ghi các mẫu của mình, đảm bảo mỗi nhãn tương ứng với một chữ cái bạn đã lưu ý trong phần trước bươc chân. "Ghi" và "Nghe" đều là một phần của chức năng hệ thống cốt lõi và không nên thay đổi. KHÔNG thay đổi ký tự thứ hai trừ khi bạn cảm thấy tự tin trong việc thực hiện một vài thay đổi bổ sung đối với mã Arduino, vì nếu không, nó sẽ làm rối loạn giao tiếp với Arduino / ma trận.

Bước 3.8: Chạy chức năng chính! Mã sẽ lấy dữ liệu đào tạo, trích xuất các tính năng chính của nó, đưa chúng vào đường dẫn, xây dựng mô hình phân loại, sau đó bắt đầu lắng nghe các sự kiện âm thanh. Khi nó cảm nhận được một, bạn sẽ thấy ma trận thay đổi thành một biểu tượng ghi (hình vuông với hình tròn bên trong) và nó sẽ phân đoạn dữ liệu này và đưa nó vào mô hình. Bất cứ điều gì mô hình dự đoán sẽ hiển thị vài giây sau đó trên màn hình ma trận.

Bạn có thể theo dõi trong đầu ra của ô bên dưới. Hãy xem bạn có thể lấy nó chính xác như thế nào!

Bước 4: Tạo Nhà ở LEGO

Tạo nhà ở LEGO
Tạo nhà ở LEGO
Tạo nhà ở LEGO
Tạo nhà ở LEGO
Tạo nhà ở LEGO
Tạo nhà ở LEGO

Đây là phần thú vị! Bạn đã thực hiện tất cả các bước học máy nghiêm túc và thiết lập và chạy toàn bộ hệ thống đầu cuối và bây giờ bạn có thể chơi với LEGO như một phần thưởng. Không có nhiều quá trình để trình bày chi tiết ở đây. Chúng tôi chỉ thêm các khối mà chúng tôi thích ở đây và ở đó mà không cần lo lắng quá nhiều về thiết kế tổng thể và cuối cùng chúng tôi hài lòng với cách nó diễn ra.

Hãy để những bức ảnh của chúng tôi trở thành nguồn cảm hứng cho những tác phẩm sáng tạo độc đáo cho nhà bếp của bạn. Chúng tôi đặt Arduino và phần lớn hệ thống dây điện trong một hộp rỗng, sau đó cố định màn hình ma trận ở trên bằng các phần nhô ra. Chúng tôi đã thêm một chút giấy lên màn hình để khuếch tán ánh sáng nhẹ mà chúng tôi cảm thấy làm cho các biểu tượng rõ ràng hơn.

Đề xuất: