Exemplo n.º 1
0
async def main():
    logging.info('{0}() : Python {1}'.format(sys._getframe().f_code.co_name, sys.version_info))
    tasks = []
    loop = asyncio.get_event_loop()
    executor = ThreadPoolExecutor(max_workers=4, thread_name_prefix='videoThread')

    signals = (signal.SIGHUP, signal.SIGTERM, signal.SIGINT)
    for s in signals:
        loop.add_signal_handler(
            s, lambda s=s: loop.create_task(shutdown(loop, executor, signal=s)))

    try:
        #
        # Default to USB Webcam
        #
        # with VideoProcessor(videoPath = '/home/wcbiot/OpenVINO-Toolkit-Setup/App/ObjectDetection/Python/youtube.mp4') as videoProcessor:
        with VideoProcessor(videoPath = '/dev/video0') as videoProcessor:
        # async with VideoProcessor(devicePath = '/dev/video0') as videoProcessor:

            #
            # Initialize Tornado Web Server
            #
            webServer = WebServer(videoProcessor = videoProcessor, port = 8080)

            if (sys.version_info >= (3, 7)):
                loop = asyncio.get_running_loop()
                loop.set_debug(False)
            else:
                loop = asyncio.get_event_loop()
                loop.set_debug(False)

            #
            # Start Capturing from Video
            #
            videoStreamTask = loop.create_task(videoProcessor.videoData.capture_video_frame_async(executor))
            tasks.append(videoStreamTask)

            #
            # Start Processing video frames
            #
            videoProcessTask = loop.create_task(videoProcessor.process_video_frame_async(executor))
            tasks.append(videoProcessTask)

            #
            # Start Tornado Web Server
            #
            webServer.start_web_server()
            
            #
            # keyboard input
            #
            inputTask = loop.run_in_executor(executor, stdin_listener)
            # tasks.append(inputTask)
            await inputTask


            for task in tasks:
                # print("Task {}", task)
                task.cancel()

            done, futures = await asyncio.wait(tasks, return_when=asyncio.ALL_COMPLETED)
            
            # webServer.stop_web_server()

    except CancelledError:
        logging.info('-- {0}() - Cancelled'.format(sys._getframe().f_code.co_name))

    except Exception as ex:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        traceback.print_exception(exc_type, exc_obj, exc_tb)
        logging.error('!! {0}() : Exception {1}'.format(sys._getframe().f_code.co_name, ex))

    finally:
        logging.info('-- {0}() - Finally'.format(sys._getframe().f_code.co_name))
        for task in asyncio.Task.all_tasks():
            logging.info("Task {}".format(task))

        # done, futures = await asyncio.wait(tasks, return_when=asyncio.FIRST_EXCEPTION)
        # print("done {}", done)
        # print("futures {}", futures)
        # await asyncio.gather(*tasks, return_exceptions=True)
        await loop.shutdown_asyncgens()