diff --git a/src/nrtk_explorer/app/embeddings.py b/src/nrtk_explorer/app/embeddings.py index 9abb60f..c761e5f 100644 --- a/src/nrtk_explorer/app/embeddings.py +++ b/src/nrtk_explorer/app/embeddings.py @@ -276,7 +276,7 @@ def settings_widget(self): with html.Div(trame_server=self.server, classes="col"): with html.Div(classes="q-gutter-y-md"): quasar.QBtnToggle( - v_model=("dimensionality", "3"), + v_model=("dimensionality", "2"), toggler_color="primary", flat=True, spread=True, diff --git a/src/nrtk_explorer/library/multiprocess_predictor.py b/src/nrtk_explorer/library/multiprocess_predictor.py index ba03d70..5966f44 100644 --- a/src/nrtk_explorer/library/multiprocess_predictor.py +++ b/src/nrtk_explorer/library/multiprocess_predictor.py @@ -7,6 +7,8 @@ import uuid from .predictor import Predictor +WORKER_RESPONSE_TIMEOUT = 40 + def _child_worker(request_queue, result_queue, model_name, force_cpu): signal.signal(signal.SIGINT, signal.SIG_IGN) # Ignore Ctrl+C in child @@ -31,8 +33,7 @@ def _child_worker(request_queue, result_queue, model_name, force_cpu): if command == "SET_MODEL": try: predictor = Predictor( - model_name=payload["model_name"], - force_cpu=payload["force_cpu"], + model_name=payload["model_name"], force_cpu=payload["force_cpu"] ) result_queue.put((req_id, {"status": "OK"})) except Exception as e: @@ -90,6 +91,23 @@ def _start_process(self): ) self._proc.start() + def _get_response(self, req_id, timeout=WORKER_RESPONSE_TIMEOUT): + while True: + try: + r_id, data = self._result_queue.get(timeout=timeout) + except queue.Empty: + raise TimeoutError("No response from worker.") + if r_id == req_id: + return data + + def _wait_for_response(self, req_id): + return self._get_response(req_id, WORKER_RESPONSE_TIMEOUT) + + async def _wait_for_response_async(self, req_id): + return await asyncio.get_event_loop().run_in_executor( + None, self._get_response, req_id, WORKER_RESPONSE_TIMEOUT + ) + def set_model(self, model_name, force_cpu=False): with self._lock: self.model_name = model_name @@ -118,21 +136,6 @@ async def infer(self, images): resp = await self._wait_for_response_async(req_id) return resp.get("result") - async def _wait_for_response_async(self, req_id): - return await asyncio.get_event_loop().run_in_executor(None, self._get_response, req_id, 40) - - def _wait_for_response(self, req_id): - return self._get_response(req_id, 40) - - def _get_response(self, req_id, timeout=40): - while True: - try: - r_id, data = self._result_queue.get(timeout=timeout) - except queue.Empty: - raise TimeoutError("No response from worker.") - if r_id == req_id: - return data - def reset(self): with self._lock: req_id = str(uuid.uuid4()) diff --git a/vue-components/src/components/ScatterPlot.vue b/vue-components/src/components/ScatterPlot.vue index d774641..0e73f70 100644 --- a/vue-components/src/components/ScatterPlot.vue +++ b/vue-components/src/components/ScatterPlot.vue @@ -42,7 +42,7 @@ type Events = { const emit = defineEmits() const plotContainer = ref() -const selectMode = ref(false) +const selectMode = ref(true) const colors = ref({ viridis, cividis, magma, inferno }) const colorMapName = ref('viridis') const domain: Vector2 = [0, 1] @@ -174,6 +174,8 @@ onMounted(() => { // Without this there is an error upon browser refresh when sequences are defined. scatterPlot.render(dataset.value) + // needs to be after render or pan mode and select are initially active at the same time + scatterPlot.setSelectMode() }) function emitCameraPosition() {