LoginSignup
0
1

ディープラーニングを活用したWorkingアシスタント (Raspberry pi Pico + Arducam)

Posted at

image.png

一人で仕事をしていると、ついサボったり、他のことをしたり、携帯を見たりして集中するのが難しい時がよくあります。
そんな時、誰かが私を監視して警告してくれたらと思うことが多いです。
だから、作ってみました!

ディープラーニングを活用したWorkingアシスタント!!
image.png

1. Project Overview

image.png

このプロジェクトでは、
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 IDECircuitPythonを使用して書かれました。

以前に作成した 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

image.png

YOLOv8 Model

YOLOvは強力な物体検出モデルです。今回使うYOLOはシリーズの最新バージョンです。
YOLOv8は高速かつ正確な動作を目指して設計され、同時に検出と分類に焦点を当てています。
image.png

このモデルは画像やビデオ内の複数のオブジェクトをリアルタイムで検出し、
分類する能力を持っており、多くのコンピュータビジョンタスクに非常に効果的です。

image.png

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)

image.png

モデル: 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

image.png
image.png

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1