[ext] 增加了喷阀计数功能(未测试)

This commit is contained in:
FEIJINTI 2022-09-04 20:26:22 +08:00
parent 6f2a9a1643
commit e62fdf3630
3 changed files with 45 additions and 8 deletions

View File

@ -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 文件夹

38
main.py
View File

@ -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 参数

View File

@ -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"}