Newer
Older
lynxi-casic-demo / scene_runner.py
zhangyingjie on 24 Jan 1 KB 增加后台接口调用
import threading
import queue
import sys, os

import common
import bufferpool
from blockqueue import block_queue
from callback_data_struct import *
from info_query import SceneInfo
from string_utils import camel_to_snake, get_class, snake_to_camel
from global_logger import logger

# 需要全局的http tool?
def run_scene_device(device_no:str, input_url: str, output_url:str, device_id: int, scene_info:SceneInfo, alarm_interval, threads) -> None: 
    attr = device_process_attr()
    attr.device_no = device_no
    attr.url = input_url
    attr.output_path = output_url
    attr.device_id = device_id
    attr.alarm_interval = alarm_interval
    attr.video_frame = queue.Queue(10)
    attr.scene_info = scene_info
    if not attr.url:
        raise ValueError('input file miss!!!')
    if not attr.output_path:
        raise ValueError('unspecified output path!!!')
    
    handle_task_name = scene_info.handle_task
    if handle_task_name:
        try:
            handler_cls = get_class(f'scene_handler.{handle_task_name}', snake_to_camel(handle_task_name))
            scene_instance = handler_cls(attr)

            infer_thread = threading.Thread(target=scene_instance.run, args=())
            threads.append(infer_thread)
            infer_thread.start()

            out_thread = threading.Thread(target=scene_instance.push_video, args=())
            threads.append(out_thread)
            out_thread.start()
        except Exception as e:
            # logger.exception(e)
            logger.exception(f'scene start failed: {e}')
    else:
        logger.warning(f'scene {scene_info.remark} for device {device_no} start failed beause no handle task')