Selaa lähdekoodia

吊篮后端测试成功,吊具后端未进行测试

dxc 8 kuukautta sitten
vanhempi
commit
bf816e345a
4 muutettua tiedostoa jossa 101 lisäystä ja 70 poistoa
  1. 45 31
      basket_cleaning_detect.py
  2. 31 22
      config.py
  3. 11 6
      equipment_cleaning_detect.py
  4. 14 11
      platform_setup_detect.py

+ 45 - 31
basket_cleaning_detect.py

@@ -112,7 +112,7 @@ def process_video(model_path, video_source,start_event):
             if cap.get(cv2.CAP_PROP_POS_FRAMES) % 25 != 0:
                 continue
 
-            results = model.predict(frame,conf=0.6,verbose=False)
+            results = model.predict(frame,conf=0.2,verbose=False)
 
             global basket_suspension_flag,basket_warning_zone_flag,basket_steel_wire_flag,basket_platform_flag,basket_electrical_system_flag,basket_lifting_flag,basket_safety_lock_flag,basket_safety_belt_flag,basket_cleaning_up_flag,basket_cleaning_operation_flag,basket_empty_load_flag,basket_person_flag
             global BASKET_PLATFORM_REGION,BASKET_LIFTING_REGION,BASKET_ELECTRICAL_SYSTEM_REGION
@@ -132,27 +132,27 @@ def process_video(model_path, video_source,start_event):
                             basket_suspension_flag=True#悬挂机构
                             print("悬挂机构")
                             
-                elif model_path==BASKET_CLEANING_MODEL_SOURCES[1]:#D5吊篮悬挂
-
-                    boxes = r.boxes.xyxy  
-                    confidences = r.boxes.conf 
-                    classes = r.boxes.cls  
-
-                    basket_warning_zone_flag=False#当检测不到则为False
-                    basket_cleaning_up_flag=False
-                    for i in range(len(boxes)):
-                        x1, y1, x2, y2 = boxes[i].tolist()
-                        confidence = confidences[i].item()
-                        cls = int(classes[i].item())
-                        label = model.names[cls]
-                        if label=='warning_zone':
-                            basket_warning_zone_flag=True
-                        elif label=='brush':
-                            basket_cleaning_up_flag=True
+                # elif model_path==BASKET_CLEANING_MODEL_SOURCES[1]:#D5吊篮悬挂
+
+                #     boxes = r.boxes.xyxy  
+                #     confidences = r.boxes.conf 
+                #     classes = r.boxes.cls  
+
+                #     basket_warning_zone_flag=False#当检测不到则为False
+                #     basket_cleaning_up_flag=False
+                #     for i in range(len(boxes)):
+                #         x1, y1, x2, y2 = boxes[i].tolist()
+                #         confidence = confidences[i].item()
+                #         cls = int(classes[i].item())
+                #         label = model.names[cls]
+                #         if label=='warning_zone':
+                #             basket_warning_zone_flag=True
+                #         elif label=='brush':
+                #             basket_cleaning_up_flag=True
                         # elif label=='person':
 
 
-                elif model_path==BASKET_CLEANING_MODEL_SOURCES[2]:#D6,pose
+                elif model_path==BASKET_CLEANING_MODEL_SOURCES[1]:#D6,pose
                     boxes=r.boxes.xyxy#人体的检测框
                     keypoints = r.keypoints.xy  
                     confidences = r.keypoints.conf  
@@ -194,10 +194,11 @@ def process_video(model_path, video_source,start_event):
                                 basket_safety_lock_flag=True
                                 print("安全锁")
 
-                    if not basket_person_flag and get_region_mean_color([BASKET_EMPTY_LOAD_REGION], frame):
+                    #print(point_in_region([709,1017],BASKET_PLATFORM_REGION))
+                    if not basket_person_flag and point_in_region([709,1017],BASKET_PLATFORM_REGION):
                         basket_empty_load_flag=True 
                     
-                elif model_path==BASKET_CLEANING_MODEL_SOURCES[3]:#d6目标检测
+                elif model_path==BASKET_CLEANING_MODEL_SOURCES[2]:#d6目标检测
                     boxes = r.boxes.xyxy  
                     confidences = r.boxes.conf 
                     classes = r.boxes.cls  
@@ -211,10 +212,16 @@ def process_video(model_path, video_source,start_event):
                         if label=='safety_belt':
                             basket_safety_belt_flag=True
                         elif label=='brush':
