Help us understand the problem. What is going on with this article?

Raspberry Pi サーボモーターとOpen CVで物体追跡カメラ(Meanshift)

More than 3 years have passed since last update.

物体追跡カメラをRaspberryPiで作ってみました。Python3系で動きます。指定した枠内に最初に映ったものを追尾します。「青りんご」で試してみます。

2017-03-14 21_55_34.gif

こんな感じです。ちょっと小動物みたいで可愛いですね。

環境

IMG_9069.JPG

  • Raspberry Pi3 (RASPBIAN JESSIE WITH PIXEL 4.4 / Python 3.4.2)
  • LOGICOOL ウェブカム HD画質 120万画素 C270
  • PCA9685 16Channel 12bit PWM(Adafruit 16-Channel Servo Driver互換品)
  • SG90サーボ用 2軸 カメラマウント
  • 電池ケース 単3×3本用(4.5V)

RaspberryPiのGPIOから直接サーボモーターを制御すると、電圧の変化でショートしてしまうようです。今回はモータドライバーを使い、単4電池3本から本体とは別に電源を取り込んでいます。

Python3系で制御できるので、OpenCVから取り込んだデータをそのまま利用することが出来ました。モーターの制御とOpenCVからデータを取得するのと大きく2つに分けて解説してみたいと思います。

RaspberryPiでサーボモーターを制御する

以下のモーターシールドを利用してサーボモーターを制御します。半田付けがしてあるので初心者にも安心です。

GPG PCA9685 16Channel 12bit PWM サーボドライバー Arduino等の電子工作用 (Droidfun型) - Amazon.co.jp

Adafruit 16-Channel Servo Driverという比較的ポピュラーなモータードライバの互換機なので、Adafruit社の用意してくれているPythonライブラリがそのまま利用できます。

adafruit/Adafruit_Python_PCA9685 -GitHub

結構この手のライブラリは2系で書かれたものが多いのですが、3系で動作しましたので助かりました。

PCA9685.py - Gist

servo_test.py - Gist

上記の2ファイルで下記の様に動作します。

2017-03-14 22_59_23.gif

端子の接続は下記写真を参考にして下さい。

IMG_9074.JPG

webカメラは既存の台座から外し、ネジでカメラマウントに固定しました。

OpenCVのMeanshiftで物体検出する

今回は物体検出をするのにOpenCVのMeanshiftというアルゴリズムを利用しました。

Meanshift と Camshift - OpenCV-Python Tutorials

最初に指定したウインドウの色ヒストグラムを元に、同じ重みを持つ点をスライドしながら検索していくアルゴリズムです。

Mean Shift Algorithm - YouTube 2017-03-14 23-47-34.png

Mean Shift Algorithm -YouTube

こちらの動画を見るとなんとなくイメージが湧きました。

サンプルコードを試して見ると、うまく動作したので、物体追跡した中心点に向かってカメラを移動させてみました。

meanshift.py -Gist

サーボモーターの角度は、ニュートラルの角度がx軸475、y軸325。最小角度が150、最大角度が600です。物体の中心点が画面の中心点から離れた距離をOpenCVで算出して、それを元にサーボモーターの角度を変更する様にしてみました。

ちょっとハマった点とまとめ

カメラマウントをもう少しダイナミックに動かしてみたかったんですが、移動角度が大きくなるとカメラ上の物体認識が大きくぶれてしまいカメラがガクンガクンと大きくぶれてしまいます。

OpenCVの画像を小さめにすることで(320x320ピクセル)今回は対応してみました。

超音波センサーなどのアナログセンサーを使った方が実用的なのかもしれませんね。

ともあれ以前より試してみたかった物がやっと作れたので良しとします。では。

参考にさせていただきました

raspberry pi2 + カメラ付きサーボで特定の色を追っかけるカメラを作る - やったことの説明

Python3 OpenCV3を使って物体検出 - from umentu import stupid

PonDad
人工知能愛好家(Artificial Intelligence Hobbyist)
https://pondad.net
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした