投稿の背景
Edge ImpulseでM5stack ESP32CAM-PSRAMを使用しようと検証を行っていました。その時行ったことを備忘録としてメモします。
結論から先に話してしまうと、Edge Impulse上でM5stack ESP32CAM-PSRAMを認識してくれませんでした(2024年4月6日)。現時点ではこの検証は成功していないのですが、次にEdge Impulseへの接続を飛ばして機械学習モデルの書き込みを行うつもりなのでこの検証自体は終わっていないというのと、この時失敗した流れについて忘れずにメモしておきたいと考えこの記事の投稿をしました。
この検証の狙い
この検証の最終ゴールは以下のことをM5stack ESP32CAM-PSRAMで実現しようと考えています。
- カメラに映った製品の判別
- 設備の稼働状況について正常と異常の画像を学習させ、カメラ撮影で異常状態を検知する
検証に至るまでの経緯
Edge Impulseの調査を行っていると、以下のサイトにてESP-EYE (ESP32)との接続チュートリアルのページを見つけました。
https://docs.edgeimpulse.com/docs/edge-ai-hardware/mcu/espressif-esp32
早速サイトを参考に検証しようと考えたのですが、Espressif製のESP-EYEがアマゾンにありませんでした。別のブランド名Freenove等であればあったのですが、異なるブランドのものでうまくいくか不明でしたので悩んでいたところ、先ほどのチュートリアルページの”Using with other ESP32 boards”という項目でM5stack製のカメラが記載されていました。
M5stack社製のマイコンであれば何度かプログラミングした経験があったため、今回はM5stack製のESP32CAMを用いて検証することに決めました。
使用したもの
今回は以下のカメラを使用しました。
M5Stack ESP32CAM-PSRAM 魚眼レンズカメラモジュール (OV2640)
|
検証の詳細
ここでは以下のESP-EYE (ESP32)との接続チュートリアルのページをもとに行ってきた手順を説明します(2024年4月6日時点)。
https://docs.edgeimpulse.com/docs/edge-ai-hardware/mcu/espressif-esp32
1 Edge ImpulseにESP32CAMを認識させるまでの手順をひと通り実行
- “Installing dependencies”の項目の1番のEdge Impulse CLIのリンク先をクリックします。別ページに移動します。
- 移動した先のページで”Installation – Windows”の項目を参照します。
- “Create an Edge Impulse account”からEdge Impulseの新規登録を行います(アカウント持っていない場合)。
- “Install Python 3 on your host computer”からPythonのサイトに移動できますので、”Download”タブから最新のPythonをダウンロードします(投稿時点ではver3.12.2でした)。その後ダウンロードしたexeファイルを実行し、インストールを行います。
- Pythonのインストールが完了したら、”Installation – Windows”の項目の”Install Node.js v16 or above on your host computer”からNode.jsのダウンロードページに移動し、(LTS)と書かれた方のバージョンをダウンロードします。この時ダウンロードしたものはv20.12.1であり、最新版はv21.7.2でした。なぜ最新版ではないのかは後ほど説明します。
- 以下のコマンドをコマンドプロンプト(cd..で階層をc:まで上げてから実行)で入力しCLI tools viaをダウンロードする。
「npm install -g edge-impulse-cli –force」
(備忘録ポイント)ここで以下のエラーが発生しました。
npm ERR! gyp ERR! find VS *******
↑以外のエラーも出ていたが一番多かったのが’npm ERR! gyp ERR! find VS’から始まるエラーだった。
調べた限りVSがMicrosoft Visual Studioのことかと予想。私のPCにはVisual stadioが入っていないためそれが原因かと考えました。
- 以下のリンク先からMicrosoft Visual Studioをダウンロード。無料版でかまいません。
https://visualstudio.microsoft.com/ja/downloads/
ログインに使用したアカウントはMicrosoftのアカウントを使用しました(私が所有しているPCはすべてOSがWindowsでありMicrosoftのアカウントを所持していたためです)。
- Visual Studioのダウンロードが完了し再度6番を実施するとエラーなく完了しました。
- ESP-EYE (ESP32)との接続チュートリアルのページの”Installing dependencies”の項目に戻る。3 ESP Toolはとりあえず無視。4はLinuxでないので無視。
- ‘Connecting to Edge Impulse’の項目に移る。
- M5stackのESP32CAM-PSRAMをパソコンに接続。
- “2. Update the firmware”の”Download the latest Edge Impulse firmware, and unzip the file.”のリンク先をクリックしてzipファイルをダウンロードする。
- ダウンロードされたzipファイルを解凍し、”flash_windows”をダブルクリックしアップデートを実行。
- コマンドプロンプトで「edge-impulse-daemon」を入力し実行。
- edge impulseで登録したメールアドレスとパスワードを聞かれるので、登録したメールアドレスとパスワードを入力。パスワードは入力しても画面表示されないため注意する。
- ここまでを実行するとedge impulse上でESP32-CAMマイコンを認識しedge impulseの自分のプロジェクトページのdevices欄に表示される、、、らしいですが、私の場合コマンドプロンプトの実行時点でtimeouterrorがずっと出ている状態で進みません。
2 試行錯誤
timeoutが表示されESP32CAMERAと接続できないエラーが発生したため、この後いろいろと試行錯誤しました。
まずUSBドライバのインストールを疑い以下を実行
M5stackの公式HPの以下のリンク先にアクセス
https://docs.m5stack.com/en/download
CP210x_VCP_Windowsをダウンロードし、CP210xVCPInstaller_x64_v6.7.0.0を実行しました。
その後上記14番の”コマンドプロンプトで””edge-impulse-daemon”を入力し実行”を行いましたが変わらずtimeouterrorのままです。
9番でesptoolインストールを無視したのが悪かったのではないか?
今回は上記9番の“Installing dependencies”の項目の”3. ESP Tool”の項目で”The ESP documentation website has instructions for macOS and Linux.”のリンク先を参考にしましたが、ここでのやり方はmacOSやLinux用でしたので、windowsでもできるようにアレンジしました。
コマンドプロンプトでcd..を連続し最上位層へ移動し以下のコマンドを順番に実行
「py -m pip install esptool」
(「pip install esptool」ではコマンドプロンプトでもPythonのターミナルでも機能しなかったためコマンドの文章を変えました)
「py -m pip install –upgrade esptool」
(こちらも「pip install –upgrade esptool」では機能しないため、上のコマンドをもとに改造)
「py -m esptool -p COM6 flash_id」
(「esptool.py -p PORT flash_id」では機能しないため、上のコマンドをもとに改造。参考サイトと異なり、PORT*ではなくCOM*となることに注意。COM*の値は事前にESP-CAMを接続しデバイスマネージャーで確認しておく。)
ここまででESP Toolのダウンロードが完了したものと思われます。しかしその後”edge-impulse-daemon”を実行してもtimeouterrorのままです。
‘DeprecationWarning: The punycode module is deprecated’を解決
“edge-impulse-daemon”を実行時に毎回”DeprecationWarning: The punycode module is deprecated”という警告文が出ていました。その後edge impulseのアカウント情報の入力工程に移れるため気にしていませんでしたが、これが原因と思い改善を実施しました。
調べてみるとこのpunycodeに関する警告というのはnodeのバージョンが21(最新)だと発生するようです。よってバージョン20にダウングレードするためにnodeを一度アンインストールし、再度バージョン20のものをインストールしました。
その後6番のCLI tools viaダウンロードと13番のfirmwareアップデートを再実施し、14番の”edge-impulse-daemon”を実行しました。上記警告は出なくなりました。がtimeouterrorは治らない、ダメでした。
原因の考察
1 使用したM5Stack製ESP32CAMがEdge Impulseサイト内で言及されていない
そもそもの話なのですが、、、私が選定したM5Stack ESP32CAM-PSRAM 魚眼レンズカメラモジュール (OV2640)がEdge Impulseサイトのチュートリアルページで言及されていないものでした。(Espressif製がなく、他社製や互換性では不安があったからHP上で記載のあったM5stack製を選んだのは何だったのか、、、。)なぜ素直にHPに記載されていたものと同じものを選択しなかったのかというと、単に安かったからです。Timer Camera Xはカバーでおおわれている分、基盤むき出しのESP32CAM-PSRAMのほうが数百円くらい安かったので、使っている回路が(たぶん)一緒なら問題ないだろうと考え、そちらを選択してしまいました。Edge ImpulseのHelpページを検索すると、M5Stack ESP32CAM-PSRAMでの立ち上げ方法について質問するページがいくつかあったのですが、そのどれも解決に至ったとの返答が見当たりませんでした。もしかすると選定した製品ではできない可能性も捨てきれません。
正直に反省します、”安物買いの銭失い”でした。
2 M5stack製カメラでは本家(Espressif製)と使用感が違う?
チュートリアルサイトで言及のあった”Using with other ESP32 boards”の項目では『ESP32をベースにした他のカメラ対応開発ボードがあり、特定の変更を適用した後にEdge Impulseファームウェアを使用できます。』(←Edge Impulseのチュートリアルサイトは英語で記載されているため、翻訳サイトにて翻訳した結果です)という記載がありました。その後それぞれのマイコンに合わせた変更方法などの記載はされており、そちらについても実行したはずですが本家とは違う設定や使い方があるのかもしれません。
チュートリアルの説明文もあくまでEspressif製のESP-EYEを前提とした説明文ですので、ちゃんとTimer Camera Xを使用していたとしてもうまくいかない可能性も0ではないです。
ちなみに使用したM5stackのESP32CAMは不良品などではなくちゃんと使用できるものでした。サンプルプログラムのCameraWebServerというプログラムを入れて実行したところ、ちゃんとwebブラウザ上でカメラ映像の取得ができました。ここも嵌ったところがあるためいつかこの時のプログラムについても投稿しようと思います。
今後の流れ
とりあえずEdge ImpluseでM5stack社製のESP32CAMを使うプロジェクトは続けていくつもりです。次はEdge Impulse上で機械モデルを作成し、それをC++に変換+Arduino IDEを通してESP32CAMに書き込むことを実施するつもりです。ただしRaspberry Pi 4Bを用いたチュートリアルもEdge ImpulseのHPに記載があったため、先にそっちの実現に挑戦します。
ここまで長々とできない流れを書きてしまいましたが私の備忘録目的のほかに、ここで記載した知識がほかの人にも役に立てれば幸いです。