Bladeren bron

独立拍照设置

rambo 8 maanden geleden
bovenliggende
commit
8cb62be55a

+ 1 - 1
python/config.ini

@@ -4,7 +4,7 @@ app_name=智慧拍-后端应用
 # 应用版本号
 version=1.0.0
 # 应用host地址
-host=127.0.0.1
+host=10.56.42.176
 # 应用服务启动名称
 app_run=api:app
 # 端口号

+ 1 - 0
python/databases.py

@@ -52,6 +52,7 @@ def insert_photo_records(image_deal_mode: int, goods_art_no: str, image_index:in
     device_config = PhotoRecord(**data)
     session.add(device_config)
     session.commit()
+    session.close()
     return True
 
 

+ 11 - 0
python/mcu/DeviceControl.py

@@ -1117,6 +1117,10 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             case "take_picture":
                 capture_one = DigiCam()
                 try:
+                    camera_is_connect = capture_one.checkCameraConnect()
+                    if camera_is_connect is not True:
+                        self.sendSocketMessage(1,"相机未连接,请检查",device_status=-1)
+                        return
                     capture_one.getCaptureFolderPath()
                     if value > 0:
                         capture_one.auto_focus()
@@ -1222,6 +1226,13 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     pass
                 # self.action_state = 2
             self.action_state = 2
+            self.msg_type = "photo_take_finish"
+            self.sendSocketMessage(
+                code=0,
+                msg=f"货号:{goods_art_no},执行完成",
+                device_status=2,
+            )
+            self.msg_type = "mcu"
 
 
 async def checkMcuConnection(device_ctrl: DeviceControl):

+ 91 - 34
python/mcu/RemoteControlV2.py

@@ -7,6 +7,10 @@ import settings
 from .SerialIns import SerialIns
 from .BaseClass import BaseClass
 from sockets.connect_manager import ConnectionManager
+from databases import SqlQuery, PhotoRecord, CRUD, insert_photo_records
+from .capture.module_digicam import DigiCam
+from .capture.module_watch_dog import FileEventHandler
+
 
 # from .BlueToothMode import BlueToothMode
 class RemoteControlV2(BaseClass):
@@ -56,7 +60,7 @@ class RemoteControlV2(BaseClass):
                     "plugins_mode": "remote_control",
                     "data": port_name,
                 }
-                self.sendSocketMessage(code=0, msg="", data=message,device_status=2)
+                self.sendSocketMessage(code=0, msg="", data=message, device_status=2)
                 print(message)
                 self.port_name = port_name
 
@@ -72,8 +76,10 @@ class RemoteControlV2(BaseClass):
                     "data": "遥控设备V2 打开串口失败",
                 }
                 self.sendSocketMessage(
-                    code=1, msg="遥控设备V2 打开串口失败", data=message,
-                    device_status=-1
+                    code=1,
+                    msg="遥控设备V2 打开串口失败",
+                    data=message,
+                    device_status=-1,
                 )
                 print(message)
                 self.serial_ins = None
@@ -114,7 +120,9 @@ class RemoteControlV2(BaseClass):
             "data": "遥控设备V2 打开蓝牙成功",
         }
         print(message)
-        self.sendSocketMessage(code=0, msg="遥控设备V2 打开蓝牙成功", data=message,device_status=2)
+        self.sendSocketMessage(
+            code=0, msg="遥控设备V2 打开蓝牙成功", data=message, device_status=2
+        )
         self.connect_state = True
         self.is_running = True
         self.set_voltage_value(0)
@@ -143,7 +151,9 @@ class RemoteControlV2(BaseClass):
             flag = "接收器已连接 {}".format(
                 "蓝牙" if self.bluetooth_address else "串口"
             )
-            self.sendSocketMessage(code=0, msg="遥控设备V2 打开蓝牙成功", data=None,device_status=2)
+            self.sendSocketMessage(
+                code=0, msg="遥控设备V2 打开蓝牙成功", data=None, device_status=2
+            )
             self.connect_state = True
             self.is_running = True
         else:
@@ -167,6 +177,7 @@ class RemoteControlV2(BaseClass):
                     msg="电量:{}%".format(voltage_value), device_status=device_status
                 )
         # print("打印===>", flag)
+
     def close_connect(self):
         self.port_name = ""
         self.bluetooth_address = ""
@@ -183,44 +194,89 @@ class RemoteControlV2(BaseClass):
         self.windows.playsound.start()
 
     def handlerAction(self, button_value):
-        '''处理拍照动作按键[左 右]'''
+        """处理拍照动作按键[左 右]"""
         control_program = "执行左脚程序" if button_value == 1 else "执行右脚程序"
-        if self.goods_art_no == None or self.goods_art_no =="":
+        if self.goods_art_no == None or self.goods_art_no == "":
             input_data = {
-                        "data": {
-                            "action": control_program,
-                            "goods_art_no": "",
-                        },
-                        "type": "run_mcu",
-                    }
+                "data": {
+                    "action": control_program,
+                    "goods_art_no": "",
+                },
+                "type": "run_mcu",
+            }
             self.msg_type = "blue_tooth_scan"
             self.sendSocketMessage(
-                        code=0,
-                        msg=f"准备执行[{control_program}]",
-                        data=input_data,
-                        device_status=2,
-                    )
+                code=0,
+                msg=f"准备执行[{control_program}]",
+                data=input_data,
+                device_status=2,
+            )
             self.msg_type = "blue_tooth"
             return
         input_data = {
-                    "data": {
-                        "action": control_program,
-                        "goods_art_no": self.goods_art_no,
-                    },
-                    "type": "run_mcu",
-                }
+            "data": {
+                "action": control_program,
+                "goods_art_no": self.goods_art_no,
+            },
+            "type": "run_mcu",
+        }
         self.msg_type = "blue_tooth_scan"
         self.sendSocketMessage(
-                    code=0,
-                    msg=f"准备执行[{control_program}]",
-                    data=input_data,
-                    device_status=2,
-                )
+            code=0,
+            msg=f"准备执行[{control_program}]",
+            data=input_data,
+            device_status=2,
+        )
         self.goods_art_no = None
         self.msg_type = "blue_tooth"
+
     def handlerTakePhoto(self):
         """处理单独拍照"""
-        pass
+        session = SqlQuery()
+        crud = CRUD(PhotoRecord)
+        record = crud.read(session=session, order_by="id", ascending=False)
+        if record == None:
+            # 发送失败消息
+            self.sendSocketMessage(
+                code=1,
+                msg="单拍失败,请先输入货号或扫码进行组合拍摄",
+                data=None,
+                device_status=2,
+            )
+        else:
+            image_index = record.image_index + 1
+            insert_photo_records(
+                record.image_deal_mode, record.goods_art_no, image_index
+            )
+            capture_one = DigiCam()
+            try:
+                captrure_folder_path = capture_one.getCaptureFolderPath()
+                watch_dog = FileEventHandler()
+                watch_dog.goods_art_no = record.goods_art_no
+                watch_dog.image_index = image_index
+                watch_dog.start_observer(captrure_folder_path)
+                camera_is_connect = capture_one.checkCameraConnect()
+                if camera_is_connect is not True:
+                    self.sendSocketMessage(1, "相机未连接,请检查", device_status=-1)
+                    return
+                capture_one.getCaptureFolderPath()
+                capture_one.run_capture_action("Capture")
+                time.sleep(1)
+                self.msg_type = "photo_take"
+                self.sendSocketMessage(
+                    code=0,
+                    msg="{} 执行完成~".format(
+                        "执行右脚程序"
+                        if record.image_deal_mode == 1
+                        else "执行左脚程序"
+                    ),
+                    device_status=2,
+                )
+                self.msg_type = "blue_tooth"
+            except Exception as e:
+                print("错误信息:",e)
+                self.sendSocketMessage(1, "digicam未初始化,请检查", device_status=-1)
+
     def analysis_received_data(self):
         if not self.connect_state:
             return
@@ -258,13 +314,12 @@ class RemoteControlV2(BaseClass):
             data = {"button_value": button_value}
             message = {"_type": 9, "plugins_mode": "remote_control", "data": data}
             print(message)
-            if button_value in [1,2]:
+            if button_value in [1, 2]:
                 # 扫描货号
                 print("收到货号信息", self.goods_art_no)
                 self.handlerAction(button_value)
             if button_value in [3]:
-                # 处理单拍
-                print("收到货号信息", self.goods_art_no)
+                # 处理遥控器单拍
                 self.handlerTakePhoto()
             self.sendSocketMessage(code=0, msg="", data=message, device_status=2)
             if settings.IS_DEBUG:
@@ -393,7 +448,9 @@ class RemoteControlV2(BaseClass):
                     "data": "遥控设备V2 未连接",
                 }
                 print(message)
-                self.sendSocketMessage(code=1, msg="遥控设备V2 未连接", data=message,device_status=-1)
+                self.sendSocketMessage(
+                    code=1, msg="遥控设备V2 未连接", data=message, device_status=-1
+                )
                 break
             self.analysis_received_data()
 

+ 15 - 3
python/mcu/capture/capture_basic_mode.py

@@ -50,6 +50,17 @@ class CaptureBasic():
             )
         return response.text
 
+    def checkCameraConnect(self):
+        """检查相机是否连接"""
+        response = httpGetHandler(
+            url=self.base_host,
+            params={"slc": "get", "param1": "iso"},
+            headers={},
+        )
+        if response.text == "未将对象引用设置到对象的实例。":
+            return False
+        return True
+
     def run_capture_action(self,command):
         '''执行capture动作'''
         response = httpGetHandler(url=self.base_host, params={"CMD":command},headers={})
@@ -182,6 +193,7 @@ class CaptureBasic():
 if __name__ == "__main__":
     cap = CaptureBasic()
     # cap.auto_focus()
-    cap.auto_focus()
-    cap.run_capture_action("Capture")
-    print("cccc")
+    # cap.auto_focus()
+    # cap.run_capture_action("Capture")
+    camera_conn = cap.checkCameraConnect()
+    print("cccc", camera_conn)

BIN
python/requestments.txt


+ 5 - 0
python/sockets/message_handler.py

@@ -61,6 +61,11 @@ async def handlerSend(
             try:
                 # 判断拍照软件是否初始化
                 digicam = DigiCam()
+                camera_is_connect = digicam.checkCameraConnect()
+                if camera_is_connect is not True:
+                    data = manager.jsonMessage(code=1, msg="相机未连接,请检查")
+                    await manager.send_personal_message(data, websocket)
+                    return
                 digicam.getCaptureFolderPath()
             except:
                 data = manager.jsonMessage(code=1, msg="digicam未初始化,请检查")

+ 8 - 16
python/temp.py

@@ -1,21 +1,13 @@
-from databases import CRUD, SqlQuery, PhotoRecord
+from databases import CRUD, SqlQuery, PhotoRecord, insert_photo_records
 from datetime import datetime
 
 session = SqlQuery()
 crud = CRUD(PhotoRecord)
-res = crud.read(session,conditions={"image_path":None})
-if res:
-    time_str = "2025-03-26 19:29:39.954187"
-    dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
-    # 格式化为年月日时分
-    formatted_time_str = dt.strftime("%Y-%m-%d %H:%M:%S")
-    update = {
-        "image_path": "sadasda",
-        "image_index": 0,
-        "photo_create_time": datetime.strptime(formatted_time_str, "%Y-%m-%d %H:%M:%S"),
-    }
-    crud.update(
-        session,
-        res.id,
-        **update,
+record = crud.read(session=session, order_by="id", ascending=False)
+if record == None:
+    # 发送失败消息
+    pass
+else:
+    insert_photo_records(
+        record.image_deal_mode, record.goods_art_no, record.image_index+1
     )