From 8771f84a7bc8d64e2c8a1090646176a8438b152f Mon Sep 17 00:00:00 2001 From: GG <905865530@qq.com> Date: Thu, 13 Jun 2024 22:04:02 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E9=80=9A?= =?UTF-8?q?=E4=BF=A1=E5=8D=8F=E8=AE=AE=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=8E=A5=E6=94=B6+=E5=A4=84=E7=90=86=E9=83=A8?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.name | 2 +- .idea/supermachine--tomato-passion_fruit.iml | 2 +- 20240410RGBtest1/super-tomato/defect_big.bmp | Bin 1761522 -> 0 bytes 20240410RGBtest1/新建 Markdown.md | 0 20240419RGBtest2/root_dir.py | 5 ++ 20240529RGBtest3/main.py | 43 +++++------ 20240529RGBtest3/root_dir.py | 5 ++ 20240529RGBtest3/utils.py | 77 +++++++++++++++---- 8 files changed, 96 insertions(+), 38 deletions(-) delete mode 100644 20240410RGBtest1/super-tomato/defect_big.bmp delete mode 100644 20240410RGBtest1/新建 Markdown.md create mode 100644 20240419RGBtest2/root_dir.py create mode 100644 20240529RGBtest3/root_dir.py diff --git a/.idea/.name b/.idea/.name index 721f4b2..11a5d8e 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -04average.ipynb \ No newline at end of file +main.py \ No newline at end of file diff --git a/.idea/supermachine--tomato-passion_fruit.iml b/.idea/supermachine--tomato-passion_fruit.iml index 2368678..5ad5e2b 100644 --- a/.idea/supermachine--tomato-passion_fruit.iml +++ b/.idea/supermachine--tomato-passion_fruit.iml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/20240410RGBtest1/super-tomato/defect_big.bmp b/20240410RGBtest1/super-tomato/defect_big.bmp deleted file mode 100644 index bd07045ab59da3482bb63e15ff65712a1727e49e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1761522 zcmeF)`Ck-Q{y+M;_x^rA6Bk58L_|bHXu7MbtE;Q`rfHyAMFdnpL_ju?eczX6-=S$5 zXpkLb-(91QStnymVoYL;F(%{8kM}RQ2c3`clg#+ZcP5!E^YU?0IaOVCs?HOBc=PU4 z=cxStzehH|+x$n9|D4Hx9skeoepmK?|L%AH*YB)1591#MAOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< 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�C#B$A(#kJKD};LxfB*y_009U< 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 tuple: +def process_data(cmd: str, img: any) -> tuple: """ 处理指令 @@ -65,56 +65,55 @@ def main(is_debug=False): while True: long_axis_list = [] short_axis_list = [] - defect_num_sum = 0 - total_defect_area_sum = 0 + max_defect_num = 0 # 初始化最大缺陷数量为0 + max_total_defect_area = 0 # 初始化最大总像素数为0 rp = None - start_time = time.time() + # start_time = time.time() for i in range(5): # start_time = time.time() - - img_data = receive_rgb_data(rgb_receive) - image = Image.open(io.BytesIO(img_data)) - img = np.array(image) - print(img.shape) - + data = receive_rgb_data(rgb_receive) + cmd, img = parse_protocol(data) + # print(img.shape) # end_time = time.time() # elapsed_time = end_time - start_time # print(f'接收时间:{elapsed_time}秒') - long_axis, short_axis, number_defects, total_pixels, rp = process_data(img=img) + long_axis, short_axis, number_defects, total_pixels, rp = process_data(cmd=cmd, img=img) # print(long_axis, short_axis, number_defects, type(total_pixels), rp.shape) if i <= 2: long_axis_list.append(long_axis) short_axis_list.append(short_axis) + # 更新最大缺陷数量和最大总像素数 + max_defect_num = max(max_defect_num, number_defects) + max_total_defect_area = max(max_total_defect_area, total_pixels) if i == 1: rp_result = rp - defect_num_sum += number_defects - total_defect_area_sum += total_pixels - long_axis = round(sum(long_axis_list) / 3) short_axis = round(sum(short_axis_list) / 3) # print(type(long_axis), type(short_axis), type(defect_num_sum), type(total_defect_area_sum), type(rp_result)) spec_data = receive_spec_data(spec_receive) - print(f'光谱数据接收长度:', len(spec_data)) + cmd, spec_data = parse_protocol(spec_data) + + # print(f'光谱数据接收长度:', len(spec_data)) response = send_data(pipe_send=rgb_send, long_axis=long_axis, short_axis=short_axis, - defect_num=defect_num_sum, total_defect_area=total_defect_area_sum, rp=rp_result) + defect_num=max_defect_num, total_defect_area=max_total_defect_area, rp=rp_result) - end_time = time.time() - elapsed_time = (end_time - start_time) * 1000 - print(f'总时间:{elapsed_time}毫秒') - - print(long_axis, short_axis, defect_num_sum, total_defect_area_sum, rp_result.shape) + # end_time = time.time() + # elapsed_time = (end_time - start_time) * 1000 + # print(f'总时间:{elapsed_time}毫秒') + # + # print(long_axis, short_axis, defect_num_sum, total_defect_area_sum, rp_result.shape) diff --git a/20240529RGBtest3/root_dir.py b/20240529RGBtest3/root_dir.py new file mode 100644 index 0000000..754b950 --- /dev/null +++ b/20240529RGBtest3/root_dir.py @@ -0,0 +1,5 @@ + +import pathlib + +file_path = pathlib.Path(__file__) +ROOT_DIR = file_path.parent \ No newline at end of file diff --git a/20240529RGBtest3/utils.py b/20240529RGBtest3/utils.py index 8eb80dd..8c82559 100644 --- a/20240529RGBtest3/utils.py +++ b/20240529RGBtest3/utils.py @@ -19,36 +19,85 @@ import select import msvcrt from classifer import Tomato, Passion_fruit + def receive_rgb_data(pipe): try: - # 读取图片数据 + # 读取图片数据长度 len_img = win32file.ReadFile(pipe, 4, None) data_size = int.from_bytes(len_img[1], byteorder='big') - result, img_data = win32file.ReadFile(pipe, data_size, None) - return img_data + # 读取实际图片数据 + result, data = win32file.ReadFile(pipe, data_size, None) + # 检查读取操作是否成功 + if result != 0: + print(f"读取失败,错误代码: {result}") + return None + # 返回成功读取的数据 + return data except Exception as e: print(f"数据接收失败,错误原因: {e}") return None - def receive_spec_data(pipe): try: - # 读取图片数据长度 + # 读取光谱数据长度 len_spec = win32file.ReadFile(pipe, 4, None) - if len_spec is None: - # 未能读取到数据长度,返回"0" - return "0" data_size = int.from_bytes(len_spec[1], byteorder='big') - if data_size == 0: - # 接收到空数据,返回"0" - return "0" - - # 读取图片数据 + # 读取光谱数据 result, spec_data = win32file.ReadFile(pipe, data_size, None) + # 检查读取操作是否成功 + if result != 0: + print(f"读取失败,错误代码: {result}") + return None + # 返回成功读取的数据 return spec_data except Exception as e: print(f"数据接收失败,错误原因: {e}") - return '0' + return None + +def parse_protocol(data: bytes) -> (str, any): + """ + 指令转换. + + :param data:接收到的报文 + :return: 指令类型和内容 + """ + try: + assert len(data) > 2 + except AssertionError: + logging.error('指令转换失败,长度不足3') + return '', None + cmd, data = data[:2], data[2:] + cmd = cmd.decode('ascii').strip().upper() + if cmd == 'TO': + n_rows, n_cols, img = data[:2], data[2:4], data[4:] + try: + n_rows, n_cols = [int.from_bytes(x, byteorder='big') for x in [n_rows, n_cols]] + except Exception as e: + logging.error(f'长宽转换失败, 错误代码{e}, 报文大小: n_rows:{n_rows}, n_cols: {n_cols}') + return '', None + try: + assert n_rows * n_cols * 3 == len(img) + # 因为是float32类型 所以长度要乘12 ,如果是uint8则乘3 + except AssertionError: + logging.error('图像指令IM转换失败,数据长度错误') + return '', None + img = np.frombuffer(img, dtype=np.uint8).reshape((n_rows, n_cols, -1)) + return cmd, img + elif cmd == 'PF': + n_rows, n_cols, n_bands, spec = data[:2], data[2:4], data[4:6], data[6:] + try: + n_rows, n_cols, n_bands = [int.from_bytes(x, byteorder='big') for x in [n_rows, n_cols, n_bands]] + except Exception as e: + logging.error(f'长宽转换失败, 错误代码{e}, 报文大小: n_rows:{n_rows}, n_cols: {n_cols}, n_bands: {n_bands}') + return '', None + try: + assert n_rows * n_cols * n_bands * 4 == len(spec) + + except AssertionError: + logging.error('图像指令转换失败,数据长度错误') + return '', None + spec = np.frombuffer(spec, dtype=np.uint16).reshape(n_cols, n_rows, -1) + return cmd, spec def create_pipes(rgb_receive_name, rgb_send_name, spec_receive_name): while True: