first commit
This commit is contained in:
commit
54ccfb11fe
218 files changed
+19525
No files matched your search
Executable
+230
@@ -0,0 +1,230 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
import cv2
|
||||
import time
|
||||
import redis
|
||||
import queue
|
||||
import sys
|
||||
import time
|
||||
import threading
|
||||
from System_I import Check_start_fordataselect,Density,Detection_Y5,Fine_grained
|
||||
from common import global_para as gp
|
||||
r_db = None
|
||||
|
||||
|
||||
import logging
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
import os,torch
|
||||
|
||||
|
||||
class cusLogger:
|
||||
def __init__(self, loggerName):
|
||||
|
||||
# 创建一个logger
|
||||
self.logger = logging.getLogger(loggerName)
|
||||
self.logger.setLevel(logging.DEBUG)
|
||||
# 创建一个handler,用于写入日志文件。如果当前目录下没有logs目录,需要手动创建
|
||||
logPath = ".\\logs\\"
|
||||
# 日志文件名
|
||||
print(logPath)
|
||||
logName = os.path.join(logPath + loggerName + '.log')
|
||||
print(logName)
|
||||
|
||||
# 创建一个每日可更新的handler,用于将日志输出文件
|
||||
fileHandler = TimedRotatingFileHandler(logName, when='D',encoding='utf-8')
|
||||
fileHandler.setLevel(logging.DEBUG)
|
||||
|
||||
# 创建一个handler,用于将日志输出到控制台
|
||||
consoleHandler = logging.StreamHandler()
|
||||
consoleHandler.setLevel(logging.DEBUG)
|
||||
|
||||
# 定义handler的输出格式
|
||||
formatter = logging.Formatter(
|
||||
'%(asctime)s-%(name)s-%(levelname)s:%(message)s')
|
||||
fileHandler.setFormatter(formatter)
|
||||
consoleHandler.setFormatter(formatter)
|
||||
|
||||
self.logger.addHandler(fileHandler)
|
||||
#如果不需要控制台,可以注释掉
|
||||
self.logger.addHandler(consoleHandler)
|
||||
|
||||
|
||||
def getLogger(self):
|
||||
return self.logger
|
||||
log = cusLogger("rtsp_process").getLogger()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class rtspThread(threading.Thread):
|
||||
def __init__(self, thName, rtspUrl, prefix, filePath, fps, frameSize, queueSize, eventKey, eventValue,DensityClass,DetectionClass,Fine_grianedClass):
|
||||
threading.Thread.__init__(self)
|
||||
# name
|
||||
self.thName = thName
|
||||
# rtsp流地址
|
||||
self.rtspUrl = rtspUrl
|
||||
# 帧率
|
||||
self.fps = fps
|
||||
# 帧大小(width,height)
|
||||
self.frameSize = frameSize
|
||||
# 存储队列大小,fps * 10秒
|
||||
self.queueSize = queueSize
|
||||
# redis的key
|
||||
self.eventKey = eventKey
|
||||
# key值
|
||||
self.eventValue = eventValue
|
||||
# 存储文件前缀
|
||||
self.prefix = prefix
|
||||
# 存储路径
|
||||
self.filePath = filePath
|
||||
self.DensityClass = DensityClass
|
||||
self.DetectionClass = DetectionClass
|
||||
self.Fine_grianedClass = Fine_grianedClass
|
||||
|
||||
def run(self):
|
||||
vidoeSaveQueue = [queue.Queue(self.queueSize), queue.Queue(self.queueSize)]
|
||||
jpgSaveQueue = [queue.Queue(self.queueSize), queue.Queue(self.queueSize)]
|
||||
curQueueIdx = 0
|
||||
t1 = time.time()
|
||||
cap = cv2.VideoCapture(self.rtspUrl)
|
||||
t2 = time.time()
|
||||
print("capture is ",(t2-t1)*1000)
|
||||
closed = False
|
||||
failCnt = 0
|
||||
winName = self.rtspUrl + "_" + str(time.time())
|
||||
num_detection = 0
|
||||
num_cuntupian=0
|
||||
while True:
|
||||
if cap.isOpened():
|
||||
#t3 = time.time()
|
||||
res, frame = cap.read()
|
||||
#t4 = time.time()
|
||||
#print("read is ",(t4-t3)*1000)
|
||||
if res:
|
||||
closed = False
|
||||
failCnt = 0
|
||||
# frame = cv2.imread("/home/wanghc/output1/0001_20210413155842/RawImage/0174.jpg")
|
||||
# for i in range(100):
|
||||
# t1 = time.time()
|
||||
# print("initing.....")
|
||||
# self.DetectionClass.check_object(frame)
|
||||
# t2 = time.time()
|
||||
# print((t2 - t1) * 1000)
|
||||
if (num_detection >24) :
|
||||
data_today = time.strftime('%H', time.localtime(time.time()))
|
||||
# print(int(data_today))
|
||||
if (int(data_today) > 7) & (int(data_today) < 18):
|
||||
Check_start1 = Check_start_fordataselect(1,"check_start",frame,self.DetectionClass,self.Fine_grianedClass)
|
||||
Check_start1.start()
|
||||
else:
|
||||
print("time is out")
|
||||
num_detection=0
|
||||
# if is_ex_bird :
|
||||
# cv2.imwrite(self.filePath +"{}.jpg".format(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))),frame)
|
||||
num_detection+=1
|
||||
num_cuntupian+=1
|
||||
# cv2.namedWindow(winName, flags=cv2.WINDOW_FREERATIO)
|
||||
# cv2.imshow(winName, frame)
|
||||
# cv2.waitKey(10)
|
||||
try:
|
||||
if vidoeSaveQueue[curQueueIdx].full():
|
||||
vidoeSaveQueue[curQueueIdx].get_nowait()
|
||||
vidoeSaveQueue[curQueueIdx].put_nowait(frame)
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
if jpgSaveQueue[curQueueIdx].full():
|
||||
jpgSaveQueue[curQueueIdx].get_nowait()
|
||||
jpgSaveQueue[curQueueIdx].put_nowait(frame)
|
||||
except:
|
||||
pass
|
||||
|
||||
# if (r_db.exists(self.eventKey) and int(r_db.get(self.eventKey)) == self.eventValue):
|
||||
# print(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
|
||||
# print(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
|
||||
# r_db.delete(self.eventKey)
|
||||
# # 存视频
|
||||
# vidoeSaveProc = videoSaveThread(self.thName,self.prefix, self.filePath, self.fps,
|
||||
# self.frameSize, vidoeSaveQueue[curQueueIdx])
|
||||
# vidoeSaveProc.start()
|
||||
# # 存图片
|
||||
# # jpgSaveSaveProc = jpgSaveThread(self.thName, self.prefix, self.filePath, self.fps,
|
||||
# # self.frameSize, jpgSaveQueue[curQueueIdx])
|
||||
# # jpgSaveSaveProc.start()
|
||||
# # 切换缓存队列
|
||||
# curQueueIdx = (curQueueIdx + 1) % 2
|
||||
|
||||
else:
|
||||
failCnt += 1
|
||||
if(failCnt >= 15):
|
||||
closed = True
|
||||
else:
|
||||
closed = True
|
||||
if closed:
|
||||
# 休眠10秒钟 重连
|
||||
log.info("reconnect: " + self.rtspUrl)
|
||||
time.sleep(5)
|
||||
cap.open(self.rtspUrl)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
|
||||
|
||||
|
||||
root = "/home/wanghc/output_jiankong"
|
||||
#r_db = redis.StrictRedis(host='localhost', port=6379, db=0)
|
||||
log = cusLogger("rtsp_process").getLogger()
|
||||
Density1 = Density(gp.devices, root)
|
||||
Detection1 = Detection_Y5(gp.devices, root)
|
||||
Fine_grained1 = Fine_grained(gp.devices, root)
|
||||
# try:
|
||||
# # 如果有多个流要同时取存,可以创建多个线程
|
||||
# t1 = time.time()
|
||||
# thread1 = rtspThread("thread_vs",
|
||||
# "rtsp://admin:glodon123@192.168.116.13:554/Streaming/Channels/101",
|
||||
# "ch1_",
|
||||
# "../data_MPKFNet/RTSP/", # 为空串时,默认保存在当前目录
|
||||
# 25,
|
||||
# (3840, 2160),
|
||||
# # (3264,2448),
|
||||
# 1500,
|
||||
# "key",
|
||||
# 1,
|
||||
# Density1,
|
||||
# Detection1,
|
||||
# Fine_grained1
|
||||
# )
|
||||
# t2 = time.time()
|
||||
# print("multi is ", (t2 - t1) * 1000)
|
||||
# thread1.start()
|
||||
#
|
||||
#
|
||||
#
|
||||
# except Exception as e:
|
||||
# log.info(e)
|
||||
try:
|
||||
# 如果有多个流要同时取存,可以创建多个线程
|
||||
t1 = time.time()
|
||||
thread1 = rtspThread("thread_vs",
|
||||
"rtsp://admin:glodon123@192.168.116.13:554/Streaming/Channels/101",
|
||||
"ch1_",
|
||||
"../data_MPKFNet/RTSP", # 为空串时,默认保存在当前目录
|
||||
25,
|
||||
(3840, 2160),
|
||||
# (3264,2448),
|
||||
1500,
|
||||
"key",
|
||||
1,
|
||||
Density1,
|
||||
Detection1,
|
||||
Fine_grained1
|
||||
)
|
||||
t2 = time.time()
|
||||
print("multi is ", (t2 - t1) * 1000)
|
||||
thread1.start()
|
||||
|
||||
|
||||
|
||||
except Exception as e:
|
||||
log.info(e)
|
||||
Reference in new issue
Block a user