Parcourir la source

Fixed some bugs.

jcsyshc il y a 1 an
Parent
commit
38ceec86cb

+ 6 - 3
data/config_endo_guide_oldhead.yaml

@@ -21,10 +21,13 @@ monitor:
 augment_list:
   - name: Head
     transform_var: head_in_tracker_denoised
-    model: /home/tpx/data/OldHead/OldBone.stl
+    model: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/femur.stl
   - name: ExtraA
     transform_var: head_in_tracker_denoised
-    model: /home/tpx/data/OldHead/Nerve.stl
+    model: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/Femur_1.stl
+  - name: ExtraB
+    transform_var: head_in_tracker_denoised
+    model: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/Femur_2.stl
 #  - name: ExtraB
 #    transform_var: head_in_tracker_denoised
 #    model: /home/tpx/data/OldHead/model2.stl
@@ -33,7 +36,7 @@ probe_model: /home/tpx/data/Probe.stl
 
 registration_list:
   - name: Head
-    model_file: /home/tpx/data/OldHead/OldBone.stl
+    model_file: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/femur.stl
     collect_obj: point_picker_in_head_ref
     collect_var: picked_point_in_head_ref
     target_var: head_in_head_ref

+ 7 - 7
data/config_remote_ar_v2.yaml

@@ -44,16 +44,16 @@ right_camera_transform: right_camera_in_tracker_denoised
 augment_list:
   - name: Head
     transform_var: head_in_tracker_denoised
-    model: /home/tpx/ext/data/models/old_head/bone.stl
+    model: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/femur.stl
   - name: ExtraA
     transform_var: head_in_tracker_denoised
-    model: /home/tpx/ext/data/models/old_head/nerve.stl
+    model: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/Femur_1.stl
 
 probe_model: /home/tpx/data/models/Probe.stl
 registration_list:
   - name: Bone
-    model_file: /home/tpx/ext/data/models/old_head/bone.stl
-    collect_obj: point_picker_in_femur_ref
-    collect_var: picked_point_in_femur_ref
-    target_var: femur_in_femur_ref
-    probe_var: probe_in_femur
+    model_file: /media/tpx/590d7229-f129-4612-b7ff-6d2cb3fe49b2/home/tpx/project/RemoteAR3/data/models/femur.stl
+    collect_obj: point_picker_in_head_ref
+    collect_var: picked_point_in_head_ref
+    target_var: head_in_head_ref
+    probe_var: probe_in_head

+ 7 - 7
data/sophiar_config_endo_guide_oldhead.json

