#はじめに
リアルタイムな映像の物体検出をサクッと試してみたかったので,Coral USB Acceleratorを動かしてみました.ほとんど参考サイトと内容は同じですが,動画への適応方法とうまくいかなかった箇所とその対処方を添えて書きます.
#前提環境
- mac : 12.0.1
- python : 3.8.12
- TensorFlow Lite : 2.6.0
#環境構築
サイトを参考にして環境を構築していきます.
- python仮想環境構築
- Edge TPUランタイム
- TensorFlow Lite
python仮想環境構築
Anacondaを利用し仮想環境を構築します.Anacondaのインストールが済んでない方はこちらのサイトを見てAnacondaをインストールをしてください.
ターミナルで以下のコマンドを叩きpythonの仮想環境を構築します.
# 作業ディレクトリ作成
mkdir tflite-coral-example && cd tflite-coral-example
# 仮想環境作成
conda create -n 仮想環境名
以下の操作はこの仮想環境内で行います.
###Edge TPUランタイム
Coralの公式サイトの手順どおりにインストールします.OSごとに必要条件と叩くコマンドが異なるので注意.
以下はMacOSにおけるインストール手順.最後に動作周波数について聞かれますが今回はN(通常の周波数)
で動かします.
curl -LO https://github.com/google-coral/libedgetpu/releases/download/release-grouper/edgetpu_runtime_20210726.zip
unzip edgetpu_runtime_20210726.zip
cd edgetpu_runtime
sudo bash install.sh
この時『brewコマンドが見つかりません』というエラーが出た場合は,こちらのサイトを参考にHomebrewをインストールして再度sudo bash install.sh
を叩く.
###TensorFlow Lite
公式サイトを参考にインストール.
以下はMacOsにおけるインストール手順(pip3でインストールするだけ)
pip3 install --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime
##画像の物体検出をしてみる
まずリポジトリをクローン.
mkdir google-coral && cd google-coral
git clone https://github.com/google-coral/tflite --depth 1
依存用ライブラリと推論データをインストール.
cd tflite/python/examples/detection
./install_requirements.sh
以上で準備完了.以下のコマンドを叩き実行.
python3 detect_image.py \
--model models/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite \
--labels models/coco_labels.txt \
--input images/grace_hopper.bmp \
--output images/grace_hopper_processed.bmp
この時『opencvのモジュールが無い』と言われた場合はこちらのサイトを参考にopencvをインストール(opencvは諸々エラーが多発しますので粘ってください...)
##リアルタイム動画の物体検出をしてみる
detect_image.py
内の画像の読み込み部分を書き換えることで,リアルタイム動画の物体検出が可能になります.しかし,このプログラムはpillow型しか読み込めないため,動画(OpenCV)をpillowに変換する必要があります.
def cv2pil(image):
''' OpenCV型 -> PIL型 '''
new_image = image.copy()
if new_image.ndim == 2: # モノクロ
pass
elif new_image.shape[2] == 3: # カラー
new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB)
elif new_image.shape[2] == 4: # 透過
new_image = cv2.cvtColor(new_image, cv2.COLOR_BGRA2RGBA)
new_image = Image.fromarray(new_image)
return new_image
def pil2cv(image):
''' PIL型 -> OpenCV型 '''
new_image = np.array(image, dtype=np.uint8)
if new_image.ndim == 2: # モノクロ
pass
elif new_image.shape[2] == 3: # カラー
new_image = cv2.cvtColor(new_image, cv2.COLOR_RGB2BGR)
elif new_image.shape[2] == 4: # 透過
new_image = cv2.cvtColor(new_image, cv2.COLOR_RGBA2BGRA)
return new_image
(参考サイト:https://qiita.com/derodero24/items/f22c22b22451609908ee)
USBカメラを接続し,同様に実行する.