You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.7 KiB
112 lines
3.7 KiB
import logging
|
|
import os
|
|
import sys
|
|
from datetime import datetime
|
|
from time import sleep
|
|
import signal
|
|
import configSer
|
|
import logSet
|
|
import stabilize.win
|
|
import tcp_Ser
|
|
import upload.DataReporter
|
|
import videoDetection
|
|
import videoPush
|
|
from upload import mqttHelper
|
|
|
|
tcp_service = None
|
|
video_processor = None
|
|
reporter = None
|
|
def signal_handler(sig, frame):
|
|
global tcp_service,video_processor,reporter
|
|
print(f"收到退出信号 sig={sig},程序准备退出")
|
|
tcp_service.stop()
|
|
tcp_service.join()
|
|
video_processor.stop()
|
|
videoPush.stop()
|
|
reporter.stop()
|
|
|
|
print(f"===释放完毕,退出===")
|
|
sys.exit(0)
|
|
def read_config_path() ->str :
|
|
config_name = "config.json"
|
|
|
|
# determine if application is a script file or frozen exe
|
|
if getattr(sys, 'frozen', False):
|
|
application_path = os.path.dirname(sys.executable)
|
|
elif __file__:
|
|
application_path = os.path.dirname(__file__)
|
|
|
|
config_path = os.path.join(application_path, config_name)
|
|
|
|
print(f"命令路径:{os.getcwd()}, config_path_abs路径:{config_path}")
|
|
return config_path
|
|
|
|
signal.signal(signal.SIGINT, signal_handler) # 捕获 Ctrl+C 信号
|
|
if __name__ == '__main__':
|
|
logSet.log_init()
|
|
if __debug__:
|
|
print("Debug 模式")
|
|
else:
|
|
print("release 模式")
|
|
|
|
# 确保imgs目录存在
|
|
imgs_dir = "imgs"
|
|
if not os.path.exists(imgs_dir):
|
|
os.makedirs(imgs_dir)
|
|
|
|
# 读取配置文件
|
|
config_path_abs=read_config_path()
|
|
config_obj= configSer.ConfigOperate(config_path_abs)
|
|
json_str = config_obj.config_info.to_json(indent=4)
|
|
logging.info(f"当前配置:{json_str}")
|
|
|
|
tcp_service = tcp_Ser.TcpSer("0.0.0.0", config_obj.config_info.server.port)
|
|
tcp_service.daemon=True
|
|
tcp_service.start()
|
|
reporter = upload.DataReporter.DataReporter(data_fps=config_obj.config_info.fps.data,video_fps=config_obj.config_info.fps.video)
|
|
reporter.register_handler(tcp_service.broadcast_message,"tcp")
|
|
|
|
if config_obj.config_info.upload.enable:
|
|
mq_config=config_obj.config_info.upload.mqtt
|
|
upload.DataReporter.mq_client = upload.mqttHelper.MQTTClient(broker=mq_config.broker,
|
|
port=mq_config.port,
|
|
topic=mq_config.topic,
|
|
username=mq_config.username,
|
|
password=mq_config.password,
|
|
client_id=mq_config.client_id+"_"+datetime.now().strftime("%y%m%d_%H%M%S"),
|
|
)
|
|
try:
|
|
upload.DataReporter.start_mqtt_connection_thread()
|
|
reporter.register_handler(upload.DataReporter.mq_client.publish,"mqtt")
|
|
except Exception as e:
|
|
logging.warn("mqtt通讯异常", e)
|
|
sleep(2)
|
|
|
|
reporter.start()
|
|
|
|
|
|
# 启动video
|
|
videoDetection.configObj=config_obj
|
|
videoDetection.reporter=reporter
|
|
|
|
video_processor = videoDetection.VideoProcessor()
|
|
# 添加订阅者processor
|
|
tcp_service.add_subscribe(video_processor)
|
|
|
|
# 推流
|
|
videoPush.video_server_run()
|
|
|
|
#数据平滑窗口
|
|
if config_obj.config_info.win.enable:
|
|
method=config_obj.config_info.win.method
|
|
size=config_obj.config_info.win.size
|
|
threshold=config_obj.config_info.win.threshold
|
|
img_threshold=config_obj.config_info.win.imgThreshold
|
|
video_processor.adaptive_smoother=stabilize.win.Win.create_window(method,size, threshold,img_threshold)
|
|
else:
|
|
video_processor.adaptive_smoother=None
|
|
|
|
# 启动
|
|
video_processor.video_mode(config_obj.config_info.capture)
|
|
|
|
logging("==over==")
|
|
|