|
@@ -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)
|