Ver código fonte

```
feat(smart_shooter): 添加ISO范围获取功能并支持多相机模式

新增get_iso_range方法用于从相机数据中获取ISO可调范围,
修改GetCameraInfo方法添加isMultCameraMode参数,
在CameraLists构建时集成CameraISO信息,
调整initConfigIsoSettings方法以支持多相机模式配置,
更新message_handler中的相机信息获取逻辑以传递多相机模式参数
```

rambo 2 semanas atrás
pai
commit
00761de679

+ 37 - 4
python/mcu/capture/smart_shooter_class.py

@@ -122,8 +122,23 @@ class SmartShooter(metaclass=SingletonType):
             context.term()
             msg_send = "相机未连接或软件未打开"
             return False, msg_send
+    def get_iso_range(self,camera_info):
+        """
+        从相机数据中获取 ISO 的可调范围
+        :param camera_data: 相机状态数据列表 (即你提供的那个长列表)
+        :return: ISO 范围列表,如果未找到则返回 None
+        """
+
+        # 获取属性信息列表
+        property_info_list = camera_info.get('CameraPropertyInfo', [])
+
+        for prop in property_info_list:
+            # 查找 CameraPropertyType 等于 'ISO' 的项
+            if prop.get('CameraPropertyType') == 'ISO':
+                return prop.get('CameraPropertyRange')
 
-    async def GetCameraInfo(self, is_send=True, msg_type="", CameraKey=None):
+        return None
+    async def GetCameraInfo(self, is_send=True, msg_type="", CameraKey=None,isMultCameraMode=False):
         await asyncio.sleep(0.001)
         # self.msg_type = msg_type
         """
@@ -177,12 +192,14 @@ class SmartShooter(metaclass=SingletonType):
             CameraStatus = any(
                 item.get("CameraStatus") in ["Ready", "Busy"] for item in cameraInfo
             )
+            # 在这里处理
             CameraLists = [
                 {
                     "CameraSelection": item.get("CameraSelection"),
                     "CameraKey": item.get("CameraKey"),
                     "CameraName": item.get("CameraName"),
                     "CameraStatus": item.get("CameraStatus") in ["Ready", "Busy"],
+                    "CameraISO": self.get_iso_range(item),
                 }
                 for item in cameraInfo
             ]
@@ -218,7 +235,9 @@ class SmartShooter(metaclass=SingletonType):
                 }
                 await self.sendMessageSocket(message)
             # print("相机已连接状态信息---->", cameraInfo)
-            self.initConfigIsoSettings(CameraLists=CameraLists)
+            self.initConfigIsoSettings(
+                CameraLists=CameraLists, isMultCameraMode=isMultCameraMode
+            )
             return True, "相机已连接"
         except zmq.Again:
             print("获取相机信息超时,继续监听...")
@@ -337,7 +356,7 @@ class SmartShooter(metaclass=SingletonType):
         high_iso = Itemiso.get("high", 6400)
         return low_iso, high_iso
 
-    def initConfigIsoSettings(self, CameraLists=[]):
+    def initConfigIsoSettings(self, CameraLists=[],isMultCameraMode=False):
         if not CameraLists:
             return None
         """获取ISO配置信息"""
@@ -347,10 +366,24 @@ class SmartShooter(metaclass=SingletonType):
             None,
         )
         temp_A_point = camera_configs.get("A", None)
+        points = {"A": {}, "B": {}, "C": {}}
         if temp_A_point is not None:
             print("已配置无需更新")
+            basic_iso = temp_A_point.get("iso", {"low": 100, "high": 6400})
+            if isMultCameraMode == False:
+                # 如果客户是单相机版本用户,需要每次同步camera信息
+                itemSettings = CameraLists[0]
+                points["A"] = {
+                    **itemSettings,
+                    "iso": basic_iso,
+                }
+                sys_iso_config = {"key": "camera_configs", "value": {"iso_config": points}}
+                sys_iso_config: SysConfigParams
+                print("单相机用户同步相机配置", sys_iso_config)
+                settings.updateSysConfigs(params=sys_iso_config)
+                # 同步本地到线上
+                settings.sync_sys_configs2Online()
             return None
-        points = {"A": {}, "B": {}, "C": {}}
         for idx,item in enumerate(points):
             low_iso = camera_configs.get("low", 100)
             high_iso = camera_configs.get("high", 6400)

+ 6 - 1
python/sockets/message_handler.py

@@ -426,8 +426,13 @@ async def handlerSend(
             """
             # token
             # env
+            isMultCameraMode = data.get("isMultCameraMode",False)
             loop.create_task(
-                smart_shooter.GetCameraInfo(msg_type="smart_shooter_getinfo",is_send=True),
+                smart_shooter.GetCameraInfo(
+                    msg_type="smart_shooter_getinfo",
+                    is_send=True,
+                    isMultCameraMode=isMultCameraMode,
+                ),
                 name="smart_shooter_getinfo",
             )
         case "smart_shooter_enable_preview":