@@ -16,13 +16,13 @@
       "name": "head_in_head_ref",
       "type": "transform_obj",
       "value": [
-        233.96470027218044,
-        42.187788316685904,
-        306.58865752584546,
-        0.8190555328954703,
-        -0.26342165437712295,
-        0.24510986086006864,
-        -0.4468536921048027
+        9.499746941153802,
+        -100.04300888417765,
+        -22.833836467518587,
+        0.23732746969499757,
+        0.5426767216362087,
+        0.48153093391285473,
+        0.6459919563023672
       ]
     },
     {

+ 1 - 1
src/core_v2/meta_helper.hpp

@@ -38,7 +38,7 @@ struct meta_base_v2 {
         if (&o.mu < &mu) { read_lock.lock(); write_lock.lock(); }
         else { write_lock.lock(); read_lock.lock(); } // prevent deadlock
         //@formatter:on
-        meta.merge(o.meta);
+        meta.insert(o.meta.begin(), o.meta.end());
     }
 
     template<typename T = value_type>

+ 2 - 0
src/image_process_v5/image_process.cpp

@@ -189,6 +189,8 @@ sp_image image_stereo_combine(const sp_image &left, const sp_image &right) {
     auto [left_view, right_view] = image_stereo_split_view(ret_img);
     copy_sp_image(left, left_view);
     copy_sp_image(right, right_view);
+    ret_img.merge_meta(left);
+    ret_img.merge_meta(right);
     return ret_img;
 }
 

+ 29 - 6
src/image_process_v5/video_stabilization.cpp

@@ -305,15 +305,31 @@ struct video_stabilization_ui::impl {
     std::optional<video_stabilization> video_stab;
 
     void image_callback_impl() const {
-        const auto img = OBJ_QUERY(sp_image, conf.in_name);
-        if (const auto ret = video_stab->process(img)) {
-            OBJ_SAVE(conf.out_name, *ret);
+        if (!conf.opts.stereo_mode) {
+            const auto img = OBJ_QUERY(sp_image, conf.in_name);
+            if (const auto ret = video_stab->process(img)) {
+                OBJ_SAVE(conf.out_name, *ret);
+            }
+        } else {
+            auto img_left = OBJ_QUERY(sp_image, conf.in_name);
+            auto img_right = OBJ_QUERY(sp_image, conf.in2_name);
+            auto img = image_stereo_combine(img_left, img_right);
+            if (auto ret = video_stab->process(img)) {
+                auto [img_left, img_right] = image_stereo_split_view(*ret);
+                OBJ_SAVE(conf.out_name, img_left);
+                OBJ_SAVE(conf.out2_name, img_right);
+            }
         }
     }
 
     void image_callback() {
         if (passthrough) {
-            OBJ_SAVE(conf.out_name, OBJ_QUERY(sp_image, conf.in_name));
+            try {
+                OBJ_SAVE(conf.out_name, OBJ_QUERY(sp_image, conf.in_name));
+                if (conf.opts.stereo_mode) {
+                    OBJ_SAVE(conf.out2_name, OBJ_QUERY(sp_image, conf.in2_name));
+                }
+            } catch (...) { (void) 0; }
             return;
         }
 
@@ -332,16 +348,23 @@ struct video_stabilization_ui::impl {
         }
     }
 
+    void reset_video_stab() {
+        MAIN_DETACH([this] {
+            work_tp->wait();
+            video_stab.reset();
+        });
+    }
+
     void show_ui() {
         if (ImGui::Checkbox("Passthrough", &passthrough)) {
             if (!passthrough) {
-                video_stab.reset();
+                reset_video_stab();
             }
         }
         if (!passthrough) {
             ImGui::SameLine();
             if (ImGui::Button("Reset")) {
-                video_stab.reset();
+                reset_video_stab();
             }
             ImGui::DragInt("Frame Delay",
                            &conf.opts.st_conf.future_frames, 1, 1);

+ 1 - 0
src/image_process_v5/video_stabilization.h

@@ -35,6 +35,7 @@ class video_stabilization_ui {
 public:
     struct create_config {
         obj_name_type in_name = 0, out_name = 0;
+        obj_name_type in2_name = 0, out2_name = 0; // for stereo mode
         video_stabilization::create_config opts = {};
     };
 

+ 27 - 22
src/impl/apps/remote_ar/remote_ar_v2.cpp

@@ -18,9 +18,6 @@ app_remote_ar_v2::app_remote_ar_v2(create_config _conf)
     : main_conf(std::move(_conf)) {
     auto conf = main_conf.ext_conf;
 
-    // OBJ_SIG(left_img_id)->connect([](auto _) { auto img = OBJ_QUERY(sp_image, left_img_id); raise(SIGTRAP); });
-    // OBJ_SIG(output_img_id)->connect([](auto _) { auto img = OBJ_QUERY(sp_image, left_img_id); raise(SIGTRAP); });
-
     if (true) {
         auto sub_conf = mvs_camera_ui::create_config{.ctx = main_conf.asio_ctx};
         sub_conf.cameras.push_back({.dev_name = LOAD_STR("left_camera_name"), .img_name = left_img_id});
@@ -40,25 +37,33 @@ app_remote_ar_v2::app_remote_ar_v2(create_config _conf)
     }
 
     if (true) {
-        auto sub_conf = image_enhance_ui::create_config{
-            .in_name = left_img_id, .out_name = left_img_fix_id
-        };
-        img_isp.emplace(sub_conf);
+        auto sub_conf = image_enhance_ui::create_config();
+        sub_conf.in_name = left_img_id;
+        sub_conf.out_name = left_fix_id;
+        left_cam.img_isp.emplace(sub_conf);
+
+        sub_conf.in_name = right_img_id;
+        sub_conf.out_name = right_fix_id;
+        right_cam.img_isp.emplace(sub_conf);
+        right_cam.img_isp->sync_with(&left_cam.img_isp.value());
     }
 
     if (true) {
-        auto sub_conf = video_stabilization_ui::create_config{
-            .in_name = left_aug_id, .out_name = left_img_stab_id
-        };
+        auto sub_conf = video_stabilization_ui::create_config();
+        sub_conf.opts.stereo_mode = true;
+        sub_conf.in_name = left_aug_id;
+        sub_conf.in2_name = right_aug_id;
+        sub_conf.out_name = left_stab_id;
+        sub_conf.out2_name = right_stab_id;
         video_stab.emplace(sub_conf);
     }
 
     if (true) {
         auto sub_conf = stereo_output_helper::create_config();
-        sub_conf.left_name = left_aug_id;
-        sub_conf.right_name = right_aug_id;
+        sub_conf.left_name = left_stab_id;
+        sub_conf.right_name = right_stab_id;
         sub_conf.out_name = output_img_id;
-        // sub_conf.size = cv::Size(1920, 804);
+        sub_conf.size = cv::Size(1920, 804);
         sub_conf.halve_width = false;
         output_helper.emplace(sub_conf);
     }
@@ -66,8 +71,8 @@ app_remote_ar_v2::app_remote_ar_v2(create_config _conf)
     if (true) {
         auto sub_conf = image_viewer_v2::create_config();
         sub_conf.items.emplace_back(uvc_img_id, "Endoscope", true);
-        sub_conf.items.emplace_back(left_img_stab_id, "Left", true);
-        sub_conf.items.emplace_back(right_aug_id, "Right", true);
+        sub_conf.items.emplace_back(left_stab_id, "Left", true);
+        sub_conf.items.emplace_back(right_stab_id, "Right", true);
         bg_viewer.emplace(sub_conf);
     }
 
@@ -120,7 +125,7 @@ app_remote_ar_v2::app_remote_ar_v2(create_config _conf)
     if (true) {
         auto sub_conf = image_augment_helper_v2::create_config();
         sub_conf.img_flip_y = false;
-        sub_conf.img_name = left_img_fix_id;
+        sub_conf.img_name = left_fix_id;
         sub_conf.out_name = left_aug_id;
         sub_conf.manager = &aug_manager.value();
         sub_conf.ctx = main_conf.asio_ctx;
@@ -130,7 +135,7 @@ app_remote_ar_v2::app_remote_ar_v2(create_config _conf)
         left_cam.aug_helper->set_camera_info(
             camera_intrinsic::from_yaml(LOAD_SUB("left_camera")).to_v0());
 
-        sub_conf.img_name = right_img_id;
+        sub_conf.img_name = right_fix_id;
         sub_conf.out_name = right_aug_id;
         sub_conf.transform_var = LOAD_STR("right_camera_transform");
         right_cam.aug_helper.emplace(sub_conf);
@@ -157,7 +162,7 @@ void app_remote_ar_v2::show_ui() {
             if (true) {
                 auto id_guard = imgui_id_guard("image_enhance");
                 ImGui::SeparatorText("Enhance");
-                img_isp->show_ui();
+                left_cam.img_isp->show_ui();
             }
             if (true) {
                 auto id_guard = imgui_id_guard("video_stabilization");
@@ -166,10 +171,10 @@ void app_remote_ar_v2::show_ui() {
             }
         }
 
-        if (ImGui::CollapsingHeader("UVC Camera")) {
-            auto id_guard = imgui_id_guard("uvc_camera");
-            uvc_cam->show();
-        }
+        // if (ImGui::CollapsingHeader("UVC Camera")) {
+        //     auto id_guard = imgui_id_guard("uvc_camera");
+        //     uvc_cam->show();
+        // }
 
         // if (ImGui::CollapsingHeader("Endoscope Calibration")) {
         //     auto id_guard = imgui_id_guard("endo_calib");

+ 8 - 13
src/impl/apps/remote_ar/remote_ar_v2.h

@@ -33,24 +33,18 @@ public:
 private:
     create_config main_conf;
 
-    static constexpr obj_name_type
-            bg_img_id = 0,
-            left_img_id = 1,
-            right_img_id = 2,
-            output_img_id = 3,
-            uvc_img_id = 4,
-            left_img_fix_id = 5,
-            left_img_stab_id = 6,
-            left_aug_id = 7,
-            right_aug_id = 8,
-            left_cam_info_id = 9,
-            right_cam_info_id = 10;
+    enum : obj_name_type {
+        bg_img_id,
+        left_img_id, left_fix_id, left_aug_id, left_stab_id,
+        right_img_id, right_fix_id, right_aug_id, right_stab_id,
+        output_img_id,
+        uvc_img_id,
+    };
 
     obj_name_type extra_name = 100;
 
     std::optional<mvs_camera_ui> mvs_cam;
     std::optional<uvc_camera_ui> uvc_cam;
-    std::optional<image_enhance_ui> img_isp;
     std::optional<video_stabilization_ui> video_stab;
     std::optional<stereo_output_helper> output_helper;
     std::optional<image_viewer_v2> bg_viewer;
@@ -64,6 +58,7 @@ private:
 
     std::optional<augment_manager_v2> aug_manager;
     struct {
+        std::optional<image_enhance_ui> img_isp;
         std::optional<image_augment_helper_v2> aug_helper;
     } left_cam, right_cam;
 

+ 1 - 0
src/module/impl/image_augment_helper_v2.cpp

@@ -59,6 +59,7 @@ void image_augment_helper_v2::impl::img_callback(obj_name_type name) {
 
     q_this->post_render_sig();
     output_img = img_down->download_sp(COLOR_RGB);
+    output_img.merge_meta(img);
     OBJ_SAVE(conf.out_name, output_img);
 }