-                            is_inside = any(point_in_region(point,BASKET_CLEANING_OPERATION_REGION) for point in points)
+
+                            #is_inside = any(point_in_region([(x1+x2)/2,(y1+y2)/2],BASKET_CLEANING_OPERATION_REGION) for point in points)
+                            is_inside = point_in_region([(x1+x2)/2,(y1+y2)/2],BASKET_CLEANING_OPERATION_REGION)
                             if is_inside:
                                 basket_cleaning_operation_flag=True
-                else:
+
+                        elif label=='warning_zone':
+                            basket_warning_zone_flag=True
+                            # print("警戒区")
+                elif model_path==BASKET_CLEANING_MODEL_SOURCES[3]:#d6分割
                     boxes = r.boxes.xyxy
                     masks = r.masks.xy
                     classes = r.boxes.cls 
@@ -254,16 +261,24 @@ def process_video(model_path, video_source,start_event):
             if model_path==BASKET_CLEANING_MODEL_SOURCES[0] and not redis_client.exists("basket_step_2") and basket_suspension_flag:#D4悬挂机构 
                 save_image_and_redis(redis_client, results, "basket_step_2", SAVE_IMG_PATH, POST_IMG_PATH5)
 
-            elif model_path==BASKET_CLEANING_MODEL_SOURCES[1]:#D5吊篮悬挂
+            elif model_path==BASKET_CLEANING_MODEL_SOURCES[2]:
                 if basket_warning_zone_flag and not redis_client.exists("basket_step_1"):#警戒区
                     save_image_and_redis(redis_client, results, "basket_step_1", SAVE_IMG_PATH, POST_IMG_PATH5)
+                    print("警戒区")
 
-                elif basket_cleaning_up_flag and not redis_client.exists("basket_step_11"):
+                elif redis_client.exists("basket_step_12") and not redis_client.exists("basket_step_11"):
                     save_image_and_redis(redis_client, results, "basket_step_11", SAVE_IMG_PATH, POST_IMG_PATH5)
+                    print("清理现场")
                 elif not basket_warning_zone_flag and redis_client.exists("basket_step_1") and not redis_client.exists("basket_step_12"):
                     save_image_and_redis(redis_client, results, "basket_step_12", SAVE_IMG_PATH, POST_IMG_PATH5)
+                    print("警戒区消失")
+                elif basket_safety_belt_flag and not redis_client.exists("basket_step_9"):
+                    save_image_and_redis(redis_client, results, "basket_step_9", SAVE_IMG_PATH, POST_IMG_PATH5)
+                elif basket_cleaning_operation_flag and not redis_client.exists("basket_step_10"):
+                    save_image_and_redis(redis_client, results, "basket_step_10", SAVE_IMG_PATH, POST_IMG_PATH5)
+                    print("清洗作业")
                 
-            elif model_path==BASKET_CLEANING_MODEL_SOURCES[2]:#D6,pose
+            elif model_path==BASKET_CLEANING_MODEL_SOURCES[1]:#D6,pose
 
 
                 if basket_steel_wire_flag and not redis_client.exists("basket_step_3"):
@@ -283,13 +298,12 @@ def process_video(model_path, video_source,start_event):
 
                 elif basket_empty_load_flag and not redis_client.exists("basket_step_8"):
                     save_image_and_redis(redis_client, results, "basket_step_8", SAVE_IMG_PATH, POST_IMG_PATH5)
+                    print("空载")
+
+            #else:#d6目标检测
+        
 
-            else:#d6目标检测
 
-                if basket_safety_belt_flag and not redis_client.exists("basket_step_9"):
-                    save_image_and_redis(redis_client, results, "basket_step_9", SAVE_IMG_PATH, POST_IMG_PATH5)
-                elif basket_cleaning_operation_flag and not redis_client.exists("basket_step_10"):
-                    save_image_and_redis(redis_client, results, "basket_step_10", SAVE_IMG_PATH, POST_IMG_PATH5)
 
             start_event.set()          
         else:

+ 31 - 22
config.py

@@ -10,7 +10,7 @@ POST_IMG_PATH2 = 'http://172.16.20.163:5002/images' #焊接考核科目2
 POST_IMG_PATH3 = 'http://172.16.20.163:5003/images' #平台搭设科目1,劳保穿戴
 POST_IMG_PATH4 = 'http://172.16.20.163:5004/images' #平台搭设科目2,搭建和拆除
 POST_IMG_PATH5 = 'http://172.16.20.163:5005/images'#吊篮清洗
