mirror of
https://github.com/NanjingForestryUniversity/supermachine-tobacco.git
synced 2025-11-08 14:23:55 +00:00
[ext] 增加了喷阀计数功能(未测试)
This commit is contained in:
parent
6f2a9a1643
commit
e62fdf3630
@ -44,3 +44,6 @@ class Config:
|
|||||||
|
|
||||||
# logging
|
# logging
|
||||||
root_dir = os.path.split(os.path.realpath(__file__))[0]
|
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 文件夹
|
||||||
|
|||||||
26
main.py
26
main.py
@ -1,10 +1,13 @@
|
|||||||
import os
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
from pathlib import Path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import time
|
import time
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
import utils
|
||||||
import utils as utils_customized
|
import utils as utils_customized
|
||||||
from config import Config
|
from config import Config
|
||||||
from models import RgbDetector, SpecDetector
|
from models import RgbDetector, SpecDetector
|
||||||
@ -21,6 +24,13 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None,
|
|||||||
rgb_detector.predict(np.ones((Config.nRgbRows, Config.nRgbCols, Config.nRgbBands), dtype=np.uint8) * 40)
|
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_len = Config.nRows * Config.nCols * Config.nBands * 4 # float型变量, 4个字节
|
||||||
total_rgb = Config.nRgbRows * Config.nRgbCols * Config.nRgbBands * 1 # int型变量
|
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:
|
if not single_color:
|
||||||
logging.info("create color fifo")
|
logging.info("create color fifo")
|
||||||
if not os.access(img_fifo_path, os.F_OK):
|
if not os.access(img_fifo_path, os.F_OK):
|
||||||
@ -40,6 +50,8 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None,
|
|||||||
delay_repeat_time = int(delay_repeat_time)
|
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
|
delay_repeat_time_count = 0
|
||||||
|
|
||||||
|
log_time_count, value_num_count = 0, 0
|
||||||
while True:
|
while True:
|
||||||
img_data, rgb_data = None, None
|
img_data, rgb_data = None, None
|
||||||
if single_spec:
|
if single_spec:
|
||||||
@ -76,7 +88,8 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None,
|
|||||||
Config.rgb_size_threshold = rgb_threshold
|
Config.rgb_size_threshold = rgb_threshold
|
||||||
logging.info(f'Get rgb threshold: {rgb_threshold}')
|
logging.info(f'Get rgb threshold: {rgb_threshold}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f'毁灭性错误:收到长度小于3却无法转化为整数spec_size_threshold的网络报文,报文内容为 {total_rgb},'
|
logging.error(
|
||||||
|
f'毁灭性错误:收到长度小于3却无法转化为整数spec_size_threshold的网络报文,报文内容为 {total_rgb},'
|
||||||
f' 错误为 {e}.')
|
f' 错误为 {e}.')
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
@ -112,6 +125,13 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None,
|
|||||||
masks = [mask_spec, mask_rgb]
|
masks = [mask_spec, mask_rgb]
|
||||||
# 进行多个喷阀的合并
|
# 进行多个喷阀的合并
|
||||||
masks = [utils_customized.valve_expend(mask) for mask in masks]
|
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日后收到倪超老师的电话,关闭
|
# 进行喷阀同时开启限制,在8月11日后收到倪超老师的电话,关闭
|
||||||
# masks = [utils_customized.valve_limit(mask, Config.max_open_valve_limit) for mask in masks]
|
# masks = [utils_customized.valve_limit(mask, Config.max_open_valve_limit) for mask in masks]
|
||||||
# control the size of the output masks, 在resize前,图像的宽度是和喷阀对应的
|
# control the size of the output masks, 在resize前,图像的宽度是和喷阀对应的
|
||||||
@ -145,11 +165,13 @@ def main(only_spec=False, only_color=False, if_merge=False, interval_time=None,
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='主程序')
|
parser = argparse.ArgumentParser(description='主程序')
|
||||||
parser.add_argument('-oc', default=False, action='store_true', help='只进行RGB彩色预测 only rgb', required=False)
|
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('-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('-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('-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('-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)
|
||||||
|
|||||||
@ -6,6 +6,9 @@
|
|||||||
import glob
|
import glob
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
@ -274,6 +277,15 @@ wavelength units = Unknown
|
|||||||
return template_file
|
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__':
|
if __name__ == '__main__':
|
||||||
# color_dict = {(0, 0, 255): "yangeng", (255, 0, 0): "bejing", (0, 255, 0): "hongdianxian",
|
# color_dict = {(0, 0, 255): "yangeng", (255, 0, 0): "bejing", (0, 255, 0): "hongdianxian",
|
||||||
# (255, 0, 255): "chengsebangbangtang", (0, 255, 255): "lvdianxian"}
|
# (255, 0, 255): "chengsebangbangtang", (0, 255, 255): "lvdianxian"}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user