ESP32に音声認識モデルをデプロイし、音声をテキスト化するためのスケッチの例を示します。
このスケッチは、Edge ImpulseのWebコンソールで生成されたコードをベースにしています。
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoHttpClient.h>
#include <Arduino_JSON.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <config.h>
#define RECORD_TIME_MS 3000
WiFiClientSecure client;
HttpClient http(client, EDGE_IMPULSE_HOST, EDGE_IMPULSE_PORT);
void setup() {
Serial.begin(115200);
delay(4000); // 初期化に時間がかかるため適宜調整
Audio.begin(8000, 16); // サンプリングレートとビット深度に合わせて設定
// Wi-Fi接続
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
if (!SD.begin()) {
Serial.println("Failed to mount SD card");
return;
}
Serial.println("SD card mounted");
if (!Audio.startRecording("/sdcard/recording.wav", 8000, 16)) {
Serial.println("Failed to start recording");
return;
}
Serial.println("Recording...");
delay(RECORD_TIME_MS);
Audio.stopRecording();
Serial.println("Recording stopped");
if (!SD.exists("/sdcard/recording.wav")) {
Serial.println("Recording not found");
return;
}
Serial.println("Recording found");
File file = SD.open("/sdcard/recording.wav");
if (!file) {
Serial.println("Failed to open recording");
return;
}
Serial.println("Recording opened");
if (!http.connect()) {
Serial.println("Failed to connect to Edge Impulse");
return;
}
Serial.println("Connected to Edge Impulse");
http.put("/api/<YOUR_PROJECT_ID>/raw", file, "audio/wav");
file.close();
Serial.println("Recording uploaded");
if (!http.get("/api/<YOUR_PROJECT_ID>/inference")) {
Serial.println("Failed to get inference");
return;
}
String response = http.responseBody();
Serial.println("Inference received");
JSONVar json = JSON.parse(response);
String result = json["result"];
Serial.print("Inference result: ");
Serial.println(result);
}
void loop() {
// 何もしない
}
上記のスケッチでは、次のステップを実行します。
-
Wi-Fi接続を設定し、ESP32をインターネットに接続します。
-
Audioライブラリを使用して、マイクから3秒間の音声を録音します。
-
録音された音声をSDカードに保存し、ファイルをEdge Impulseにアップロードします。
-
Edge Impulseに対して推論をリクエストし、音声のテキスト化結果を取得します。
-
取得したテキストをシリアルモニターに表示します。
このスケッチでは、いくつかの外部ライブラリ(WiFi、Audio、Wire、SPI、SD、ArduinoHttpClient、Arduino_JSON)が使用されています。また、<YOUR_PROJECT_ID>
をEdge ImpulseのプロジェクトIDに置き換える必要があります。
このスケッチをESP32にアップロードし、マイクロフォンをESP32に接続して実行すると、音声が録音され、Edge Impulseにアップロードされ、音声がテキスト化された結果がシリアルモニターに表示されます。
信じるか信じないかは貴方次第です