diff --git a/20240529RGBtest3/classifer.py b/20240529RGBtest3/classifer.py index 73a18b2..0bcd590 100644 --- a/20240529RGBtest3/classifer.py +++ b/20240529RGBtest3/classifer.py @@ -481,27 +481,30 @@ class Data_processing: org_defect = tomato.bitwise_and_rgb_with_binary(edge, new_bin_img) fore = tomato.bitwise_and_rgb_with_binary(img, mask) fore_g_r_t = tomato.threshold_segmentation(tomato.extract_g_r(fore), threshold=threshold_fore_g_r_t) + res = cv2.bitwise_or(new_bin_img, fore_g_r_t) + nogreen = tomato.bitwise_and_rgb_with_binary(edge, res) # 统计白色像素点个数 # print(np.sum(fore_g_r_t == 255)) # print(np.sum(mask == 255)) # print(np.sum(fore_g_r_t == 255) / np.sum(mask == 255)) green_percentage = np.sum(fore_g_r_t == 255) / np.sum(mask == 255) - green_percentage = round(green_percentage, 2) * 100 + green_percentage = round(green_percentage, 2) # 获取西红柿的尺寸信息 long_axis, short_axis = self.analyze_ellipse(mask) # 获取缺陷信息 number_defects, total_pixels = self.analyze_defect(new_bin_img) # 将处理后的图像转换为 RGB 格式 - rp = cv2.cvtColor(org_defect, cv2.COLOR_BGR2RGB) + rp = cv2.cvtColor(nogreen, cv2.COLOR_BGR2RGB) #直径单位为cm,所以需要除以10 diameter = (long_axis + short_axis) /425 * 63 / 2 / 10 + # print(f'直径:{diameter}') # 如果直径小于3,判断为空果拖异常图,则将所有值重置为0 - if diameter < 3: + if diameter < 2.5: diameter = 0 green_percentage = 0 number_defects = 0 total_pixels = 0 - rp = cv2.cvtColor(np.ones((100, 100, 3), dtype=np.uint8), cv2.COLOR_BGR2RGB) + rp = cv2.cvtColor(np.ones((613, 800, 3), dtype=np.uint8), cv2.COLOR_BGR2RGB) return diameter, green_percentage, number_defects, total_pixels, rp return diameter, green_percentage, number_defects, total_pixels, rp @@ -530,6 +533,7 @@ class Data_processing: rp = cv2.cvtColor(org_defect, cv2.COLOR_BGR2RGB) #直径单位为cm,所以需要除以10 diameter = (long_axis + short_axis) /425 * 63 / 2 / 10 + # print(f'直径:{diameter}') return diameter, weight, number_defects, total_pixels, rp diff --git a/20240529RGBtest3/main.py b/20240529RGBtest3/main.py index 59893b6..e779bef 100644 --- a/20240529RGBtest3/main.py +++ b/20240529RGBtest3/main.py @@ -42,7 +42,7 @@ def process_data(cmd: str, images: list, spec: any, dp: Data_processing, pipe: P max_total_defect_area = max(max_total_defect_area, total_pixels) if i == 1: rp_result = rp - gp = round(green_percentage) + gp = round(green_percentage, 2) elif cmd == 'PF': # 百香果 @@ -59,11 +59,13 @@ def process_data(cmd: str, images: list, spec: any, dp: Data_processing, pipe: P logging.error(f'错误指令,指令为{cmd}') return False - diameter = round(sum(diameter_axis_list) / 3) + diameter = round(sum(diameter_axis_list) / 3, 2) if cmd == 'TO': brix = 0 weight = 0 + print(f'预测的brix值为:{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{gp};' + f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};') response = pipe.send_data(cmd=cmd, brix=brix, diameter=diameter, green_percentage=gp, weight=weight, defect_num=max_defect_num, total_defect_area=max_total_defect_area, rp=rp_result) return response @@ -72,6 +74,8 @@ def process_data(cmd: str, images: list, spec: any, dp: Data_processing, pipe: P brix = detector.predict(spec) if diameter == 0: brix = 0 + # print(f'预测的brix值为:{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{green_percentage};' + # f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};') response = pipe.send_data(cmd=cmd, brix=brix, green_percentage=green_percentage, diameter=diameter, weight=weight, defect_num=max_defect_num, total_defect_area=max_total_defect_area, rp=rp_result) return response diff --git a/20240529RGBtest3/qt_test.py b/20240529RGBtest3/qt_test.py index b4f96bb..08cf740 100644 --- a/20240529RGBtest3/qt_test.py +++ b/20240529RGBtest3/qt_test.py @@ -74,7 +74,7 @@ class MainWindow(QMainWindow): spec_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith('.raw')][:1] self.send_YR() - for _ in range(20): + for _ in range(5): for image_path in rgb_files: img = cv2.imread(image_path, cv2.IMREAD_COLOR) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) @@ -90,7 +90,7 @@ class MainWindow(QMainWindow): img_data = img.tobytes() length = (len(img_data) + 6).to_bytes(4, byteorder='big') # cmd = 'TO':测试番茄数据;cmd = 'PF':测试百香果数据 - cmd = 'PF' + cmd = 'TO' data_send = length + cmd.upper().encode('ascii') + height + width + img_data win32file.WriteFile(self.rgb_send, data_send) print(f'发送的图像数据长度: {len(data_send)}') @@ -113,7 +113,7 @@ class MainWindow(QMainWindow): bands = bands.to_bytes(2, byteorder='big') length = (len(spec_data)+8).to_bytes(4, byteorder='big') # cmd = 'TO':测试番茄数据;cmd = 'PF':测试百香果数据 - cmd = 'PF' + cmd = 'TO' data_send = length + cmd.upper().encode('ascii') + heigth + weight + bands + spec_data win32file.WriteFile(self.spec_send, data_send) print(f'发送的光谱数据长度: {len(data_send)}') @@ -151,10 +151,10 @@ class MainWindow(QMainWindow): cmd_result = data[:2].decode('ascii').strip().upper() brix = (int.from_bytes(data[2:4], byteorder='big')) / 1000 green_percentage = (int.from_bytes(data[4:5], byteorder='big')) / 100 - diameter = int.from_bytes(data[5:7], byteorder='big') + diameter = (int.from_bytes(data[5:7], byteorder='big')) / 100 weight = int.from_bytes(data[7:8], byteorder='big') defect_num = int.from_bytes(data[8:10], byteorder='big') - total_defect_area = (int.from_bytes(data[10:14], byteorder='big')) / 100 + total_defect_area = (int.from_bytes(data[10:14], byteorder='big')) / 1000 heigth = int.from_bytes(data[14:16], byteorder='big') width = int.from_bytes(data[16:18], byteorder='big') rp = data[18:] diff --git a/20240529RGBtest3/utils.py b/20240529RGBtest3/utils.py index d928dcc..c454e54 100644 --- a/20240529RGBtest3/utils.py +++ b/20240529RGBtest3/utils.py @@ -193,16 +193,15 @@ class Pipe: height = height.to_bytes(2, byteorder='big') width = width.to_bytes(2, byteorder='big') img_bytes = img.tobytes() - diameter = diameter.to_bytes(2, byteorder='big') + diameter = int(diameter * 100).to_bytes(2, byteorder='big') defect_num = defect_num.to_bytes(2, byteorder='big') - total_defect_area = total_defect_area * 1000 - total_defect_area = int(total_defect_area).to_bytes(4, byteorder='big') + total_defect_area = int(total_defect_area * 1000).to_bytes(4, byteorder='big') length = len(img_bytes) + 18 length = length.to_bytes(4, byteorder='big') if cmd == 'TO': brix = 0 brix = brix.to_bytes(2, byteorder='big') - gp = green_percentage.to_bytes(1, byteorder='big') + gp = int(green_percentage * 100).to_bytes(1, byteorder='big') weight = 0 weight = weight.to_bytes(1, byteorder='big') send_message = length + cmd_re + brix + gp + diameter + weight + defect_num + total_defect_area + height + width + img_bytes diff --git a/20240529RGBtest3/xs/image_preprocessing20240615.py b/20240529RGBtest3/xs/image_preprocessing20240615.py index 449dd14..cc7f1d7 100644 --- a/20240529RGBtest3/xs/image_preprocessing20240615.py +++ b/20240529RGBtest3/xs/image_preprocessing20240615.py @@ -211,7 +211,7 @@ def extract_max_connected_area(image_path, lower_hsv, upper_hsv): def main(): parser = argparse.ArgumentParser(description='Process some integers.') - parser.add_argument('--dir_path', type=str, default=r'D:\project\supermachine--tomato-passion_fruit\20240419RGBtest2\data', + parser.add_argument('--dir_path', type=str, default=r'D:\project\supermachine--tomato-passion_fruit\20240529RGBtest3\data\qt_test\TO', help='the directory path of images') parser.add_argument('--threshold_s_l', type=int, default=180, help='the threshold for s_l')