mirror of
https://github.com/NanjingForestryUniversity/supermachine--tomato-passion_fruit.git
synced 2025-11-09 06:44:02 +00:00
fix:修改空果拖判别时刻,改为一个果子最后汇总指标信息后进行判别;根据何工确定,直径以长径为准
This commit is contained in:
parent
de9ffff6a2
commit
e9ada7a266
23
.idea/supermachine--tomato-passion_fruit.iml
generated
23
.idea/supermachine--tomato-passion_fruit.iml
generated
@ -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" />
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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张
|
||||||
|
#实际使用时,并未对最后两张两侧相机所得结果进行统计,因此也可改为3(qt发送方顺序为上方相机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__':
|
||||||
'''
|
'''
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user