- Thành phần bắt buộc
- Sơ đồ mạch
- Tạo tập dữ liệu cho máy phát hiện ho
- Đào tạo mô hình và tinh chỉnh mã
COVID19 thực sự là một đại dịch lịch sử ảnh hưởng rất xấu đến toàn thế giới và người ta đang chế tạo rất nhiều thiết bị mới để chống chọi với nó. Chúng tôi cũng đã chế tạo một máy khử trùng tự động và Súng nhiệt để kiểm tra nhiệt độ không tiếp xúc. Hôm nay chúng ta sẽ chế tạo thêm một thiết bị để giúp chống lại Coronavirus. Đây là một hệ thống phát hiện ho, có thể phân biệt giữa tiếng ồn và âm thanh ho và có thể giúp tìm ra nghi phạm Corona. Nó sẽ sử dụng các kỹ thuật máy học cho việc đó.
Trong hướng dẫn này, chúng ta sẽ xây dựng một hệ thống Phát hiện Ho bằng Arduino 33 BLE Sense và Edge Impulse Studio. Nó có thể phân biệt giữa tiếng ồn nền bình thường và tiếng ho trong âm thanh thời gian thực. Chúng tôi đã sử dụng Edge Impulse Studio để đào tạo tập dữ liệu về các mẫu tiếng ho và tiếng ồn xung quanh, đồng thời xây dựng một mô hình TInyML được tối ưu hóa cao, có thể phát hiện ra tiếng Ho trong thời gian thực.
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 để phát hiện cơn ho bằng Arduino 33 BLE Sense được đưa ra bên dưới. 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ó cùng một chân cắm.
Dây dẫn dương của đèn LED được kết nối với chân số 4 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 cho máy phát hiện ho
Như đã đề cập trước đó, chúng tôi đang sử dụng Edge Impulse Studio để đào tạo mô hình phát hiện ho của mình. Để làm được điều đó, chúng tôi phải 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 trên Arduino của mình. Vì mục đích là để phát hiện tiếng ho, bạn sẽ cần thu thập một số mẫu của nó và một số mẫu khác để tìm tiếng ồn, để có thể phân biệt giữa tiếng Ho và tiếng ồn khác.
Chúng ta sẽ tạo một tập dữ liệu với hai lớp “ho” 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. Để làm được điều đó, bạn phải kết nối điện thoại di động của mình với Edge Impulse.
Để kết nối điện thoại di động của bạn, 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 bằng Google Ống kính hoặc ứng dụng quét mã QR khác.
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' , để bắt đầu lấy mẫu 40 giây. Thay vì ép mình ho, bạn có thể sử dụng các mẫu ho trực tuyến có độ dài khác nhau. Ghi lại tổng số 10 đến 12 mẫu ho có độ dài khác nhau.
Sau khi tải lên các mẫu tiếng ồn, bây giờ hãy đặt nhãn thành 'tiếng ồn' và thu thập 10 đến 12 mẫu tiếng ồn khác.
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 3 mẫu 'tiếng ồn' và 4 đến 5 mẫu 'tiếng ho'.
Thay vì thu thập dữ liệu của mình, bạn có thể nhập tập dữ liệu của chúng tôi vào tài khoản Edge Impulse của mình bằng Trình tải lên Edge Impulse CLI.
Để cài đặt Trình tải lên CLI, trước tiên, hãy tải xuống và cài đặt Node.js trên máy tính xách tay của bạn. Sau đó, mở dấu nhắc lệnh và nhập lệnh dưới đây:
npm install -g edge-xung-cli
Bây giờ tải xuống tập dữ liệu (Dataset Link) và giải nén tệp trong thư mục dự án của bạn. Mở dấu nhắc lệnh và điều hướng đến vị trí tập dữ liệu và chạy các lệnh dưới đây:
edge-xung-uploader --clean edge-xung-uploader --category training training / *. json edge-xung-uploader --category training training / *. cbor edge-xung-uploader --category testing testing / *. json edge-xung-uploader - kiểm tra thử nghiệm danh mục / *. cbor
Đào tạo mô hình và tinh chỉnh mã
Khi tập dữ liệu đã sẵn sàng, bây giờ chúng ta sẽ 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 '.
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 Âm thanh (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à 96,5% và tổn thất là 0,10, điều đó rất tốt để tiếp tục.
Bây giờ khi mô hình phát hiện ho 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 '.
Đi tới 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. Để làm điều đó, hãy mở Arduino IDE và sau đó nhấp vào Sketch> 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.
Chúng tôi sẽ thực hiện một số thay đổi trong mã để có thể phát ra âm thanh cảnh báo khi Arduino phát hiện ra tiếng ho. Do đó, một bộ rung được giao tiếp với Arduino và bất cứ khi nào nó phát hiện ra tiếng ho, đèn LED sẽ nhấp nháy ba lần.
Các thay đổi được thực hiện trong các hàm void loop () nơi nó đang in các giá trị nhiễu và ho. Trong mã gốc, nó đang in 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); }
Chúng tôi sẽ lưu cả giá trị nhiễu và ho trong các biến khác nhau và so sánh các giá trị nhiễu. Nếu giá trị tiếng ồn dưới 0,50 có nghĩa là giá trị ho lớn hơn 0,50 và nó sẽ tạo ra âm thanh. Thay thế mã for loop () ban đầu bằng mã này:
for (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Dữ liệu <0,50) {Serial.print ("Phát hiện Ho"); báo thức(); }}
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.
Vì vậy, đây là cách một máy phát hiện ho có thể được chế tạo, nó không phải là một phương pháp hiệu quả để tìm bất kỳ nghi ngờ COVID19 nào nhưng nó có thể hoạt động tốt ở một số khu vực đông đúc.
Dưới đây là một video làm việc hoàn chỉnh với thư viện và mã: