- Thành phần bắt buộc
- Sơ đồ mạch
- Tạo tập dữ liệu để nhận dạng giọng nói Arduino
- Đào tạo người mẫu
- Mã Arduino để nhận dạng giọng nói Arduino
Công nghệ nhận dạng giọng nói rất hữu ích trong tự động hóa, không chỉ giúp bạn kiểm soát các thiết bị rảnh tay mà còn tăng cường bảo mật cho hệ thống. Ngoài việc tạo ra các tiện ích được điều khiển bằng giọng nói, nhận dạng giọng nói cũng mang lại sự trợ giúp đáng kể cho những người bị khuyết tật khác nhau.
Trong các dự án trước, chúng tôi đã xây dựng Bộ chuyển đổi văn bản thành giọng nói (TTS) dựa trên Arduino và đèn điều khiển bằng giọng nói. Bây giờ trong dự án này, chúng ta sẽ sử dụng máy học để đào tạo mô hình nhận dạng giọng nói bằng Edge Impulse Studio với ba lệnh: ' LIGHT ON' , ' LIGHT OFF' và ' NOISE '. Edge Impulse là một nền tảng máy học trực tuyến cho phép các nhà phát triển tạo ra thế hệ giải pháp thiết bị thông minh tiếp theo với Máy học được nhúng. Trước đây, chúng tôi đã sử dụng Edgeclock studio để phân biệt tiếng ho và tiếng ồn.
Thành phần bắt buộc
Phần cứng
- Arduino 33 BLE Sense
- Đèn LED
- Dây nhảy
Phần mềm
- Edge Impulse Studio
- Arduino IDE
Chúng tôi đã trình bày một hướng dẫn chi tiết về Arduino 33 BLE Sense.
Sơ đồ mạch
Sơ đồ mạch cho nhận dạng giọng nói này bằng Arduino được đưa ra dưới đây. Phần Fritzing cho Arduino 33 BLE không có sẵn, vì vậy tôi đã sử dụng Arduino Nano vì cả hai đều có sơ đồ chân giống nhau.
Dây dẫn dương của đèn LED được kết nối với chân số 5 của Arduino 33 BLE sense và Dây dẫn âm được kết nối với chân GND của Arduino.
Tạo tập dữ liệu để nhận dạng giọng nói Arduino
Tại đây Edge Impulse Studio được sử dụng để đào tạo mô hình Nhận dạng giọng nói của chúng tôi. Đào tạo mô hình trên Edge Impulse Studio tương tự như đào tạo mô hình học máy trên các khuôn khổ học máy khác. Để đào tạo, bước đầu tiên của mô hình học máy là thu thập một tập dữ liệu có các mẫu dữ liệu mà chúng tôi muốn có thể nhận ra.
Vì mục tiêu của chúng tôi là điều khiển đèn LED bằng lệnh thoại, chúng tôi sẽ cần thu thập các mẫu giọng nói cho tất cả các lệnh và tiếng ồn để nó có thể phân biệt giữa lệnh thoại và các tiếng ồn khác.
Chúng tôi sẽ tạo một tập dữ liệu với ba lớp “ LED ON ”, “ LED OFF ” và “ nhiễu ”. Để tạo tập dữ liệu, hãy tạo tài khoản Edge Impulse, xác minh tài khoản của bạn và sau đó bắt đầu một dự án mới. Bạn có thể tải các mẫu bằng cách sử dụng điện thoại di động, bảng Arduino của mình hoặc bạn có thể nhập tập dữ liệu vào tài khoản xung cạnh của mình. Cách dễ nhất để tải các mẫu vào tài khoản của bạn là sử dụng điện thoại di động của bạn. Để kết nối điện thoại di động với Edge Impulse.
Để kết nối Điện thoại di động, hãy nhấp vào ' Thiết bị ' và sau đó nhấp vào ' Kết nối thiết bị mới' .
Bây giờ trong cửa sổ tiếp theo, hãy nhấp vào 'Sử dụng điện thoại di động của bạn' và mã QR sẽ xuất hiện. Quét mã QR bằng Điện thoại di động của bạn hoặc nhập URL được cung cấp trên mã QR.
Thao tác này sẽ kết nối điện thoại của bạn với Edge Impulse studio.
Với điện thoại của bạn được kết nối với Edge Impulse Studio, bây giờ bạn có thể tải các mẫu của mình. Để tải các mẫu, hãy nhấp vào ' Thu thập dữ liệu' . Bây giờ trên trang Thu thập dữ liệu, hãy nhập tên nhãn, chọn micrô làm cảm biến và nhập độ dài mẫu. Nhấp vào ' Bắt đầu lấy mẫu' , thiết bị của bạn sẽ chụp một mẫu 2 giây. Ghi âm tổng cộng 10 đến 12 mẫu giọng nói trong các điều kiện khác nhau.
Sau khi tải lên các mẫu cho lớp đầu tiên, hãy đặt nhãn thay đổi và thu thập các mẫu cho lớp ' tắt đèn' và 'tiếng ồn' .
Các mẫu này dành cho Đào tạo mô-đun, trong các bước tiếp theo, chúng tôi sẽ thu thập Dữ liệu kiểm tra. Dữ liệu kiểm tra phải có ít nhất 30% dữ liệu huấn luyện, vì vậy hãy thu thập 4 mẫu 'tiếng ồn' và 4 đến 5 mẫu cho 'bật sáng' và 'tắt đèn'.
Đào tạo người mẫu
Khi tập dữ liệu của chúng tôi đã sẵn sàng, bây giờ chúng tôi có thể tạo xung lực cho dữ liệu. Đối với điều đó, hãy truy cập trang ' Tạo xung lực '. Thay đổi cài đặt mặc định của kích thước Cửa sổ 1000 ms thành 1200ms và Cửa sổ 500 ms tăng lên 50ms. Điều này có nghĩa là dữ liệu của chúng tôi sẽ được xử lý 1,2 giây mỗi lần, bắt đầu sau 58 mili giây.
Bây giờ trên trang ' Tạo xung lực', hãy nhấp vào ' Thêm khối xử lý' . Trong cửa sổ tiếp theo, chọn khối Audio (MFCC). Sau đó nhấp vào ' Thêm khối học tập' và chọn khối Mạng thần kinh (Keras). Sau đó nhấp vào ' Lưu xung lực' .
Trong bước tiếp theo, truy cập trang MFCC và sau đó nhấp vào 'Tạo tính năng'. Nó sẽ tạo ra các khối MFCC cho tất cả các cửa sổ âm thanh của chúng ta.
Sau đó, truy cập trang ' NN Classifier' và nhấp vào ba dấu chấm ở góc trên bên phải của ' Cài đặt mạng thần kinh' và chọn ' Chuyển sang chế độ Keras (chuyên gia)' .
Thay thế mã gốc bằng mã sau và thay đổi ' Xếp hạng độ tin cậy tối thiểu' thành ' 0,70' . Sau đó nhấp vào nút ' Bắt đầu đào tạo' . Nó sẽ bắt đầu đào tạo mô hình của bạn.
nhập tensorflow dưới dạng tf từ tensorflow.keras.models nhập Tuần tự từ tensorflow.keras.layers nhập Mật độ, InputLayer, Dropout, Làm phẳng, Định hình lại, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D từ tensorflow.keras.optimizers nhập Adam.consortraflowskeras import 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 = '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 (các lớp, kích hoạt = 'softmax', name = 'y_pred', kernel_constraint = MaxNorm (3))) # điều này kiểm soát tốc độ học = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # đào tạo mô hình mạng nơron.compile (loss = 'categorical_crossentropy', Optimizer = 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)
Sau khi đào tạo mô hình, nó sẽ hiển thị hiệu suất đào tạo. Đối với tôi, độ chính xác là 81,1% và tổn thất là 0,45, đây không phải là hiệu suất lý tưởng nhưng chúng ta có thể tiếp tục. Bạn có thể tăng hiệu suất của mô hình bằng cách tạo một tập dữ liệu lớn.
Bây giờ khi mô hình Nhận dạng giọng nói của chúng tôi đã sẵn sàng, chúng tôi sẽ triển khai mô hình này dưới dạng thư viện Arduino. Trước khi tải xuống mô hình dưới dạng thư viện, bạn có thể kiểm tra hiệu suất bằng cách truy cập trang ' Phân loại trực tiếp' . Tính năng phân loại Trực tiếp cho phép bạn kiểm tra mô hình bằng cả dữ liệu thử nghiệm hiện có đi kèm với tập dữ liệu hoặc bằng cách truyền dữ liệu âm thanh từ điện thoại di động của bạn.
Để kiểm tra dữ liệu bằng điện thoại của bạn, hãy chọn ' Chuyển sang Chế độ phân loại' trên điện thoại của bạn.
Bây giờ để tải xuống mô hình dưới dạng Thư viện Arduino, hãy truy cập trang ' Triển khai ' và chọn ' Thư viện Arduino' . Bây giờ cuộn xuống và nhấp vào ' Xây dựng ' để bắt đầu quá trình. Điều này sẽ xây dựng một thư viện Arduino cho dự án của bạn.
Bây giờ hãy thêm thư viện trong IDE Arduino của bạn. Đối với điều đó, hãy mở Arduino IDE và sau đó nhấp vào Phác thảo> Bao gồm Thư viện> Thư viện Add.ZIP
Sau đó, tải một ví dụ bằng cách đi tới Tệp> Ví dụ> Tên dự án của bạn - Edge Impulse> nano_ble33_sense_microphone
Mã Arduino để nhận dạng giọng nói Arduino
Ở đây, một số thay đổi đã được thực hiện để điều khiển đèn LED bằng lệnh thoại.
Chúng tôi đang thực hiện một số thay đổi trong vòng lặp void () nơi nó đang in xác suất của các lệnh. Trong mã gốc, nó đang in tất cả các nhãn và giá trị của chúng cùng nhau.
for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Để điều khiển đèn LED, chúng ta phải lưu tất cả các xác suất lệnh trong ba biến khác nhau để chúng ta có thể đặt các câu lệnh điều kiện vào chúng. Vì vậy, theo mã mới nếu xác suất của lệnh " sáng" lớn hơn 0,50 thì đèn LED sẽ bật và nếu xác suất lệnh "tắt đèn" lớn hơn 0,50 thì đèn LED sẽ tắt.
for (size_t ix = 2; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {noise = result.classification.value; Serial.println ("Nhieu:"); Serial.println (nhiễu); } for (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix--) {lightoff = result.classification.value; Serial.println ("Tắt đèn:"); Serial.print (tắt đèn); } lighton = 1- (nhiễu + tắt); Serial.println ("Đèn BẬT:"); Serial.print (đèn chiếu sáng); if (lighton> 0,50) {digitalWrite (led, HIGH); } if (lightoff> 0.50) {digitalWrite (led, LOW); }
Sau khi thực hiện các thay đổi, hãy tải mã lên Arduino của bạn. Mở màn hình nối tiếp ở 115200 baud.
Đây là cách bạn có thể xây dựng tính năng nhận dạng giọng nói bằng Arduino và đưa ra các lệnh để vận hành thiết bị.
Dưới đây là một video làm việc hoàn chỉnh với một thư viện và mã.