提交 2f410ac8 authored 作者: blu's avatar blu

init

上级 7674414a
...@@ -20,6 +20,7 @@ class FrameFetcher(Thread): ...@@ -20,6 +20,7 @@ class FrameFetcher(Thread):
self.frameCnt = 0 self.frameCnt = 0
self.failedPutCnt = 0 self.failedPutCnt = 0
self.frameSeq = 0 self.frameSeq = 0
self.startTs = 0
print(self.width, self.height, self.fps) print(self.width, self.height, self.fps)
else: else:
self.cap = None self.cap = None
...@@ -42,7 +43,8 @@ class FrameFetcher(Thread): ...@@ -42,7 +43,8 @@ class FrameFetcher(Thread):
ret, frame = self.cap.read() ret, frame = self.cap.read()
if ret: if ret:
try: try:
self.frameHolder.append(frame) self.frameCnt = self.cap.get(cv2.CAP_PROP_POS_FRAMES)
self.frameHolder.append({'f': frame, 't': start, 's': self.frameCnt})
if self.frameCnt % (self.fps * 2) == 0: if self.frameCnt % (self.fps * 2) == 0:
print("frameCnt: ", self.frameCnt) print("frameCnt: ", self.frameCnt)
except: except:
...@@ -89,23 +91,28 @@ class FrameFetcher(Thread): ...@@ -89,23 +91,28 @@ class FrameFetcher(Thread):
self.height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT) self.height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
self.width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH) self.width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)
self.fps = self.cap.get(cv2.CAP_PROP_FPS) self.fps = self.cap.get(cv2.CAP_PROP_FPS)
self.fps = self.fps * 2
self.frameCnt = 0 self.frameCnt = 0
self.pastVideosFrameCnt = 0
self.failedPutCnt = 0 self.failedPutCnt = 0
self.startTs = f['t'] - int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))/self.fps
print(self.width, self.height, self.fps) print(self.width, self.height, self.fps)
self.fpsx = self.fps * 1.2
else:
self.pastVideosFrameCnt += self.frameCnt
self.frameCnt = 0
currentFile = f currentFile = f
while True: while True:
try: try:
ret, frame = self.cap.read() ret, frame = self.cap.read()
if ret: if ret:
self.frameHolder.append(frame) self.frameCnt = self.cap.get(cv2.CAP_PROP_POS_FRAMES)
self.frameSeq += self.cap.get(cv2.CAP_PROP_POS_FRAMES) frameCnt = self.pastVideosFrameCnt + self.frameCnt
# calc frame time ts = self.startTs + frameCnt/self.fps
self.frameHolder.append({'f': frame, 't': ts, 's': frameCnt})
self.frameCnt += 1
if self.frameCnt % (self.fps * 2) == 0: if self.frameCnt % (self.fps * 2) == 0:
print("frameCnt:{}, file: {}, fseq: {}".format(self.frameCnt, f['f'], )) print("frameCnt:{}, file: {}, fseq: {}".format(self.frameCnt, f['f'], frameCnt))
else: else:
break break
except: except:
...@@ -144,7 +151,8 @@ class MotionDetector(Thread): ...@@ -144,7 +151,8 @@ class MotionDetector(Thread):
while True: while True:
start = datetime.datetime.now().timestamp() start = datetime.datetime.now().timestamp()
try: try:
frame = frameHolder.popleft() data = frameHolder.popleft()
frame = data['f']
gray = cv2.resize(frame.copy(), (500, 500)) gray = cv2.resize(frame.copy(), (500, 500))
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21, 21), 0) gray = cv2.GaussianBlur(gray, (21, 21), 0)
...@@ -182,35 +190,35 @@ class MotionDetector(Thread): ...@@ -182,35 +190,35 @@ class MotionDetector(Thread):
if eventState == None: if eventState == None:
if hasEvent: if hasEvent:
eventState = 'PRE' eventState = 'PRE'
lastEventEnterTs = start lastEventEnterTs = data['t']
else: else:
pass pass
elif eventState == 'PRE': elif eventState == 'PRE':
if hasEvent: if hasEvent:
if start - lastEventEnterTs > env['EVT_START_SECS']: if data['t'] - lastEventEnterTs > env['EVT_START_SECS']:
eventState = 'PRE' eventState = 'PRE'
else: else:
# state transaction: 'PRE' -> 'IN' # state transaction: 'PRE' -> 'IN'
eventState = 'IN' eventState = 'IN'
evtQue.append({'type': 'start', 'ts': int(lastEventEnterTs)}) evtQue.append({'type': 'start', 'ts': int(lastEventEnterTs)})
# update ts # update ts
lastEventEnterTs = start lastEventEnterTs = data['t']
else: else:
# state transaction: 'PRE' -> 'NONE' # state transaction: 'PRE' -> 'NONE'
if start - lastEventEnterTs > env['EVT_START_SECS']: if data['t'] - lastEventEnterTs > env['EVT_START_SECS']:
eventState = None eventState = None
else: else:
pass pass
elif eventState == 'IN': elif eventState == 'IN':
if not hasEvent: if not hasEvent:
if start - lastEventEnterTs > env['EVT_END_SECS']/2: if data['t'] - lastEventEnterTs > env['EVT_END_SECS']/2:
# 'IN' -> 'POST' # 'IN' -> 'POST'
eventState = 'POST' eventState = 'POST'
else: else:
lastEventEnterTs = start lastEventEnterTs = data['t']
elif eventState == 'POST': elif eventState == 'POST':
if not hasEvent: if not hasEvent:
if start - lastEventEnterTs > env['EVT_END_SECS']/2: if data['t'] - lastEventEnterTs > env['EVT_END_SECS']/2:
# 'POST' -> 'NONE's # 'POST' -> 'NONE's
eventState = None eventState = None
# emmit event # emmit event
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论