fix:修改空果拖判别时刻,改为一个果子最后汇总指标信息后进行判别;根据何工确定,直径以长径为准

This commit is contained in:
TG 2024-06-30 16:19:11 +08:00
parent de9ffff6a2
commit e9ada7a266
4 changed files with 77 additions and 24 deletions

View File

@ -3,6 +3,29 @@
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.idea/copilot/chatSessions" /> <excludeFolder url="file://$MODULE_DIR$/.idea/copilot/chatSessions" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/data_pyc" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/cv2/gapi" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/cv2/mat_wrapper" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/cv2/misc" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/cv2/utils" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/numpy/.libs" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/numpy/fft" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/_lib/_uarray" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/fft" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/ndimage" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/optimize/_highs" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/sparse/linalg/_eigen" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/spatial/transform" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/stats/_levy_stable" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/scipy/stats/_unuran" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/sklearn/_loss" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/sklearn/datasets/tests/data/openml/id_40945" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main0带资源文件/_internal/sklearn/preprocessing" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main1不带资源文件夹使用原始py文件" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main3不带资源文件夹使用pyc文件修改log不报空果托错误信息换图标" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main4设置与main3一致去掉了resnet权重" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main5与main1一致py文件使用20240529RGBtest3的main" />
<excludeFolder url="file://$MODULE_DIR$/20240627Actual_deployed/封装exe/result/main6不带资源文件夹py文件使用20240529RGBtest3配置文件加载的是生成的pyc文件" />
</content> </content>
<orderEntry type="jdk" jdkName="tengg" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="tengg" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />

View File

