Last active
April 11, 2018 05:04
-
-
Save TareObjects/da42dde0e546039575185c98c0f89ba1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import io | |
import picamera | |
import sys | |
import time | |
import datetime | |
import numpy as np | |
import cv2 | |
# フレーム差分の計算 | |
def frame_sub(img1, img2, img3, th): | |
# フレームの絶対差分 | |
diff1 = cv2.absdiff(img1, img2) | |
diff2 = cv2.absdiff(img2, img3) | |
# 2つの差分画像の論理積 | |
diff = cv2.bitwise_and(diff1, diff2) | |
# 二値化処理 | |
diff[diff < th] = 0 | |
diff[diff >= th] = 255 | |
# メディアンフィルタ処理(ゴマ塩ノイズ除去) | |
mask = cv2.medianBlur(diff, 3) | |
return mask | |
# | |
# 画像取得 | |
# | |
def get_gray_image(): | |
# USB Camera | |
# ret, frame = cap.read() | |
# picamera | |
stream = io.BytesIO() | |
camera.capture(stream, format='jpeg') | |
data = np.fromstring(stream.getvalue(), dtype=np.uint8) | |
frame = cv2.imdecode(data, 1) | |
return cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) | |
# | |
# 初期化、パラメータ読み込みなど | |
# | |
seconds = 1 | |
showImage = False | |
fileImage = False | |
args = sys.argv | |
for i in args: | |
if i == "image": | |
showImage = True | |
if i == "file": | |
fileImage = True | |
if i.isdigit(): | |
seconds = int(i) | |
print(showImage, seconds) | |
# | |
# カメラの準備 | |
# | |
# USB Camera | |
# cap = cv2.VideoCapture(0) | |
# picamera | |
CAMERA_WIDTH = 320 | |
CAMERA_HEIGHT = 240 | |
camera = picamera.PiCamera() | |
camera.resolution = (CAMERA_WIDTH, CAMERA_HEIGHT) | |
# カメラ動作テスト : camera.capture('my_picture.jpg') | |
# | |
# フレーム先読み | |
# | |
frame1 = get_gray_image() | |
frame2 = get_gray_image() | |
frame3 = get_gray_image() | |
while(1): | |
mask = frame_sub(frame1, frame2, frame3, th=3) | |
# Aが押されたら終了、するはずなのですが | |
k = cv2.waitKey(30) & 0xff | |
if k == 65: | |
break | |
now = datetime.datetime.now() | |
wCount = np.count_nonzero(mask) | |
aCount = mask.size | |
filename = now.strftime("%Y-%m-%dT%H:%M:%S") | |
print filename, wCount, aCount, float(wCount) / float(aCount) | |
if showImage: | |
cv2.imshow('mask', mask) | |
cv2.imshow('frame2', frame2) | |
if fileImage: | |
cv2.imwrite('sabun/'+filename+'org.jpg', frame2) | |
cv2.imwrite('sabun/'+filename+'dif.jpg', mask) | |
frame1 = frame2 | |
frame2 = frame3 | |
frame3 = get_gray_image() | |
time.sleep(seconds) | |
cap.release() | |
cv2.destroyAllWindows() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment