소스 검색

获取相机属性值

rambo 3 달 전
부모
커밋
d664d50ab3
4개의 변경된 파일329개의 추가작업 그리고 19개의 파일을 삭제
  1. 12 7
      python/api.py
  2. 248 0
      python/docs/socket命令.md
  3. 52 12
      python/mcu/capture/smart_shooter_class.py
  4. 17 0
      python/sockets/message_handler.py

+ 12 - 7
python/api.py

@@ -25,6 +25,9 @@ from service.base import check_move_goods_art_no_folder
 import hashlib
 import win32api, win32gui, win32con
 from win32gui import EnumWindows, GetWindowText
+from mcu.capture.smart_shooter_class import SmartShooter
+
+
 def calculate_md5(filepath):
     # 打开文件,以二进制只读模式打开
     with open(filepath, "rb") as f:
@@ -139,9 +142,7 @@ def fromExcelHandler(params: HandlerDetail):
             raise UnicornException("没有可用货号数据")
         # 货号目录不存在再去进行移动和创建操作
         if move_folder_array.get(goods_art_no) == None:
-            image_dir = "{}/data/".format(os.getcwd()).replace(
-                "\\", "/"
-            )
+            image_dir = "{}/data/".format(os.getcwd()).replace("\\", "/")
             check_path(image_dir)
             for idx, itemImg in enumerate(images):
                 if itemImg.image_path == "" or itemImg.image_path == None:
@@ -248,10 +249,14 @@ def fromExcelHandler(params: HandlerDetail):
                     "\\", "/"
                 )
                 handler_result_folder = os.path.dirname(out_put_dir_path)
-                if len(config_data["success_handler"])==0:
+                if len(config_data["success_handler"]) == 0:
                     for good_art in goods_art_no_arrays:
                         handler_result.append(
-                            {"goods_art_no": good_art, "success": False, "info": "处理失败"}
+                            {
+                                "goods_art_no": good_art,
+                                "success": False,
+                                "info": "处理失败",
+                            }
                         )
                 else:
                     handler_result = config_data["success_handler"]
@@ -358,8 +363,7 @@ async def handle_detail(request: Request, params: HandlerDetail):
         "image_dir": limit_path,
         "image_order": (
             "俯视,侧视,后跟,鞋底,内里"
-            if params.template_image_order == None
-            or params.template_image_order == ""
+            if params.template_image_order == None or params.template_image_order == ""
             else params.template_image_order
         ),
         "goods_art_no": "",
@@ -813,6 +817,7 @@ def logo_list():
     return {"code": 0, "msg": "操作成功", "data": logo_list}
 
 
+
 @app.post("/add_logo", description="添加logo")
 def add_logo(params: LogoParams):
     logo_path = params.logo_path.replace("\\", "/")

+ 248 - 0
python/docs/socket命令.md