@ -590,16 +590,19 @@ class Data_processing:
# 将处理后的图像转换为 RGB 格式 # 将处理后的图像转换为 RGB 格式
rp = cv2.cvtColor(nogreen, cv2.COLOR_BGR2RGB) rp = cv2.cvtColor(nogreen, cv2.COLOR_BGR2RGB)
#直径单位为cm #直径单位为cm
diameter = (long_axis + short_axis) * setting.pixel_length_ratio / 2 # diameter = (long_axis + short_axis) * setting.pixel_length_ratio / 2
#20240628与何工确定直径以长径为准
diameter = long_axis * setting.pixel_length_ratio
# print(f'直径:{diameter}') # print(f'直径:{diameter}')
# 如果直径小于3判断为空果拖异常图则将所有值重置为0 ###异常判断改为发送结果前进行判断
if diameter < 2.5: # # 如果直径小于3判断为空果拖异常图则将所有值重置为0
diameter = 0 # if diameter < 2.5:
green_percentage = 0 # diameter = 0
number_defects = 0 # green_percentage = 0
total_pixels = 0 # number_defects = 0
rp = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands), # total_pixels = 0
dtype=np.uint8), cv2.COLOR_BGR2RGB) # rp = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands),
# dtype=np.uint8), cv2.COLOR_BGR2RGB)
return diameter, green_percentage, number_defects, total_pixels, rp return diameter, green_percentage, number_defects, total_pixels, rp
def analyze_passion_fruit(self, img): def analyze_passion_fruit(self, img):
@ -639,16 +642,17 @@ class Data_processing:
org_defect = pf.bitwise_and_rgb_with_binary(edge, max_mask) org_defect = pf.bitwise_and_rgb_with_binary(edge, max_mask)
rp = cv2.cvtColor(org_defect, cv2.COLOR_BGR2RGB) rp = cv2.cvtColor(org_defect, cv2.COLOR_BGR2RGB)
#直径单位为cm #直径单位为cm
diameter = (long_axis + short_axis) * setting.pixel_length_ratio / 2 # diameter = (long_axis + short_axis) * setting.pixel_length_ratio / 2
diameter = long_axis * setting.pixel_length_ratio
# print(f'直径:{diameter}') # print(f'直径:{diameter}')
if diameter < 2.5: # if diameter < 2.5:
diameter = 0 # diameter = 0
green_percentage = 0 # green_percentage = 0
weight = 0 # weight = 0
number_defects = 0 # number_defects = 0
total_pixels = 0 # total_pixels = 0
rp = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands), # rp = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands),
dtype=np.uint8), cv2.COLOR_BGR2RGB) # dtype=np.uint8), cv2.COLOR_BGR2RGB)
return diameter, green_percentage, weight, number_defects, total_pixels, rp return diameter, green_percentage, weight, number_defects, total_pixels, rp
def process_data(seif, cmd: str, images: list, spec: any, pipe: Pipe, detector: Spec_predict) -> bool: def process_data(seif, cmd: str, images: list, spec: any, pipe: Pipe, detector: Spec_predict) -> bool:
@ -699,6 +703,14 @@ class Data_processing:
if cmd == 'TO': if cmd == 'TO':
brix = 0 brix = 0
weight = 0 weight = 0
# 如果直径小于3判断为空果拖异常图则将所有值重置为0
if diameter < 3:
diameter = 0
gp = 0
max_defect_num = 0
max_total_defect_area = 0
rp_result = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands),
dtype=np.uint8), cv2.COLOR_BGR2RGB)
# print(f'预测的brix值为{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{gp};' # print(f'预测的brix值为{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{gp};'
# f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};') # f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};')
response = pipe.send_data(cmd=cmd, brix=brix, diameter=diameter, green_percentage=gp, weight=weight, response = pipe.send_data(cmd=cmd, brix=brix, diameter=diameter, green_percentage=gp, weight=weight,
@ -706,8 +718,16 @@ class Data_processing:
return response return response
elif cmd == 'PF': elif cmd == 'PF':
brix = detector.predict(spec) brix = detector.predict(spec)
if diameter == 0: # 如果直径小于2.5判断为空果拖异常图则将所有值重置为0
if diameter < 2.5:
brix = 0 brix = 0
diameter = 0
gp= 0
weight = 0
max_defect_num = 0
max_total_defect_area = 0
rp_result = cv2.cvtColor(np.ones((setting.n_rgb_rows, setting.n_rgb_cols, setting.n_rgb_bands),
dtype=np.uint8), cv2.COLOR_BGR2RGB)
# print(f'预测的brix值为{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{green_percentage};' # print(f'预测的brix值为{brix}; 预测的直径为:{diameter}; 预测的重量为:{weight}; 预测的绿色比例为:{green_percentage};'
# f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};') # f' 预测的缺陷数量为:{max_defect_num}; 预测的总缺陷面积为:{max_total_defect_area};')
response = pipe.send_data(cmd=cmd, brix=brix, green_percentage=gp, diameter=diameter, weight=weight, response = pipe.send_data(cmd=cmd, brix=brix, green_percentage=gp, diameter=diameter, weight=weight,

View File

@ -6,6 +6,9 @@
import sys import sys
import os import os
import cv2
from root_dir import ROOT_DIR from root_dir import ROOT_DIR
from classifer import Spec_predict, Data_processing from classifer import Spec_predict, Data_processing
# from classifer import ImageClassifier # from classifer import ImageClassifier
@ -54,13 +57,15 @@ def main(is_debug=False):
if cmd == 'YR': if cmd == 'YR':
break break
#主循环 #主循环
# q = 1 q = 1
while True: while True:
#RGB图像部分 #RGB图像部分
# start_time = time.time() # start_time = time.time()
images = [] images = []
cmd = None cmd = None
for _ in range(5): #三个相机产生5张图qt发送方顺序为上方相机3张左右相机各1张
#实际使用时并未对最后两张两侧相机所得结果进行统计因此也可改为3qt发送方顺序为上方相机3张
for i in range(5):
# start_time1 = time.time() # start_time1 = time.time()
data = pipe.receive_rgb_data(rgb_receive) data = pipe.receive_rgb_data(rgb_receive)
# end_time10 = time.time() # end_time10 = time.time()
@ -68,6 +73,11 @@ def main(is_debug=False):
# start_time11 = time.time() # start_time11 = time.time()
cmd, img = pipe.parse_img(data) cmd, img = pipe.parse_img(data)
#接收到的图像保存本地
# img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# # cv2.imwrite(f'./{q}_{i}.bmp', img)
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# end_time1 = time.time() # end_time1 = time.time()
# print(f'解析第{q}组第{i}份RGB数据时间{(end_time1 - start_time11) * 1000}毫秒') # print(f'解析第{q}组第{i}份RGB数据时间{(end_time1 - start_time11) * 1000}毫秒')
# print(f'接收第{q}组第{i}张RGB图时间{(end_time1 - start_time1) * 1000}毫秒') # print(f'接收第{q}组第{i}张RGB图时间{(end_time1 - start_time1) * 1000}毫秒')
@ -115,7 +125,7 @@ def main(is_debug=False):
# end_time = time.time() # end_time = time.time()
# print(f'第{q}组全流程时间:{(end_time - start_time) * 1000}毫秒') # print(f'第{q}组全流程时间:{(end_time - start_time) * 1000}毫秒')
# q += 1 q += 1
if __name__ == '__main__': if __name__ == '__main__':
''' '''

View File

@ -69,8 +69,8 @@ class MainWindow(QMainWindow):
:param image_dir: bmp和raw文件所在文件夹 :param image_dir: bmp和raw文件所在文件夹
:return: :return:
''' '''
rgb_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith(('.bmp'))][:5] rgb_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith(('.bmp'))][:20]
spec_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith('.raw')][:1] spec_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith('.raw')][:5]
self.send_YR() self.send_YR()
for _ in range(5): for _ in range(5):