From 2ed1248372cda1b47c202572809cb4453c3ee93a Mon Sep 17 00:00:00 2001 From: Simon Birkholz Date: Mon, 18 Nov 2024 10:48:38 +0100 Subject: [PATCH 1/2] added worker.start_processing and worker.stop_processing calls --- EX06_recordVideo.py | 34 +++++++++------------- EX06_recordVideo_async.py | 44 +++++++++++++--------------- EX07_recordVideoFromSessionFile.py | 46 +++++++++++++++--------------- 3 files changed, 56 insertions(+), 68 deletions(-) diff --git a/EX06_recordVideo.py b/EX06_recordVideo.py index fbb5528..3b6b1f9 100644 --- a/EX06_recordVideo.py +++ b/EX06_recordVideo.py @@ -7,7 +7,7 @@ import cuvis -### default directories and files +# default directories and files data_dir = None lib_dir = None @@ -30,7 +30,7 @@ loc_output = os.path.join(os.getcwd(), "EX06_video") # parameters -loc_exptime = 100 #in ms +loc_exptime = 100 # in ms loc_autoexp = False loc_fps = 2 @@ -50,15 +50,15 @@ def run_example_recordVideo(userSettingsDir=loc_settings, print("loading acquisition context...") acquisitionContext = cuvis.AcquisitionContext(calibration) - session_info = cuvis.SessionData("video",0,0) + session_info = cuvis.SessionData("video", 0, 0) acquisitionContext.session_info = session_info print("prepare saving of measurements...") saveArgs = cuvis.SaveArgs(export_dir=recDir, - allow_overwrite=True, - allow_session_file=True, - fps=fps, - operation_mode=cuvis.OperationMode.Software) + allow_overwrite=True, + allow_session_file=True, + fps=fps, + operation_mode=cuvis.OperationMode.Software) print("writing files to: {}".format(recDir)) cubeExporter = cuvis.CubeExporter(saveArgs) @@ -90,16 +90,12 @@ def run_example_recordVideo(userSettingsDir=loc_settings, acquisitionContext.set_continuous(True) print("configuring worker...") - workerSettings = cuvis.WorkerSettings(keep_out_of_sequence=False, - poll_intervall=10, - worker_count=0, - hard_limit=10, - soft_limit=10, - can_drop=True) + workerSettings = cuvis.WorkerSettings() worker = cuvis.Worker(workerSettings) worker.set_acquisition_context(acquisitionContext) worker.set_processing_context(processingContext) worker.set_exporter(cubeExporter) + worker.start_processing() print("recording...! (will stop after 2 minutes)") start = datetime.now() @@ -111,20 +107,16 @@ def run_example_recordVideo(userSettingsDir=loc_settings, else: time.sleep(0.001) - workerContainer = worker.get_next_result(1000) #in ms + workerContainer = worker.get_next_result(1000) # in ms if workerContainer.mesu.data is not None: print("current handle index: {}".format( workerContainer.mesu.session_info.sequence_number)) - if worker.queue_limits[1] == worker.queue_used: - print("worker queue is full! Main() loop can not keep up!") - break - if acquisitionContext.queue_size == acquisitionContext.queue_used: - print("acquisition queue is full! Worker can not keep up!") - break + + print(workerContainer) print("acquisition stopped...") acquisitionContext.set_continuous(False) - + worker.stop_processing() cuvis.shutdown() print("finished.") diff --git a/EX06_recordVideo_async.py b/EX06_recordVideo_async.py index 83f1229..6fb32e9 100644 --- a/EX06_recordVideo_async.py +++ b/EX06_recordVideo_async.py @@ -7,8 +7,7 @@ import cuvis - -### default directories and files +# default directories and files data_dir = None lib_dir = None @@ -31,7 +30,7 @@ loc_output = os.path.join(os.getcwd(), "EX06_video") # parameters -loc_exptime = 100 #in ms +loc_exptime = 100 # in ms loc_autoexp = False loc_fps = 2 @@ -39,36 +38,37 @@ async def state_changed_callback(state, component_states): print(f'camera is {state.name}') + async def worker_collect_mesu_task(workerContainer: cuvis.WorkerResult): if workerContainer.mesu.data is not None: - print("current handle index: {}".format( - workerContainer.mesu.session_info.sequence_number)) + print("current handle index: {}".format( + workerContainer.mesu.session_info.sequence_number)) async def run_example_recordVideo(userSettingsDir=loc_settings, - factoryDir=loc_factory, - recDir=loc_output, - exposure=loc_exptime, - autoExp=loc_autoexp, - fps=loc_fps): + factoryDir=loc_factory, + recDir=loc_output, + exposure=loc_exptime, + autoExp=loc_autoexp, + fps=loc_fps): print("loading user settings...") cuvis.init(userSettingsDir) cuvis.set_log_level("info") - + print("loading calibration (factory)...") calibration = cuvis.Calibration(factoryDir) print("loading acquisition context...") acquisitionContext = cuvis.AcquisitionContext(calibration) - session_info = cuvis.SessionData('video',0,0) + session_info = cuvis.SessionData('video', 0, 0) acquisitionContext.session_info = session_info print("prepare saving of measurements...") saveArgs = cuvis.SaveArgs(export_dir=recDir, - allow_overwrite=True, - allow_session_file=True, - fps=fps, - operation_mode=cuvis.OperationMode.Software) + allow_overwrite=True, + allow_session_file=True, + fps=fps, + operation_mode=cuvis.OperationMode.Software) print("writing files to: {}".format(recDir)) cubeExporter = cuvis.CubeExporter(saveArgs) @@ -102,12 +102,7 @@ async def run_example_recordVideo(userSettingsDir=loc_settings, await acquisitionContext.set_continuous_async(True) print("configuring worker...") - workerSettings = cuvis.WorkerSettings(keep_out_of_sequence=False, - poll_intervall=10, - worker_count=0, - hard_limit=10, - soft_limit=10, - can_drop=True) + workerSettings = cuvis.WorkerSettings() worker = cuvis.Worker(workerSettings) worker.set_acquisition_context(acquisitionContext) worker.set_processing_context(processingContext) @@ -116,13 +111,14 @@ async def run_example_recordVideo(userSettingsDir=loc_settings, print("recording...! (will stop after 2 minutes)") worker.register_worker_callback(worker_collect_mesu_task) + worker.start_processing() await a.sleep(2 * 60) worker.reset_worker_callback() print("acquisition stopped...") await acquisitionContext.set_continuous_async(False) - + worker.stop_processing() cuvis.shutdown() print("finished.") @@ -163,7 +159,7 @@ async def run_example_recordVideo(userSettingsDir=loc_settings, fps = int(fps) a.run(run_example_recordVideo(userSettingsDir, factoryDir, recDir, exposure, - autoExp, fps)) + autoExp, fps)) while 1: sys.exit(0) diff --git a/EX07_recordVideoFromSessionFile.py b/EX07_recordVideoFromSessionFile.py index 2803a93..0e440b3 100644 --- a/EX07_recordVideoFromSessionFile.py +++ b/EX07_recordVideoFromSessionFile.py @@ -6,7 +6,7 @@ import cuvis -### default directories and files +# default directories and files data_dir = None lib_dir = None @@ -30,7 +30,7 @@ loc_output = os.path.join(os.getcwd(), "EX07_video") # parameters -loc_exptime = 100 #in ms +loc_exptime = 100 # in ms loc_autoexp = False loc_fps = 2 @@ -51,15 +51,15 @@ def run_example_recordVideoFromSessionFile(userSettingsDir=loc_settings, print("loading acquisition context...") acquisitionContext = cuvis.AcquisitionContext(session, simulate=True) # # using images from session file instead of camera - session_info = cuvis.SessionData("video",0,0) + session_info = cuvis.SessionData("video", 0, 0) acquisitionContext.session_info = session_info print("prepare saving of measurements...") saveArgs = cuvis.SaveArgs(export_dir=recDir, - allow_overwrite=True, - allow_session_file=True, - fps=fps, - operation_mode=cuvis.OperationMode.Internal) + allow_overwrite=True, + allow_session_file=True, + fps=fps, + operation_mode=cuvis.OperationMode.Internal) print("writing files to: {}".format(recDir)) cubeExporter = cuvis.CubeExporter(saveArgs) @@ -86,47 +86,47 @@ def run_example_recordVideoFromSessionFile(userSettingsDir=loc_settings, print("initializing simulated hardware...") acquisitionContext.integration_time = exposure - acquisitionContext.operation_mode =cuvis.OperationMode.Internal + acquisitionContext.operation_mode = cuvis.OperationMode.Internal acquisitionContext.fps = fps acquisitionContext.auto_exp = autoExp acquisitionContext.set_continuous(True) print("configuring worker...") - workerSettings = cuvis.WorkerSettings(keep_out_of_sequence=False, - poll_intervall=10, - worker_count=0, - hard_limit=10, - soft_limit=10, - can_drop=True) + workerSettings = cuvis.WorkerSettings() worker = cuvis.Worker(workerSettings) worker.set_acquisition_context(acquisitionContext) worker.set_processing_context(processingContext) worker.set_exporter(cubeExporter) + worker.start_processing() print("recording...! (will stop after 2 minutes)") start = datetime.now() while (datetime.now() - start) < timedelta(minutes=2): while 1: + print(worker.state) if worker.has_next_result(): break else: time.sleep(0.001) - workerContainer = worker.get_next_result() + workerContainer = worker.get_next_result(0) if workerContainer.mesu.data is not None: print("current handle index: {}".format( workerContainer.mesu.session_info.sequence_number)) - if worker.get_queue_limits()["soft_limit"] == worker.get_queue_used(): - print("worker queue is full! Main() loop can not keep up!") - break - if acquisitionContext.queue_size == acquisitionContext.queue_used: - print("acquisition queue is full! Worker can not keep up!") - break + + workerState = worker.state + + # if worker.get_queue_limits()["soft_limit"] == worker.get_queue_used(): + # print("worker queue is full! Main() loop can not keep up!") + # break + # if acquisitionContext.queue_size == acquisitionContext.queue_used: + # print("acquisition queue is full! Worker can not keep up!") + # break print("acquisition stopped...") acquisitionContext.set_continuous(False) - + worker.stop_processing() cuvis.shutdown() print("finished.") @@ -167,7 +167,7 @@ def run_example_recordVideoFromSessionFile(userSettingsDir=loc_settings, fps = int(fps) run_example_recordVideoFromSessionFile(userSettingsDir, factoryDir, recDir, exposure, - autoExp, fps) + autoExp, fps) while 1: sys.exit(0) From 6d879f30a890561c91bd3a9fd50e511707f4f86b Mon Sep 17 00:00:00 2001 From: Simon Birkholz Date: Mon, 18 Nov 2024 11:01:49 +0100 Subject: [PATCH 2/2] added status calls for worker queues --- .cuvis/log.cfg | 0 .gitignore | 3 +++ EX05_recordSingleImages.py | 6 +++--- EX06_recordVideo.py | 9 ++++++++- EX07_recordVideoFromSessionFile.py | 13 ++++++------- 5 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 .cuvis/log.cfg create mode 100644 .gitignore diff --git a/.cuvis/log.cfg b/.cuvis/log.cfg new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cace7ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/.venv +/.venv39 +/exit diff --git a/EX05_recordSingleImages.py b/EX05_recordSingleImages.py index e3ef8f9..3590043 100644 --- a/EX05_recordSingleImages.py +++ b/EX05_recordSingleImages.py @@ -6,7 +6,7 @@ import cuvis -### default directories and files +# default directories and files data_dir = None lib_dir = None @@ -29,7 +29,7 @@ loc_output = os.path.join(os.getcwd(), "EX05_images") # parameters -loc_exptime = 100 #in ms +loc_exptime = 100 # in ms loc_nimgs = 10 @@ -50,7 +50,7 @@ def run_example_recordSingleImage( acquisitionContext = cuvis.AcquisitionContext(calibration) saveArgs = cuvis.SaveArgs(export_dir=recDir, allow_overwrite=True, - allow_session_file=True) + allow_session_file=True) cubeExporter = cuvis.CubeExporter(saveArgs) while acquisitionContext.state == cuvis.HardwareState.Offline: diff --git a/EX06_recordVideo.py b/EX06_recordVideo.py index 3b6b1f9..ed5009a 100644 --- a/EX06_recordVideo.py +++ b/EX06_recordVideo.py @@ -112,7 +112,14 @@ def run_example_recordVideo(userSettingsDir=loc_settings, print("current handle index: {}".format( workerContainer.mesu.session_info.sequence_number)) - print(workerContainer) + workerState = worker.state + if workerState.resultsInQueue == worker.output_queue_limit: + print("worker output queue is full! Main() loop can not keep up!") + break + + if workerState.measurementsInQueue == worker.mandatory_queue_limit: + print("acquisition queue is full! Worker can not keep up!") + break print("acquisition stopped...") acquisitionContext.set_continuous(False) diff --git a/EX07_recordVideoFromSessionFile.py b/EX07_recordVideoFromSessionFile.py index 0e440b3..ba6d624 100644 --- a/EX07_recordVideoFromSessionFile.py +++ b/EX07_recordVideoFromSessionFile.py @@ -104,7 +104,6 @@ def run_example_recordVideoFromSessionFile(userSettingsDir=loc_settings, while (datetime.now() - start) < timedelta(minutes=2): while 1: - print(worker.state) if worker.has_next_result(): break else: @@ -116,13 +115,13 @@ def run_example_recordVideoFromSessionFile(userSettingsDir=loc_settings, workerContainer.mesu.session_info.sequence_number)) workerState = worker.state + if workerState.resultsInQueue == worker.output_queue_limit: + print("worker output queue is full! Main() loop can not keep up!") + break - # if worker.get_queue_limits()["soft_limit"] == worker.get_queue_used(): - # print("worker queue is full! Main() loop can not keep up!") - # break - # if acquisitionContext.queue_size == acquisitionContext.queue_used: - # print("acquisition queue is full! Worker can not keep up!") - # break + if workerState.measurementsInQueue == worker.mandatory_queue_limit: + print("acquisition queue is full! Worker can not keep up!") + break print("acquisition stopped...") acquisitionContext.set_continuous(False)