Non-engineer memoblog

エンジニアではない人間のメモブログ(備忘録とアウトプット欲のために)

Raspberry Pi3 でOpenCV3+Python3(背景差分による動体検出)

  • Python3.5.3
  • OpenCV3.3
  • Raspbian Strech

使ったもの

www.logicool.co.jp

以前に参考にしていたこちらはOpenCV2.4 + Python2.7なので、
tatsu-zine.com

新しく以下の学習コンテンツを参考
www.udemy.com

  • 環境の構築(OpenCVの導入)
  • 画像/動画の入出力
  • トラックバー / マウスイベント
  • 色空間/グレースケールへの理解
  • 平滑化/エッジの検出などの畳み込み処理
  • 2値化
  • 特徴点の抽出
  • 色検出、オプティカルフローなどの物体追跡
  • パーティクルフィルターの理論と実装

取り扱っていない内容

  • 機械学習
  • カメラモデル
  • SIFT/SURFなどのライセンス上商用利用しにくいもの
import cv2
import numpy as np

cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.resizeWindow("img", 1200, 800)
cap = cv2.VideoCapture("my_video.mkv")
ret, frame = cap.read()
h, w, ch = frame.shape
frame_back = np.zeros((h,w,ch), dtype=np.float32)
while True:
    ret, frame = cap.read()
    if ret == False:
        break
    frame_diff = cv2.absdiff(frame.astype(np.float32), frame_back)
    cv2.accumulateWeighted(frame, frame_back, 0.1)
    cv2.imshow("img", frame_diff.astype(np.uint8))
    if cv2.waitKey(10) == 27:
        break

cv2.destroyAllWindows()

実行結果

f:id:coffeedog:20180430000227j:plain
f:id:coffeedog:20180430000254j:plain

ダンボーが闇落ちしただけで10秒ほどで処理が落ちました。

PC上で実行すると普通に差分がとれて、動体検出ができましたので、
Raspberry Piのオーバークロックで、少しでも処理能力の向上を図ってみることに。

以下の記事を参考にさせていただきました!
ラズベリーパイのCPUクロックと電圧をいじってみる – EZなBlog
Raspberry Pi3 CPUクロック周波数を固定にする方法 | ある計算機屋さんの手帳

sudo vim /boot/config.txt

以下のように編集

force_turbo=1
arm_freq=1300

over_voltage=5

# ついでにGPUメモリも128 から 320へ変更
gpu_mem = 320

CPUガバナーの設定を変更

# 1.3GHz動作(固定)
sudo cpufreq-set -g performance
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
1300000

ちゃんと1.3GHzに設定されました。

また、オーバークロックによるCPU損傷を少しでも軽減させるためにファン付きケースに入れてみる。
5in1 アップデート!アクリル Raspberry Pi Model B+ Raspberry Pi 2/3 Model B 専用アクリル・ケース+ファン+ スイッチ付きケーブル+クーラー2個+HDMI to VGA ケーブル(Black/黒)


rebootしてから、再度実行・・・・・



してみましたが、とくに実行結果はからわず、ダンボーが闇落ち後、数秒で落ちました。。。


次は2値化処理などで負荷を軽減させる処理を加えてみたいと思います。