PythonでOpenCV 背景差分やってみた

前にOpenCV使ってカメラの起動までやったので、もう少しだけ処理を追加してみた。

 

今回は背景差分処理を追加

ソースは⬇︎こんな感じ

import numpy as np
# OpenCV のインポート
import cv2

# VideoCaptureのインスタンスを作成する。
# 引数でカメラを選べれる。
cap = cv2.VideoCapture(0)

cap2 = cv2.createBackgroundSubtractorMOG2()

while True:
# VideoCaptureから1フレーム読み込む
ret, frame = cap.read()

mask = cap2.apply(frame)

# 加工なし画像を表示する
cv2.imshow('Raw Frame', mask)

# キー入力を1ms待って、k が27(ESC)だったらBreakする
k = cv2.waitKey(1)
if k == 27:
break

# キャプチャをリリースして、ウィンドウをすべて閉じる
cap.release()
cv2.destroyAllWindows()

 

処理としては以下のメソッドで背景オブジェクトを取得
cap2 = cv2.createBackgroundSubtractorMOG2()

 

マスク(特定部分を抽出する)処理して
mask = cap2.apply(frame)

 

実行結果は、こんな感じ!

youtu.be

 

簡単!


 

 

 

 

PythonでOpenCV

Djangoから少し脱線してしまうんですが、

Cで少し触ったことのあるOpenCVPythonでも使えると言うことで早速やってみた。

 

いつものPycharm様でOpenCVを検索するといろいろ出てきた。

良くわからんけど、opencv-pythonって奴をInstall

 

Specify versionを選ばなかったらエラーになったんで、入れた方が良いのかな?

とりあえず完了

f:id:kimihide1104:20181004025511p:plain

 

 

 

で、PC内蔵カメラを起動するようにcamera.pyと言うファイルを作って

中身は以下のように記述。

 

# OpenCV のインポート
import cv2

# VideoCaptureのインスタンスを作成する。
# 引数でカメラを選べれる。
cap = cv2.VideoCapture(0)

while True:
# VideoCaptureから1フレーム読み込む
ret, frame = cap.read()

# 加工なし画像を表示する
cv2.imshow('Raw Frame', frame)

# キー入力を1ms待って、k が27(ESC)だったらBreakする
k = cv2.waitKey(1)
if k == 27:
break

# キャプチャをリリースして、ウィンドウをすべて閉じる
cap.release()
cv2.destroyAllWindows()

 

camera.pyを起動!

f:id:kimihide1104:20181004030857p:plain

 

数秒待つとカメラが起動しましたー。

なんて簡単なんだ!

f:id:kimihide1104:20181004030748p:plain

f:id:kimihide1104:20181004030755p:plain

 

Djangoで作ったサイトにもちょっと絡めていこうかなー

 

 

Django postgreのmigrationに詰まった

前回ポスグレのDB接続先を決めて、今回はテーブルのcreate編になります。

本に書いてある通りにモデルを書いて、以下のコマンドを実行

 

python manage.ph makemigrations hello(ここはアプリケーション名)

 

実行するとエラーっぽくズラズラと英語が並ぶ・・・

そこの一文を見ると以下のようなお言葉が。

f:id:kimihide1104:20181001013900p:plain

 

モジュールが足りないようでした。

pychramのGUIでpsycopg2のパッケージをインストール

 

f:id:kimihide1104:20181001014104p:plain

 

もう一度makemigrationsを実行すると、エラーっぽいけど内容が変わった。

 

serWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead.

 

psycopg2-binaryもインストールしろってか。

はい、インストール。

 

f:id:kimihide1104:20181001014538p:plain

 

 

再々チャレンジしたがまた違うエラー

 

App 'heello' could not be found. Is it in INSTALLED_APPS?

f:id:kimihide1104:20181001015237p:plain

 

どうやらsettings.pyにhelloが無いといけないらしいので追加。

 

f:id:kimihide1104:20181001015444p:plain

 

再再々チャレンジでようやく成功!

長かった。

 

f:id:kimihide1104:20181001015515p:plain

 

そしてテーブル作るmigrateコマンドを実行します。

 

python manage.py migrate

 

f:id:kimihide1104:20181001015738p:plain

 

どうやら成功。

ポスグレのテーブルをツールで見てみたが無事にhello_friendと言う名前のテーブルが作られてました。

 

f:id:kimihide1104:20181001015903p:plain

 

 

 

Django DBの章 初日

Django DBの章に入りました。

 

SQLiteDjangoの導入標準ですが、この章は仕事でも使っているPosgreSQLでやっていこうと思います。

 

macでのPosgreサーバーの起動方法を毎回忘れるので備忘録として残します。

 

・ターミナル立ち上げてposgreの場所を探す

which postgres

 

・起動

postgres -D /usr/local/var/postgres

  

・DBの中身確認

psql -l

 

 

サーバーの立ち上げ

python manage.py runserver

 

Pycharmのバックスラッシュ入力

Pythonの勉強を効率的にやろうと思って、課金して開発環境はPycharmを利用している。

初年は8000円くらいだったと思う。趣味に8000円は普通だろう。

 

で、Pythonというのは一行に80文字以上は入力できない仕様らしい。

それ以上入力する場合は、バックスラッシュを入力して改行するとのこと。

 

macでバックスラッシュを入力するにはシステム環境設定からキーボードの入力ソースという部分をいじる必要がある。

↓の「”¥”キーで入力する文字」って部分をバックスラッシュに変更しないといけない。

 

f:id:kimihide1104:20180922023803p:plain

 

めんどくさい。。。

 

仕方ないので変更してPycharmで¥キーを押したが、¥のままだった。

???

 

なんでーって思いながらエンターキー押したら、勝手にバックスラッシュが入力された!

 

どうやらPychrmはその辺勝手にやってくれるようです。

優秀すぎ!課金してよかった。

 

と言うわけで、バックスラッシュ問題は解決した。

 

 

 

 

 

 

 

Django staticが読み込まれない問題

Python Djangoという本で写経しながら勉強してるが、staticファイルの部分で躓いた。

 

表紙イメージ

 

書いてある通りのディレクトリにファイルを置いても、CSSファイルを読み込んでくれない。

 

ググると、下記のコマンドで現在読み込み可能なstaticファイルを全て表示するという。

python manage.py findstatic .

 

早速実行したが、やはり作成したstaticファイルが表示されなかった。

 

そこで、本に書いてなかったが、ディレクトリの階層を一つ上の階層に移動してみたら何故だか読み込むようになった。

 

根本解決はしてない気がしたが、目をつむって先に進むことにした。

 

 

<追記>

翌日に一つ上の階層に移動したstaticディレクトリを本に書いてある階層に戻した所、普通に読み込んでた。findstaticコマンドの結果もちゃんと移動した場所を指していた。

原因不明。