mirror of
https://github.com/NanjingForestryUniversity/supermachine-tobacco.git
synced 2025-11-08 06:13:53 +00:00
[ext] 增加了喷阀计数功能(未测试)
This commit is contained in:
parent
6f2a9a1643
commit
e62fdf3630
@ -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
38
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 参数
|
||||
|
||||
@ -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"}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user