fang 1 week ago
parent
commit
091c9d7963

+ 99 - 9
sonar_process/count_fish_jh5_v1_bushu_temp.py → sonar_process/count_fish_jh5_v1_bushu_local.py

@@ -289,6 +289,22 @@ if __name__ == "__main__":
 
     harddisk_db = HardDiskStorage()
     while True:
+        flag_30to24 = 0
+        flag_24to30 = 0
+
+        # UUID = "jh5_0605_s16b38"
+        # # cage_num = UUID.split("yue")[-1]
+        # sql = "SELECT uuid,cage_length,fish_weight FROM jh5_measurement_data WHERE UUID = %s ORDER BY id DESC LIMIT 1;"
+        # var = UUID
+        # res = harddisk_db.execute_sql(sql, var)
+        #
+        # if len(res) == 0:
+        #     print("暂无数据")
+        #     time.sleep(30)
+        #     continue
+        #
+        # res = res[0]
+        # UUID = res["uuid"]
 
         sql = "SELECT uuid,cage_length,fish_weight FROM measurement_data ORDER BY id DESC LIMIT 1;"
         res = harddisk_db.get_all(sql)
@@ -343,7 +359,7 @@ if __name__ == "__main__":
             var = (fish_num, is_abnormal, error_text, ID)
             res = harddisk_db.execute_sql(sql, var)
             
-            # move_gz(gz_path)
+            move_gz(gz_path)
             
             continue
 
@@ -351,7 +367,7 @@ if __name__ == "__main__":
         # =============================== |  3. 初始化参数   | ================================
         # 默认参数
         IMAGE_SHAPE = (631, 1078, 3)
-        mask_dict = onload_mask(r"C:\Users\sencott\Desktop\test_code\jh5sonar_newest\sonar_process\mask", IMAGE_SHAPE)
+        mask_dict = onload_mask("mask/", IMAGE_SHAPE)
 
         all_fish_count_list = []
         total_num_list = []
@@ -367,23 +383,97 @@ if __name__ == "__main__":
             sql = "UPDATE package_data SET is_processed = 1 , fish_count = %s,is_abnormal = %s,error_text=%s WHERE id = %s; "
             var = (fish_num, is_abnormal, error_text, ID)
             res = harddisk_db.execute_sql(sql, var)
-
+            
+            move_gz(gz_path)
+            
             continue
 
         if len(b_list) < 60:
-            error_text = f"len(b_list): {len(b_list)}"
+            error_text = f"len(s_list): {len(s_list)}, len(b_list): {len(b_list)}"
             is_abnormal = 1
             fish_num = None
-            sql = "UPDATE package_data SET is_processed = 1 , is_abnormal = %s,error_text=%s WHERE id = %s; "
-            var = ( is_abnormal, error_text, ID)
+            sql = "UPDATE package_data SET is_processed = 1 , fish_count = %s,is_abnormal = %s,error_text=%s WHERE id = %s; "
+            var = (fish_num, is_abnormal, error_text, ID)
             res = harddisk_db.execute_sql(sql, var)
+            
+            move_gz(gz_path)
             continue
         # =============================== |  4. 开始计算   | ================================
+        image_path = os.path.split(image_tar)[0]
         fish_count_list = []
         error_num = 0
+        for image_info_24m in tqdm(b_list):
+            (image_name2, ext) = os.path.splitext(image_info_24m.name)
+
+            f = tar.extractfile(image_info_24m)
+            img_buffer = f.read()
+            nparr = np.frombuffer(img_buffer, np.uint8)
+            try:
+                image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
+            except:
+                continue
+            if flag_30to24 == 1:
+                image = image30to24(image)
+            elif flag_24to30 == 1:
+                image = image24to30(image)
+
+            # 预测鱼群轮廓
+            results1 = model(image, conf=0.90)
+            if results1[0].masks is None:
+                error_num += 1
+                print(image_name2,'yolo error')
+                continue
+            mask = results1[0].masks.xy
+            result_tuple = (mask[0].reshape(len(mask[0]), 1, 2).astype(int),)
+            # 创建一个空白图像,大小与原图像相同
+            fish_mask = np.zeros_like(image)
+            # 将掩码绘制到空白图像上
+            for contour in mask:
+                cv2.drawContours(fish_mask, [contour.reshape(len(contour), 1, 2).astype(int)], -1, (255, 255, 255), thickness=cv2.FILLED)
+
+            # 使用掩码提取鱼的部分
+            fish_image = cv2.bitwise_and(image, fish_mask)
+            finall_num = get_fish_ratio_all(fish_image, image_name2, mask_dict, CAGE_LENGTH, fish_size=fishsze, min_size=min_size)
+            total_num_list.append(finall_num)
+
+        mean_value = np.median(total_num_list)
+        std_dev = np.std(total_num_list)
+        threshold_max = mean_value + 2 * std_dev
+        threshold_min = mean_value - 2 * std_dev
+        if threshold_min < 0:
+            threshold_min = 0
+
+        total_num_list = [
+            x for x in total_num_list if x > threshold_min and x < threshold_max
+        ]
+
+
+        if len(total_num_list) < 20:
+            print(image_name2, "有效数据不足")
+            error_text = f"len(total_num_list) < 20:{len(total_num_list)}"
+            is_abnormal = 1
+            fish_num = None
+            sql = "UPDATE package_data SET is_processed = 1 , fish_count = %s,is_abnormal = %s,error_text=%s WHERE id = %s; "
+            var = (fish_num, is_abnormal, error_text, ID)
+            res = harddisk_db.execute_sql(sql, var)
+            move_gz(gz_path)
+            continue
+
+        print("这一组情况:")
+        print(total_num_list)
+        print("max:{}".format(max(total_num_list)))
+        print("min:{}".format(min(total_num_list)))
+        print("mean:{}".format(sum(total_num_list) // len(total_num_list)))
+        date_off = time.time()
+        print("花费时间", date_off - data_start)
+        print("异常图片数量", error_num)
+
+        fish_num = int(sum(total_num_list) // len(total_num_list))
+
         is_abnormal = 0
-        sql = "UPDATE package_data SET is_processed = 1 ,is_abnormal = %s WHERE id = %s; "
-        var = (is_abnormal, ID)
+
+        sql = "UPDATE package_data SET is_processed = 1 , fish_count = %s,is_abnormal = %s WHERE id = %s; "
+        var = (fish_num, is_abnormal, ID)
         res = harddisk_db.execute_sql(sql, var)
         
-        # move_gz(gz_path)
+        move_gz(gz_path)

+ 1 - 1
sonar_process/database.conf

@@ -4,7 +4,7 @@ db_port = 3306
 db_user = root
 db_pass = 123456
 ; db_name = sonar_database_new
-db_name = sonar_jh5
+db_name = sonar_jh6
 
 [redis]
 redis_host = localhost

BIN
sonar_process/jh5best.pt


+ 0 - 0
sonar_process/tmp.log