diff --git a/config.py b/config.py index 17540d7..fcdc698 100644 --- a/config.py +++ b/config.py @@ -44,3 +44,6 @@ class Config: # logging root_dir = os.path.split(os.path.realpath(__file__))[0] + log_freq = 1500 # 进行log的频率(多少次predict后进行log写出记录喷阀开启次数) + rgb_log_dir = 'rgb_log' # rgb log 文件夹 + spec_log_dir = 'spec_log' # spec log 文件夹 diff --git a/main.py b/main.py index 4771e10..95a76c9 100755 --- a/main.py +++ b/main.py @@ -1,10 +1,13 @@ import os +from datetime import datetime +from pathlib import Path import sys import cv2 import time import numpy as np +import utils import utils as utils_customized from config import Config from models import RgbDetector, SpecDetector @@ -17,10 +20,17 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, rgb_detector = RgbDetector(tobacco_model_path=Config.rgb_tobacco_model_path, background_model_path=Config.rgb_background_model_path, ai_path=Config.ai_path) - _, _ = spec_detector.predict(np.ones((Config.nRows, Config.nCols, Config.nBands), dtype=float)*0.4),\ - rgb_detector.predict(np.ones((Config.nRgbRows, Config.nRgbCols, Config.nRgbBands), dtype=np.uint8)*40) + _, _ = spec_detector.predict(np.ones((Config.nRows, Config.nCols, Config.nBands), dtype=float) * 0.4), \ + rgb_detector.predict(np.ones((Config.nRgbRows, Config.nRgbCols, Config.nRgbBands), dtype=np.uint8) * 40) total_len = Config.nRows * Config.nCols * Config.nBands * 4 # float型变量, 4个字节 total_rgb = Config.nRgbRows * Config.nRgbCols * Config.nRgbBands * 1 # int型变量 + log_file_name = datetime.now().strftime('%Y_%m_%d__%H_%M_%S.log') + if single_spec: + os.mkdirs(Path(Config.root_dir) / Path(Config.rgb_log_dir), exist_ok=True) + log_path = Path(Config.root_dir) / Path(Config.rgb_log_dir) / log_file_name + if single_color: + os.mkdirs(Path(Config.root_dir) / Path(Config.spec_log_dir), exist_ok=True) + log_path = Path(Config.root_dir) / Path(Config.spec_log_dir) / log_file_name if not single_color: logging.info("create color fifo") if not os.access(img_fifo_path, os.F_OK): @@ -38,8 +48,10 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, if (interval_time is not None) and (delay_repeat_time is not None): interval_time = float(interval_time) / 1000.0 delay_repeat_time = int(delay_repeat_time) - logging.warning(f'Delay {interval_time*1000:.2f}ms will be added per {delay_repeat_time} frames') + logging.warning(f'Delay {interval_time * 1000:.2f}ms will be added per {delay_repeat_time} frames') delay_repeat_time_count = 0 + + log_time_count, value_num_count = 0, 0 while True: img_data, rgb_data = None, None if single_spec: @@ -76,8 +88,9 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, Config.rgb_size_threshold = rgb_threshold logging.info(f'Get rgb threshold: {rgb_threshold}') except Exception as e: - logging.error(f'毁灭性错误:收到长度小于3却无法转化为整数spec_size_threshold的网络报文,报文内容为 {total_rgb},' - f' 错误为 {e}.') + logging.error( + f'毁灭性错误:收到长度小于3却无法转化为整数spec_size_threshold的网络报文,报文内容为 {total_rgb},' + f' 错误为 {e}.') continue else: rgb_data_total = rgb_data_total @@ -112,6 +125,13 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, masks = [mask_spec, mask_rgb] # 进行多个喷阀的合并 masks = [utils_customized.valve_expend(mask) for mask in masks] + mask_nums = sum([np.sum(np.sum(mask)) for mask in masks]) + log_time_count += 1 + value_num_count += mask_nums + if log_time_count > Config.log_freq: + utils.valve_log(log_path, valve_num=value_num_count) + log_time_count, value_num_count = 0, 0 + # 进行喷阀同时开启限制,在8月11日后收到倪超老师的电话,关闭 # masks = [utils_customized.valve_limit(mask, Config.max_open_valve_limit) for mask in masks] # control the size of the output masks, 在resize前,图像的宽度是和喷阀对应的 @@ -122,7 +142,7 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, if (interval_time is not None) and (delay_repeat_time is not None): delay_repeat_time_count += 1 if delay_repeat_time_count > delay_repeat_time: - logging.warning(f"Delay time {interval_time*1000:.2f}ms after {delay_repeat_time} frames") + logging.warning(f"Delay time {interval_time * 1000:.2f}ms after {delay_repeat_time} frames") delay_repeat_time_count = 0 time.sleep(interval_time) # 写出 @@ -145,14 +165,16 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, if __name__ == '__main__': import argparse + parser = argparse.ArgumentParser(description='主程序') parser.add_argument('-oc', default=False, action='store_true', help='只进行RGB彩色预测 only rgb', required=False) parser.add_argument('-os', default=False, action='store_true', help='只进行光谱预测 only spec', required=False) parser.add_argument('-sc', default=False, action='store_true', help='只进行RGB预测且只返回一个mask', required=False) - parser.add_argument('-ss', default=False, action='store_true', help='只进行光谱预测且只返回一个mask', required=False) + parser.add_argument('-ss', default=False, action='store_true', help='只进行光谱预测且只返回一个mask', + required=False) parser.add_argument('-m', default=False, action='store_true', help='if merge the two masks', required=False) parser.add_argument('-d', default=False, action='store_true', help='是否使用DEBUG模式', required=False) - parser.add_argument('-dt', default=None, help='delay time', required=False) + parser.add_argument('-dt', default=None, help='delay time', required=False) parser.add_argument('-df', default=None, help='delay occours after how many frames', required=False) args = parser.parse_args() # fifo 参数 diff --git a/utils/__init__.py b/utils/__init__.py index 6bd1bcb..aeddc9b 100755 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -6,6 +6,9 @@ import glob import logging import os +import pathlib +import time +from datetime import datetime from queue import Queue import cv2 @@ -274,6 +277,15 @@ wavelength units = Unknown return template_file +def valve_log(log_path: pathlib.Path, valve_num: [int, str]): + """ + 将喷阀的开启次数记录到文件log_path当中。 + """ + valve_str = "截至 " + datetime.now().strftime('%Y-%m-%d %H:%M:%S') + f' 喷阀使用次数: {valve_num}.' + with open(log_path) as f: + f.write(str(valve_str)) + + if __name__ == '__main__': # color_dict = {(0, 0, 255): "yangeng", (255, 0, 0): "bejing", (0, 255, 0): "hongdianxian", # (255, 0, 255): "chengsebangbangtang", (0, 255, 255): "lvdianxian"}