delay version for valve debug

This commit is contained in:
li.zhenye 2022-08-10 16:42:25 +08:00
parent fa5f695d2c
commit 84199c1d75

22
main.py
View File

@ -11,7 +11,7 @@ from models import RgbDetector, SpecDetector
import logging import logging
def main(only_spec=False, only_color=False, if_merge=False): def main(only_spec=False, only_color=False, if_merge=False, interval_time=None, delay_repeat_time=None):
spec_detector = SpecDetector(blk_model_path=Config.blk_model_path, pixel_model_path=Config.pixel_model_path) spec_detector = SpecDetector(blk_model_path=Config.blk_model_path, pixel_model_path=Config.pixel_model_path)
rgb_detector = RgbDetector(tobacco_model_path=Config.rgb_tobacco_model_path, rgb_detector = RgbDetector(tobacco_model_path=Config.rgb_tobacco_model_path,
background_model_path=Config.rgb_background_model_path) background_model_path=Config.rgb_background_model_path)
@ -28,6 +28,11 @@ def main(only_spec=False, only_color=False, if_merge=False):
if not os.access(rgb_mask_fifo_path, os.F_OK): if not os.access(rgb_mask_fifo_path, os.F_OK):
os.mkfifo(rgb_mask_fifo_path, 0o777) os.mkfifo(rgb_mask_fifo_path, 0o777)
logging.info(f"请注意!正在以调试模式运行程序,输出的信息可能较多。") logging.info(f"请注意!正在以调试模式运行程序,输出的信息可能较多。")
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')
delay_repeat_time_count = 0
while True: while True:
fd_img = os.open(img_fifo_path, os.O_RDONLY) fd_img = os.open(img_fifo_path, os.O_RDONLY)
fd_rgb = os.open(rgb_fifo_path, os.O_RDONLY) fd_rgb = os.open(rgb_fifo_path, os.O_RDONLY)
@ -59,7 +64,7 @@ def main(only_spec=False, only_color=False, if_merge=False):
else: else:
rgb_data_total = rgb_data rgb_data_total = rgb_data
os.close(fd_rgb) os.close(fd_rgb)
# 识别 # 识别 read
since = time.time() since = time.time()
try: try:
img_data = np.frombuffer(data_total, dtype=np.float32).reshape((Config.nRows, Config.nBands, -1)) \ img_data = np.frombuffer(data_total, dtype=np.float32).reshape((Config.nRows, Config.nBands, -1)) \
@ -70,6 +75,7 @@ def main(only_spec=False, only_color=False, if_merge=False):
rgb_data = np.frombuffer(rgb_data_total, dtype=np.uint8).reshape((Config.nRgbRows, Config.nRgbCols, -1)) rgb_data = np.frombuffer(rgb_data_total, dtype=np.uint8).reshape((Config.nRgbRows, Config.nRgbCols, -1))
except Exception as e: except Exception as e:
logging.error(f'毁灭性错误!收到的rgb数据长度为{len(rgb_data)}无法转化成指定形状 {e}') logging.error(f'毁灭性错误!收到的rgb数据长度为{len(rgb_data)}无法转化成指定形状 {e}')
# predict
if only_spec: if only_spec:
# 光谱识别 # 光谱识别
mask_spec = spec_detector.predict(img_data).astype(np.uint8) mask_spec = spec_detector.predict(img_data).astype(np.uint8)
@ -92,7 +98,13 @@ def main(only_spec=False, only_color=False, if_merge=False):
masks = [cv2.resize(mask.astype(np.uint8), Config.target_size) for mask in masks] masks = [cv2.resize(mask.astype(np.uint8), Config.target_size) for mask in masks]
# merge the masks if needed # merge the masks if needed
if if_merge: if if_merge:
masks = [masks[0] | mask[1], mask[1]] masks = [masks[0] | masks[1], masks[1]]
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")
delay_repeat_time_count = 0
time.sleep(interval_time)
# 写出 # 写出
output_fifos = [mask_fifo_path, rgb_mask_fifo_path] output_fifos = [mask_fifo_path, rgb_mask_fifo_path]
for fifo, mask in zip(output_fifos, masks): for fifo, mask in zip(output_fifos, masks):
@ -112,6 +124,8 @@ if __name__ == '__main__':
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('-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('-df', default=None, help='delay occours after how many frames', required=False)
args = parser.parse_args() args = parser.parse_args()
# fifo 参数 # fifo 参数
img_fifo_path = '/tmp/dkimg.fifo' img_fifo_path = '/tmp/dkimg.fifo'
@ -126,4 +140,4 @@ if __name__ == '__main__':
console_handler.setLevel(logging.DEBUG if args.d else logging.WARNING) console_handler.setLevel(logging.DEBUG if args.d else logging.WARNING)
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[file_handler, console_handler], level=logging.DEBUG) handlers=[file_handler, console_handler], level=logging.DEBUG)
main(only_spec=args.os, only_color=args.oc, if_merge=args.m) main(only_spec=args.os, only_color=args.oc, if_merge=args.m, interval_time=args.dt, delay_repeat_time=args.df)