-POST_IMG_PATH5 = 'http://172.16.20.163:5006/images'#吊具清洗
+POST_IMG_PATH6 = 'http://172.16.20.163:5006/images'#吊具清洗
 
 #焊接考核视频流
 # Define paths to RTSP streams
@@ -76,27 +76,36 @@ WELDING_REGION3 = np.array([[1613, 627], [1601, 658], [1697, 987], [1710, 962]],
 
 ####平台搭设视频流
 PLATFORM_CH1_RTSP='rtsp://admin:yaoan1234@172.16.22.241/cam/realmonitor?channel=1&subtype=0'#检测穿戴
-PLATFORM_CH2_RTSP='rtsp://admin:yaoan1234@172.16.22.240/cam/realmonitor?channel=1&subtype=0'#脚手架搭建
 
-PLATFORM_CH3_RTSP='rtsp://admin:yaoan1234@172.16.22.243/cam/realmonitor?channel=1&subtype=0'#脚手架搭建
+PLATFORM_CH2_RTSP='rtsp://admin:yaoan1234@172.16.22.240/cam/realmonitor?channel=1&subtype=0'#脚手架搭建
+# PLATFORM_CH3_RTSP='rtsp://admin:yaoan1234@172.16.22.243/cam/realmonitor?channel=1&subtype=0'#脚手架搭建
+PLATFORM_CH4_RTSP='rtsp://admin:yaoan1234@172.16.22.233/cam/realmonitor?channel=1&subtype=0'#脚手架搭建
 
 PLATFORM_CH1_MODEL='/mnt/xcd/code/ai_test/weights/platform_ch1_wearing.pt'
-PLATFORM_CH2_MODEL='/mnt/xcd/code/ai_test/weights/high_work_obb_final.pt'
-
-# Define paths to input videos
-
 
-#焊接劳保检测相关参数
+PLATFORM_SETUP_MODEL='/mnt/xcd/code/ai_test/weights/obb830.pt'
+PLATFORM_SETUP_VIDEO_SOURCES=[PLATFORM_CH2_RTSP,
+                              #PLATFORM_CH3_RTSP,
+                              PLATFORM_CH4_RTSP]
 
-#################平台搭设检测相关参数
 PLATFORM_WEARING_MODEL=[
     HUMAN_DETECTION_MODEL,
     PLATFORM_CH1_MODEL    
 ]
 
 PLATFORM_WEARING_VIDEO_SOURCES=PLATFORM_CH1_RTSP
-PLATFORM_SETUP_VIDEO_SOURCES=PLATFORM_CH2_RTSP
-PLATFORM_SETUP_MODEL=PLATFORM_CH2_MODEL
+
+#PLATFORM_CH2_MODEL='/mnt/xcd/code/ai_test/weights/high_work_obb_final.pt'
+
+# Define paths to input videos
+
+
+#焊接劳保检测相关参数
+
+#################平台搭设检测相关参数
+
+# PLATFORM_SETUP_VIDEO_SOURCES=PLATFORM_CH2_RTSP
+# PLATFORM_SETUP_MODEL=PLATFORM_SETUP_MODEL
 
 #吊篮清洗
 
@@ -104,21 +113,21 @@ PLATFORM_SETUP_MODEL=PLATFORM_CH2_MODEL
 BASKET_CLEANING_CH4_POSE_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s-pose1.pt'
 BASKET_CLEANING_CH5_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s1.pt'
 BASKET_CLEANING_CH6_POSE_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s-pose2.pt'
-BASKET_CLEANING_CH6_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s2.pt'
+BASKET_CLEANING_CH6_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/ch6detect_basket.pt'
 BASKET_CLEANING_CH6_SEG_MODEL='/mnt/xcd/code/ai_test/weights/basket_seg.pt'
 
 BASKET_CLEANING_CH4_RTSP='rtsp://admin:yaoan1234@172.16.22.237/cam/realmonitor?channel=1&subtype=0'
-BASKET_CLEANING_CH5_RTSP='rtsp://admin:yaoan1234@172.16.22.239/cam/realmonitor?channel=1&subtype=0'
+#BASKET_CLEANING_CH5_RTSP='rtsp://admin:yaoan1234@172.16.22.239/cam/realmonitor?channel=1&subtype=0'
 BASKET_CLEANING_CH6_RTSP='rtsp://admin:yaoan1234@172.16.22.242/cam/realmonitor?channel=1&subtype=0'
 
 BASKET_CLEANING_VIDEO_SOURCES=[BASKET_CLEANING_CH4_RTSP,
-                               BASKET_CLEANING_CH5_RTSP,
+                               #BASKET_CLEANING_CH5_RTSP,
                                BASKET_CLEANING_CH6_RTSP,
                                BASKET_CLEANING_CH6_RTSP,
                                BASKET_CLEANING_CH6_RTSP]
 
 BASKET_CLEANING_MODEL_SOURCES=[BASKET_CLEANING_CH4_POSE_MODEL,
-                               BASKET_CLEANING_CH5_DETECT_MODEL,
+                               #BASKET_CLEANING_CH5_DETECT_MODEL,
                                BASKET_CLEANING_CH6_POSE_MODEL,
                                BASKET_CLEANING_CH6_DETECT_MODEL,
                                BASKET_CLEANING_CH6_SEG_MODEL]
@@ -148,7 +157,7 @@ BASKET_SAFETY_LOCK_REGION = np.array([
     [[650, 944], [800, 1000], [800, 923], [680, 872]]
     ], np.int32)
 BASKET_ELECTRICAL_SYSTEM_REGION = np.array([], np.int32)
-BASKET_CLEANING_OPERATION_REGION = np.array([[668, 310], [800, 310], [800, 1070], [668, 1070]], np.int32)
+BASKET_CLEANING_OPERATION_REGION = np.array([[8, 1038], [14, 1423], [1910, 1432], [1894, 1129]], np.int32)
 BASKET_EMPTY_LOAD_REGION = np.array([(752, 855), (712, 969), (836, 1020), (896, 918)], np.int32)
 
 
@@ -157,9 +166,9 @@ EQUIPMENT_CLEANING_CH3_RTSP='rtsp://admin:yaoan1234@172.16.22.238/cam/realmonito
 EQUIPMENT_CLEANING_CH8_RTSP='rtsp://admin:yaoan1234@172.16.22.44/cam/realmonitor?channel=1&subtype=0'
 
 
-EQUIPMENT_CLEANING_CH3_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s1.pt'
+EQUIPMENT_CLEANING_CH3_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/ch6detect_basket.pt'
 EQUIPMENT_CLEANING_CH8_POSE_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s-pose2.pt'
-EQUIPMENT_CLEANING_CH8_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/yolov8s2.pt'
+EQUIPMENT_CLEANING_CH8_DETECT_MODEL='/mnt/xcd/code/ai_test/weights/ch6detect_basket.pt'
 
 EQUIPMENT_CLEANING_VIDEO_SOURCES=[EQUIPMENT_CLEANING_CH3_RTSP,
                                   EQUIPMENT_CLEANING_CH8_RTSP,
@@ -172,12 +181,12 @@ EQUIPMENT_CLEANING_MODEL_SOURCES=[EQUIPMENT_CLEANING_CH3_DETECT_MODEL,
 ]
 
 EQUIPMENT_ANCHOR_DEVICE_REGION = np.array([
-    [[668, 310], [800, 310], [800, 1070], [668, 1070]],
+    [[913, 6], [914, 520], [1350, 523], [1351, 9]],
 ], np.int32)
 EQUIPMENT_WORK_ROPE_REGION = np.array([
-    [[668, 310], [800, 310], [800, 1070], [668, 1070]],
+    [[1466, 1187], [1416, 1248], [2500, 1162], [2502, 1063]],
 ], np.int32)
 EQUIPMENT_SAFETY_ROPE_REGION = np.array([
-    [[668, 310], [800, 310], [800, 1070], [668, 1070]],
+    [[1466, 1187], [1416, 1248], [2500, 1162], [2502, 1063]],
 ], np.int32)
-EQUIPMENT_CLEANING_OPERATION_REGION=np.array([[668, 310], [800, 310], [800, 1070], [668, 1070]], np.int32)
+EQUIPMENT_CLEANING_OPERATION_REGION=np.array([[1697, 930], [1055, 1253], [2000, 1420], [2450, 1000]], np.int32)

+ 11 - 6
equipment_cleaning_detect.py

@@ -48,10 +48,14 @@ def save_image_and_redis(redis_client, results, step_name, save_path, post_path)
     save_time = datetime.now().strftime('%Y%m%d_%H%M')
     imgpath = f"{save_path}/{step_name}_{save_time}.jpg"
     annotated_frame = results[0].plot()
-    # if step_name == "equipment_step_2":
-    #     annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in BASKET_SUSPENSION_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
-    # elif step_name == "equipment_step_3":
-    #     annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in BASKET_STEEL_WIRE_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
+    if step_name == "equipment_step_2":
+        annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in EQUIPMENT_ANCHOR_DEVICE_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
+    elif step_name == "equipment_step_4":
+        annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in EQUIPMENT_WORK_ROPE_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
+    elif step_name == "equipment_step_5":
+        annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in EQUIPMENT_SAFETY_ROPE_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
+    elif step_name == "equipment_step_10":
+        annotated_frame = cv2.polylines(annotated_frame, [region.reshape(-1, 1, 2) for region in EQUIPMENT_CLEANING_OPERATION_REGION], isClosed=True, color=(0, 255, 0), thickness=4)
     # elif step_name == "equipment_step_4":
     #     annotated_frame = cv2.polylines(annotated_frame, BASKET_PLATFORM_REGION.reshape(-1, 1, 2), isClosed=True, color=(0, 255, 0), thickness=4)
     # elif step_name == "equipment_step_6":
@@ -98,6 +102,7 @@ def process_video(model_path, video_source,start_event):
                         label = model.names[cls]
                         if label=='warning_zone':
                             equipment_cleaning_flag[0]=True
+                            print("警戒区")
                         elif label=='person':
                             centerx=(x1+x2)/2
                             centery=(y1+y2)/2
@@ -137,7 +142,7 @@ def process_video(model_path, video_source,start_event):
                                 print("安全绳")
 
                     
-                else:#d8 目标检测
+                elif model_path==EQUIPMENT_CLEANING_MODEL_SOURCES[2]:#d8 目标检测
                     boxes = r.boxes.xyxy  
                     confidences = r.boxes.conf 
                     classes = r.boxes.cls  
@@ -176,7 +181,7 @@ def process_video(model_path, video_source,start_event):
                 if equipment_cleaning_flag[4] and not redis_client.exists("equipment_step_5"):
                     save_image_and_redis(redis_client, results, "equipment_step_5", SAVE_IMG_PATH, POST_IMG_PATH6)
                 
-            else:#d6目标检测
+            elif model_path==EQUIPMENT_CLEANING_MODEL_SOURCES[2]:#d6目标检测
 
                 if equipment_cleaning_flag[8] and not redis_client.exists("equipment_step_9"):
                     save_image_and_redis(redis_client, results, "equipment_step_9", SAVE_IMG_PATH, POST_IMG_PATH6)

+ 14 - 11
platform_setup_detect.py

@@ -24,18 +24,19 @@ def init_platform_setup_detection():
 
 def start_platform_setup_detection(start_events):
     threads = []
-    model_path = PLATFORM_SETUP_MODEL
-    video_source = PLATFORM_SETUP_VIDEO_SOURCES
-    event = threading.Event()
-    start_events.append(event)
-    thread = threading.Thread(target=process_video, args=(model_path, video_source, event))
-    threads.append(thread)
-    thread.daemon = True
-    thread.start()
+    for video_source in PLATFORM_SETUP_VIDEO_SOURCES:
+        event = threading.Event()
+        start_events.append(event)
+        thread = threading.Thread(target=process_video, args=(PLATFORM_SETUP_MODEL,video_source,event))
+        threads.append(thread)
+        thread.daemon=True
+        thread.start()
 
-    # Wait for the thread to complete
-    thread.join()
-    print("搭设线程运行结束")
+
+    # Wait for all threads to complete
+    for thread in threads:
+        thread.join()
+        print("平台搭设子线程启动")
 
 
 
@@ -118,6 +119,8 @@ def process_video(model_path, video_source,start_event):
                     x_center = (box_coords[0][0] + box_coords[1][0]+box_coords[2][0]+box_coords[3][0]) / 4
                     y_center=(box_coords[0][1] + box_coords[1][1]+box_coords[2][1]+box_coords[3][1]) / 4
                     center_point = (int(x_center), int(y_center))
+
+                    
                     if label=="wheel":#轮子
                         platform_setup_steps_detect_num[0]+=1
                         if platform_setup_steps_detect_num[0]>3: