|
|
@@ -174,6 +174,7 @@ class SmartShooter(metaclass=SingletonType):
|
|
|
await self.sendMessageSocket(message)
|
|
|
return False, msg_send
|
|
|
cameraInfo = json_msg.get("CameraInfo")
|
|
|
+ print("相机状态msg_result", cameraInfo)
|
|
|
if cameraInfo == None or len(cameraInfo) == 0:
|
|
|
self.connect_status = False
|
|
|
msg_send = (
|
|
|
@@ -332,6 +333,46 @@ class SmartShooter(metaclass=SingletonType):
|
|
|
msg_send = "相机未连接或软件未打开"
|
|
|
return False, msg_send
|
|
|
|
|
|
+ async def setCameraProperties(self, properties: dict, CameraKey=None):
|
|
|
+ """
|
|
|
+ 批量设置相机参数(复用同一个 socket,连续发送多条 SetProperty 消息)
|
|
|
+ :param properties: 参数字典,如 {"ISO": "200", "Aperture": "8", "ShutterSpeed": "1/60"}
|
|
|
+ :return: (是否全部成功, {参数名: 是否成功})
|
|
|
+ """
|
|
|
+ if not properties:
|
|
|
+ return False, {}
|
|
|
+ camera_states, _ = await self.GetCameraInfo(is_send=False, CameraKey=CameraKey)
|
|
|
+ if not camera_states:
|
|
|
+ return False, "请先连接相机"
|
|
|
+ socket, context = self.__create_req()
|
|
|
+ results = {}
|
|
|
+ try:
|
|
|
+ for prop, value in properties.items():
|
|
|
+ req = {}
|
|
|
+ req["msg_type"] = "Request"
|
|
|
+ req["msg_id"] = "SetProperty"
|
|
|
+ req["msg_seq_num"] = 0
|
|
|
+ req["CameraSelection"] = "All"
|
|
|
+ if CameraKey is not None:
|
|
|
+ req["CameraSelection"] = "Single"
|
|
|
+ req["CameraKey"] = CameraKey
|
|
|
+ req["CameraPropertyType"] = str(prop)
|
|
|
+ req["CameraPropertyValue"] = str(value)
|
|
|
+ print("发送设置属性请求", req)
|
|
|
+ json_msg = self.__send_tcp_message(socket, req)
|
|
|
+ results[prop] = json_msg.get("msg_result")
|
|
|
+ all_ok = all(results.values())
|
|
|
+ return all_ok, results
|
|
|
+ except zmq.Again:
|
|
|
+ print(f"批量设置属性超时,继续监听...", results)
|
|
|
+ return all(results.values()) if results else False, results
|
|
|
+ except Exception as e:
|
|
|
+ print(f"批量设置属性异常", e)
|
|
|
+ return False, results
|
|
|
+ finally:
|
|
|
+ socket.close()
|
|
|
+ context.term()
|
|
|
+
|
|
|
def getConfigIso(self, CameraKey=None):
|
|
|
"""获取ISO配置信息"""
|
|
|
camera_configs = settings.getSysConfigs(
|
|
|
@@ -536,7 +577,8 @@ class SmartShooter(metaclass=SingletonType):
|
|
|
return False, "相机未连接或软件未打开"
|
|
|
|
|
|
async def CameraShooter(
|
|
|
- self, msg_type="", goods_art_no="", id=0, is_af=False, delay=0.5, CameraKey=None
|
|
|
+ self, msg_type="", goods_art_no="", id=0, is_af=False, delay=0.5, CameraKey=None,
|
|
|
+ camera_configs=None
|
|
|
):
|
|
|
# 这里延迟一秒钟 等待前置命令完成
|
|
|
await asyncio.sleep(delay)
|
|
|
@@ -566,15 +608,18 @@ class SmartShooter(metaclass=SingletonType):
|
|
|
return False, "请先连接相机"
|
|
|
socket, context = self.__create_req()
|
|
|
try:
|
|
|
- low_iso, high_iso = self.getConfigIso(CameraKey=CameraKey)
|
|
|
- print("LOW_ISO", low_iso)
|
|
|
- print("HIGH_ISO", high_iso)
|
|
|
- if str(low_iso).lower() != "auto":
|
|
|
- await self.setCameraProperty(
|
|
|
- property="ISO", value=str(low_iso), CameraKey=CameraKey
|
|
|
- )
|
|
|
+ if camera_configs is None:
|
|
|
+ low_iso, high_iso = self.getConfigIso(CameraKey=CameraKey)
|
|
|
+ print("LOW_ISO", low_iso)
|
|
|
+ print("HIGH_ISO", high_iso)
|
|
|
+ if str(low_iso).lower() != "auto":
|
|
|
+ await self.setCameraProperty(
|
|
|
+ property="ISO", value=str(low_iso), CameraKey=CameraKey
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ print("low_iso 等于auto就不设置")
|
|
|
else:
|
|
|
- print("low_iso 等于auto就不设置")
|
|
|
+ await self.setCameraProperties(camera_configs, CameraKey=CameraKey)
|
|
|
req = {}
|
|
|
req["msg_type"] = "Request"
|
|
|
req["msg_id"] = "Shoot"
|