pythonで遊んでみた。
ノートPCの内臓カメラから映像を取得して色々いじってみようと思った。
環境構築としてanacondaをインストール。
conda installで必要なモジュールをとってきます。
映像をいじりたいのでopencvを入れます。
conda install -c conda-forge opencv
PCの内臓カメラの映像をウィンドウに表示させます。
import cv2
capture = cv2.VideoCapture(0)
while cv2.waitKey(1) & 0xFF != ord('q'):
_, frame = capture.read()
cv2.imshow('Video',frame)
capture.release()
cv2.destroyAllWindows()
たった数行書いて実行するとウィンドウが開いてカメラの映像が映し出されます。qキーを叩くとウィンドウが閉じます。
恥ずかしいのでモザイクをかけます。
一度サイズを落として元に戻すことでモザイク状態する。
import cv2
RATIO = 0.03
capture = cv2.VideoCapture(0)
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
while cv2.waitKey(1) & 0xFF != ord('q'):
_, frame = capture.read()
frame = cv2.resize( frame,
None,
fx=RATIO,
fy=RATIO,
interpolation=cv2.INTER_NEAREST)
frame = cv2.resize( frame,
(width, height),
interpolation=cv2.INTER_NEAREST)
cv2.imshow('Video',frame)
capture.release()
cv2.destroyAllWindows()
強めにモザイクをかけました。これで恥ずかしくありません。
鏡みたいに写るように左右反転させて、ついでにフレームレートも見てみます。
(第2引数が0で上下反転,正値で左右反転,負値で上下左右反転)
frame = cv2.flip(frame, 1)
コード全体はこちら
import cv2
RATIO = 0.03
## カメラ取得
capture = cv2.VideoCapture(0)
## サイズを取得
height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
time = cv2.TickMeter()
## モザイク処理
def mosaic(im, r, w, h):
im = cv2.resize(im,
fx=r, fy=r,
interpolation=cv2.INTER_NEAREST)
im = cv2.resize(im,
(w, h),
interpolation=cv2.INTER_NEAREST)
return im
## ついでにフレームレートも見ておく
fps=[]
def get_fps(t):
t.stop()
if t.getTimeMilli() != 0:
if len(fps) >= 30: fps.pop(0)
fps.append(1000 / t.getTimeMilli())
t.reset();t.start();
return sum(fps)/len(fps) if len(fps) > 0 else 0
while cv2.waitKey(1) & 0xFF != ord('q'):
## 1フレーム取得
_, frame = capture.read()
## モザイクをかける
frame = mosaic(frame, RATIO, width, height)
## 左右反転
frame = cv2.flip(frame, 1)
## フレームレートを描画
cv2.putText( frame,
text="%.1ffps"%get_fps(time),
org=(40,80),
fontFace=cv2.FONT_HERSHEY_PLAIN,
fontScale=5,
color=(0,255,0),
thickness=3)
## 描画
cv2.imshow('Video', frame)
capture.release()
cv2.destroyAllWindows()
実行!!
フレームレートは28~29くらいでした。
pythonで遊んでみました。
初めてまともにpythonに触れてみましたが、
簡単にいろいろなことが試せて楽しいです。
顔検出して顔だけにモザイクをかけたり、
カメラで撮った動きをアバターに投影したり、
他にもいろいろ遊べそうです。