ChatGPTでESP32上で機械学習済みデータを組み込む | 秋葉は外神田ですがなにか?

秋葉は外神田ですがなにか?

ガッチャマン背景だったものを、映画不振とは関係なく、
ふつーのCoolTypeに変更しました。
少しは文字が読みやすくなったのではないでしょうか?
・・・と、思ったけど、やっぱりガッチャマンにもどしました。2013.10.15
※トップページ放置確認w2021.Aug

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() {

  // 何もしない

}

 
 

上記のスケッチでは、次のステップを実行します。

  1. Wi-Fi接続を設定し、ESP32をインターネットに接続します。

  2. Audioライブラリを使用して、マイクから3秒間の音声を録音します。

  3. 録音された音声をSDカードに保存し、ファイルをEdge Impulseにアップロードします。

  4. Edge Impulseに対して推論をリクエストし、音声のテキスト化結果を取得します。

  5. 取得したテキストをシリアルモニターに表示します。

このスケッチでは、いくつかの外部ライブラリ(WiFi、Audio、Wire、SPI、SD、ArduinoHttpClient、Arduino_JSON)が使用されています。また、<YOUR_PROJECT_ID>をEdge ImpulseのプロジェクトIDに置き換える必要があります。

このスケッチをESP32にアップロードし、マイクロフォンをESP32に接続して実行すると、音声が録音され、Edge Impulseにアップロードされ、音声がテキスト化された結果がシリアルモニターに表示されます。

 

 

信じるか信じないかは貴方次第です