一人で仕事をしていると、ついサボったり、他のことをしたり、携帯を見たりして集中するのが難しい時がよくあります。
そんな時、誰かが私を監視して警告してくれたらと思うことが多いです。
だから、作ってみました!
1. Project Overview
このプロジェクトでは、
W5100S-EVB-PicoとArducam を使用して画像をWebアプリに送信し、
AIによるオブジェクト認識を通じて私の作業パターンを識別します。
Pico+ WIZnet w5100s、w5500 の組み合わせならどんな構成もOKです
このプロジェクトでは、Picoに接続されたカメラを使用して5秒ごとに画像をキャプチャし、
イーサネットを介して送信します。
送信された画像はFine-tuned YOLOv8モデルを使用してユーザーの作業状態に対する
オブジェクト検出を実行するために処理されます。
モデルは通常(Normal)、眠気(Drowsiness)、あくび(Yawning)、気晴らし(Distraction)、Mobile usage(モバイル使用)
の
5つのクラスを認識するようにトレーニングされています。
認識されたオブジェクトは作業パターンを分析するためにカウントされ、
その結果はWebインターフェースで送信および表示されます。
2. Code and Libraries
コードはThonny IDE
とCircuitPython
を使用して書かれました。
以前に作成した ChatGPT を使用したプロジェクトのハードウェア構成とコードを使用しました。
以前のプロジェクトの詳細については、以下のリンクを参照してください。
https://maker.wiznet.io/Benjamin/projects/upscaling-image-with-ai-using-w5100s-evb-pico-and-arducam/
リポジトリからlibフォルダ、boot_out.txt、およびcode.pyファイルをW5100S-EVB-PICO
に
コピーし、code.py
を実行します。
CircuitPythonライブラリのバージョン7.xのバンドルを使用し、
Adafruit_CircuitPython_wiznet5kライブラリには1.12.15リリースバージョンを使用しました。
Download links:
• CircuitPython Libraries: https://circuitpython.org/libraries
• ArduCAM PICO_SPI_CAM Python: https://github.com/ArduCAM/PICO_SPI_CAM/tree/master/Python
• Adafruit_CircuitPython_Wiznet5k 1_12_15: https://github.com/adafruit/Adafruit_CircuitPython_Wiznet5k/releases/tag/1.12.15
ArduCam OV2640モジュールには SPI 接続用のCS、MOSI、MISO、SCLKピン、
および I2C 接続用のSDA、SCLピンが必要です。
このプロジェクトではArduCamのソースコードを SPI1 を使用するように変更しました。
3. HW configure
このプロジェクトではSPI1を使用
ArduCam OV2640用SPI1の設定:
- CS --> GPIO 13
- MOSI --> GPIO 11
- MISO --> GPIO 12
- SCLK --> GPIO 10
ArduCam OV2640のI2C設定:
- SDA --> GPIO 8
- SCL --> GPIO 9
4. YOLOv8 Model Training
YOLOv8 Model
YOLOvは強力な物体検出モデルです。今回使うYOLOはシリーズの最新バージョンです。
YOLOv8
は高速かつ正確な動作を目指して設計され、同時に検出と分類に焦点を当てています。
このモデルは画像やビデオ内の複数のオブジェクトをリアルタイムで検出し、
分類する能力を持っており、多くのコンピュータビジョンタスクに非常に効果的です。
Nano Model
Nanoモデルは標準モデルのより小さく、高速なバージョンです。
効率性を重視して設計されており、より少ない計算リソースで高速に動作できるため、
計算能力が限られたモ バイルデバイスや組み込みシステム などに展開するのに理想的です
Usage
プロジェクトでこれらのモデルを使用するには、
次のコマンドを使用してPython>=3.8
環境にPyTorch>=1.7
とともに
Ultralyticsパッケージ
をインストールできます
pip install ultralytics
Dataset: Roboflow Project(https://universe.roboflow.com/project-q3daq/working-0iym3)
モデル: UltralyticsのYOLOv8 Nano(高速かつ小型)
mAP50: 0.857、mAP50-95: 0.498。
Google Colabが提供する無料のGPUを利用しました。
Google Colab Notebook: https://colab.research.google.com/drive/1NStVVPItzzwoeldfsPJ-geZATkirvg2z?usp=sharing
5. Inference to Web
Setup: スクリプトは最初にFlaskアプリケーションを設定し、いくつかのグローバル変数を定義します。
url
は画像を取得するURLです。
save_dir
は取得した画像が保存されるディレクトリです。
inference_dir
は後の画像が保存されるディレクトリです。
results
は異なるオブジェクト検出結果のカウントを追跡する辞書です。
fetch_image_and_inference(): この関数は無限ループ内で実行されます。
各イテレーションでは、URLから画像を取得し、それをsave_dir
に保存し、
画像上でYOLOオブジェクト検出モデルを実行し、モデルの出力に基づいてresults辞書を更新します。
その後、次のイテレーションを開始する前に10秒間待機します。
serve_image(): これはFlaskのルートで、HTMLページを提供します。
ページには最新の推論画像を表示する画像要素と、
異なるオブジェクト検出結果のカウントを表示する複数の段落要素が含まれています。
ページは10秒ごとに更新されます。
get_inferred_image(): これは最新の推論画像を提供する別のFlaskのルートです。
画像はinference_dir
から取得されます。
Main Execution: スクリプトがメインプログラムとして実行される場合、
新しいスレッドでfetch_image_and_inference()
関数を開始し、
次にFlaskアプリケーションを開始します。
6. Original Link
元の記事と詳細は下記ページでご確認ください(英語です)
https://github.com/wiznetmaker/W5100S-EVB-PICO-WORKINGASSISTANT