Raspberry Piで手書き数字認識:TensorFlowとOpenCVを用いたディープラーニング実装
手書き数字を文字起こしする深層畳み込みニューラルネットワークを訓練し、Raspberry Piカメラ、OpenCV、TensorFlowを用いてPi上でリアルタイム推論を行う手順を解説します。
概要
このプロジェクトでは、データ準備とモデル訓練をノートPCで行い、Piカメラでリアルタイム数字認識を行うまでのAIパイプライン全体を歩みます。画像操作にはScikit-LearnとOpenCV 3.3を、深層学習にはKeras(TensorFlowバックエンド)を使用します。
MNISTデータセット(28×28ピクセルのグレースケール数字画像:訓練6万枚、テスト1万枚)を用います。Piカメラで撮影した画像は、このフォーマットに合わせて前処理されてから学習済みネットワークに入力されます。
ネットワーク構成は、標準的な畳み込み層スタックに続き、0〜9の各数字を表す10ニューロンの全結合出力層で構成されます。
モデル訓練後、重みをRaspberry Piに転送します。軽量なPythonスクリプトがフレームを取得し、グレースケール変換、閾値処理、リサイズ、反転を行ってから推論を実行します。
ハードウェアセットアップ
デモでは、Piカメラを簡易ホルダー(手持ちリグ)に固定し、単一の数字にピントを合わせました。実用では、固定マウントや小型ケースを用いると安定性が向上します。
ソフトウェアインストール
Pi上でPython仮想環境を作成し、必要なライブラリをインストールします。以下のコマンドは、Raspberry Pi OSとPython 3.7以上が動作していることを前提としています。
source ~/.profile workon cv python PiCameraApp.py --picamera 1
TensorFlowのインストール
pip install tensorflow
Kerasのインストール
pip install keras
OpenCV 3.3のインストール
Piで完全な最適化を有効にするには、OpenCVをソースからビルドする必要があります。手順はPyImageSearchで公開されています。
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
最後に、NumPy最適化付きのPiCameraライブラリをインストールします:
pip install "picamera[array]"
モデル訓練
訓練スクリプトをノートPC(GPU搭載推奨)で実行します。スクリプトはKerasでCNNを定義し、コンパイル、MNISTデータで訓練、性能検証を行い、重みをmodel_weights.h5として保存します。
python Train_MNIST.py
NVIDIA GPUをお持ちの場合は、GPU対応TensorFlowとCUDAドライバをインストールすると訓練が高速化されます。GPUがなくても完遂可能ですが、時間がかかります。
訓練後、model_weights.h5をscpやWinSCPでPiに転送します。
リアルタイム数字認識
Pi上で認識スクリプトを起動します。tキーでフレーム取得、qキーで終了します。精度は照明、角度、筆跡の鮮明さに大きく依存します。クリーンで高コントラストな数字では95%以上の精度が典型的です。
画像前処理パイプライン
- RGBフレームをNumPy配列として取得
- グレースケール変換(2色チャネルを削除)
- ピクセル値を8ビット無符号整数(0〜255)にスケーリング
- 大津の二値化でクリーンな白黒画像を取得
- 28×28ピクセルにリサイズ(MNIST入力形状)
- 色反転:数字を白、背景を黒に(訓練データと合わせる)
- フラット化して学習済みモデルに入力
モデルは長さ10の確率ベクトルを出力し、最大確率のインデックスが予測数字となります。
重要なポイント
この例は、データ準備、モデル訓練、デプロイ、シングルボードコンピュータ上での推論までを一貫して示しています。コードはGitHubで公開されており、実験や拡張にご利用いただけます。
参考資料
出典: AI Digit Recognition with PiCamera
製造プロセス
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
- Raspberry Piでサーバークローゼットの温度を正確に監視
- Walabot搭載Posture Pal:首・背中の痛みを防ぐリアルタイム距離監視
- TJBot入門:組み立て、設定、音声制御で自分だけのAIロボットを構築
- Raspberry Pi で自作セグウェイ(自己平衡ロボット)を構築
- GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
- Acceed IGS-9822DGP:4 SFPポート搭載12ポートギガビットスイッチ – 高性能産業用ネットワークソリューション
- AAEONとIntel、FWS-8600を提供:40コア2Uネットワーク アプライアンス、400Gbpsスループット
- Lanner、第2世代インテルXeon Scalableプロセッサ搭載でネットワークアプライアンスを強化
- IoTネットワークソリューションで都市洪水に立ち向かう