@@ -659,4 +659,252 @@ _(该命令用于单独自定义配置中某一项的单独调整测试,不进
 }
 ```
 
+
+
+
+##### 获取相机属性-ISO等相关信息
+* data:{}
+* type:
+    * 当该字段为smart_shooter_get_camera_property时,代表获取相机属性-ISO等相关信息
+##### 请求示例
+```python
+{
+    "data":{},
+    "type": "smart_shooter_get_camera_property"
+}
+```
+##### 响应示例-获取成功
+<mark>如果相机未连接可能data参数为空,需要注意判断</mark>
+* data释意:
+    * 该值是通过smartshooter直接获取的,是当前相机的所有属性值,前端在使用对应值得时候,需要遍历数组,判断对应:CameraPropertyType,如CameraPropertyType=="ISO" 后获取当前对象,其中“CameraPropertyValue”为相机当前属性得当前值,“CameraPropertyRange”为当前属性值得范围
+```python
+{
+    "code": 0,
+    "msg": "操作成功",
+    "status": 2,
+    "data": [
+        {
+            "CameraPropertyType": "Aperture",
+            "CameraPropertyValue": "22",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "4",
+                "4.5",
+                "5.0",
+                "5.6",
+                "6.3",
+                "7.1",
+                "8",
+                "9",
+                "10",
+                "11",
+                "13",
+                "14",
+                "16",
+                "18",
+                "20",
+                "22",
+                "25"
+            ]
+        },
+        {
+            "CameraPropertyType": "ShutterSpeed",
+            "CameraPropertyValue": "1/125",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "Bulb",
+                "30",
+                "25",
+                "20",
+                "15",
+                "13",
+                "10",
+                "8",
+                "6",
+                "5",
+                "4",
+                "3.2",
+                "2.5",
+                "2",
+                "1.6",
+                "1.3",
+                "1",
+                "0.8",
+                "0.6",
+                "0.5",
+                "0.4",
+                "0.3",
+                "1/4",
+                "1/5",
+                "1/6",
+                "1/8",
+                "1/10",
+                "1/13",
+                "1/15",
+                "1/20",
+                "1/25",
+                "1/30",
+                "1/40",
+                "1/50",
+                "1/60",
+                "1/80",
+                "1/100",
+                "1/125",
+                "1/160",
+                "1/200",
+                "1/250",
+                "1/320",
+                "1/400",
+                "1/500",
+                "1/640",
+                "1/800",
+                "1/1000",
+                "1/1250",
+                "1/1600",
+                "1/2000",
+                "1/2500",
+                "1/3200",
+                "1/4000"
+            ]
+        },
+        {
+            "CameraPropertyType": "ISO",
+            "CameraPropertyValue": "6400",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "AUTO",
+                "100",
+                "200",
+                "400",
+                "800",
+                "1600",
+                "3200",
+                "6400",
+                "12800"
+            ]
+        },
+        {
+            "CameraPropertyType": "Exposure",
+            "CameraPropertyValue": "0.0",
+            "CameraPropertyIsWriteable": false,
+            "CameraPropertyRange": [
+                "0.0"
+            ]
+        },
+        {
+            "CameraPropertyType": "Quality",
+            "CameraPropertyValue": "JPEG Fine Large",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "JPEG Fine Large",
+                "JPEG Normal Large",
+                "JPEG Fine Medium",
+                "JPEG Normal Medium",
+                "JPEG Fine Small1",
+                "JPEG Normal Small1",
+                "JPEG Fine Small2",
+                "JPEG Fine Small3",
+                "RAW + JPEG Fine Large",
+                "RAW"
+            ]
+        },
+        {
+            "CameraPropertyType": "ProgramMode",
+            "CameraPropertyValue": "Manual",
+            "CameraPropertyIsWriteable": false,
+            "CameraPropertyRange": [
+                "Manual"
+            ]
+        },
+        {
+            "CameraPropertyType": "MeteringMode",
+            "CameraPropertyValue": "Spot",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "Evaluative",
+                "Partial",
+                "Spot",
+                "Center Weighted"
+            ]
+        },
+        {
+            "CameraPropertyType": "FocusMode",
+            "CameraPropertyValue": "MF",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "AF Single",
+                "AF Auto",
+                "AF Continuous",
+                "MF"
+            ]
+        },
+        {
+            "CameraPropertyType": "DriveMode",
+            "CameraPropertyValue": "Continuous",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "Single Frame",
+                "Continuous",
+                "10s Timer",
+                "2s Timer",
+                "10s Timer Continuous"
+            ]
+        },
+        {
+            "CameraPropertyType": "WhiteBalance",
+            "CameraPropertyValue": "Cloudy",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "AUTO",
+                "Daylight",
+                "Shade",
+                "Cloudy",
+                "Tungsten",
+                "Fluorescent",
+                "Flash",
+                "Manual"
+            ]
+        },
+        {
+            "CameraPropertyType": "ColourTemperature",
+            "CameraPropertyValue": "",
+            "CameraPropertyIsWriteable": false,
+            "CameraPropertyRange": []
+        },
+        {
+            "CameraPropertyType": "Storage",
+            "CameraPropertyValue": "Disk",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "Card",
+                "Disk",
+                "Both",
+                "JPEG"
+            ]
+        },
+        {
+            "CameraPropertyType": "MirrorLockup",
+            "CameraPropertyValue": "Off",
+            "CameraPropertyIsWriteable": true,
+            "CameraPropertyRange": [
+                "Off",
+                "On"
+            ]
+        },
+        {
+            "CameraPropertyType": "PixelShiftMode",
+            "CameraPropertyValue": "",
+            "CameraPropertyIsWriteable": false,
+            "CameraPropertyRange": []
+        },
+        {
+            "CameraPropertyType": "ControlMode",
+            "CameraPropertyValue": "",
+            "CameraPropertyIsWriteable": false,
+            "CameraPropertyRange": []
+        }
+    ],
+    "msg_type": "smart_shooter_get_camera_property"
+}
+```
 ##### 未完待续.....

+ 52 - 12
python/mcu/capture/smart_shooter_class.py

@@ -24,17 +24,11 @@ class SmartShooter(metaclass=SingletonType):
         self.stop_listen = False
         # 相机连接状态
         self.connect_status = False
-        # self.preview_queue = asyncio.Queue()
         # 实时预览状态
         self.perview_state = False
         self.callback_listen = None
         self.listen_init = None
         self.websocket = None
-        # loop = asyncio.get_event_loop()
-        # loop.create_task(
-        #         self.connect_listen(),
-        #         name="connect_listen",
-        #     )
 
     def __send_tcp_message(self, socket, msg):
         # await asyncio.sleep(0.01)
@@ -66,7 +60,56 @@ class SmartShooter(metaclass=SingletonType):
         listen_socket.setsockopt(zmq.LINGER, 0)  # 设置为 0 表示不等待未完成的操作
         listen_socket.connect(self.LISTEN_REQ)
         return listen_socket, context
-
+    async def GetCameraProperty(self):
+        '''获取相机属性'''
+        await asyncio.sleep(0.01)
+        """
+            实时获取相机信息,是否连接、软件是否被打开
+            """
+        socket, context = self.__create_req(time_out=2)
+        try:
+            req = {}
+            req["msg_type"] = "Request"
+            req["msg_id"] = "GetCamera"
+            req["msg_seq_num"] = 0
+            req["CameraSelection"] = "All"
+            json_msg = self.__send_tcp_message(socket, req)
+            msg_result = json_msg.get("msg_result")
+            if not msg_result:
+                self.connect_status = False
+                msg_send = "相机未连接或软件未打开"
+                return False, msg_send
+            cameraInfo = json_msg.get("CameraInfo")
+            if cameraInfo == None or len(cameraInfo) == 0:
+                self.connect_status = False
+                msg_send = "相机未连接"
+                return False, "相机未连接"
+            # 链接的相机
+            CameraStatus = False
+            CameraIndex =-1
+            for cam_idx,item in enumerate(cameraInfo):
+                CameraStatus = item.get("CameraStatus") in ["Ready", "Busy"]
+                if CameraStatus == True:
+                    CameraIndex = cam_idx
+                    break
+            # CameraStatus = connect_camera.get("CameraStatus")
+            if not CameraStatus:
+                self.connect_status = False
+                msg_send = "相机未连接"
+                return False, msg_send
+            self.connect_status = True
+            msg_send = "相机已连接"
+            print("相机已连接状态信息---->", cameraInfo)
+            return True, cameraInfo[CameraIndex].get("CameraPropertyInfo")
+        except zmq.Again:
+            msg_send = "相机未连接或软件未打开"
+            return False, msg_send
+        except Exception as e:
+            self.connect_status = False
+            socket.close()
+            context.term()
+            msg_send = "相机未连接或软件未打开"
+            return False, msg_send
     async def GetCameraInfo(self, is_send=True, msg_type=""):
         await asyncio.sleep(0.01)
         self.msg_type = msg_type
@@ -114,13 +157,9 @@ class SmartShooter(metaclass=SingletonType):
                     )
                 return False, "相机未连接"
             # 链接的相机
-            # connect_camera = cameraInfo
-            # for item in cameraInfo:
-            #     print("相机状态::::>>>>>>>", item.get("CameraStatus"))
             CameraStatus = any(
                 item.get("CameraStatus") in ["Ready", "Busy"] for item in cameraInfo
             )
-            # CameraStatus = connect_camera.get("CameraStatus")
             if not CameraStatus:
                 self.connect_status = False
                 msg_send = "相机未连接"
@@ -149,6 +188,7 @@ class SmartShooter(metaclass=SingletonType):
                 await self.websocket_manager.send_personal_message(
                     message, self.websocket
                 )
+            print("相机已连接状态信息---->", cameraInfo)
             return True, "相机已连接"
         except zmq.Again:
             print("获取相机信息超时,继续监听...")
@@ -239,7 +279,7 @@ class SmartShooter(metaclass=SingletonType):
             socket.close()
             context.term()
             msg_send = "相机未连接或软件未打开"
-            return False, "相机未连接或软件未打开"
+            return False, msg_send
 
     async def EnableCameraPreview(self, enable_status=True, msg_type=""):
         self.msg_type = msg_type

+ 17 - 0
python/sockets/message_handler.py

@@ -274,6 +274,23 @@ async def handlerSend(
                 ),
                 name="smart_shooter_enable_preview",
             )
+        case "smart_shooter_get_camera_property":
+            """
+            启动相机或关闭实时预览
+            """
+            msg_type = "smart_shooter_get_camera_property"
+            code = 0
+            status, info = await smart_shooter.GetCameraProperty()
+            code = 1 if status == False else 0
+            msg = info if status == False else "操作成功"
+            data = info if status == True else {}
+            data = manager.jsonMessage(
+                code=code,
+                msg=msg,
+                msg_type=msg_type,
+                data=data,
+            )
+            await manager.send_personal_message(data, websocket)
         case "smart_shooter_photo_take":
             """
             获取相机信息,是否连接