增加註解
This commit is contained in:
parent
eca964d725
commit
8b97362ac2
@ -125,6 +125,7 @@ class ScrewDrive(QThread):
|
||||
# print(f'self.Pre_ROI_Dic = {self.Myini.Pre_ROI_Dic}')
|
||||
print(f'self.Identity = {self.Identity}')
|
||||
# print(f'self.ROI_List = {self.Myini.ROI_List}')
|
||||
# 根據recipe名稱找INI檔內座標的絕對位置切割影像 切第一次圖
|
||||
self.image_AI = self.image_AI[self.Myini.Pre_ROI_Dic[self.Identity][1]:self.Myini.Pre_ROI_Dic[self.Identity][1] + self.Myini.Pre_ROI_Dic[self.Identity][3], self.Myini.Pre_ROI_Dic[self.Identity][0]:self.Myini.Pre_ROI_Dic[self.Identity][0] + self.Myini.Pre_ROI_Dic[self.Identity][2]]
|
||||
self.Result = self.Result[self.Myini.Pre_ROI_Dic[self.Identity][1]:self.Myini.Pre_ROI_Dic[self.Identity][1] + self.Myini.Pre_ROI_Dic[self.Identity][3], self.Myini.Pre_ROI_Dic[self.Identity][0]:self.Myini.Pre_ROI_Dic[self.Identity][0] + self.Myini.Pre_ROI_Dic[self.Identity][2]]
|
||||
# print(f'self.Result.shape = {self.Result.shape}')
|
||||
@ -133,6 +134,7 @@ class ScrewDrive(QThread):
|
||||
starttime = time.time()
|
||||
|
||||
Images_AI = self.ROI(self.image_AI)
|
||||
# 進行推論 YOLO推論的類別 可能不等於真實的類別
|
||||
class_names_AI, confidences, Index = self.Predict_Images_YOLOv8(Images_AI, 0)
|
||||
# print(f'class_names_AI = {class_names_AI}')
|
||||
|
||||
@ -148,7 +150,7 @@ class ScrewDrive(QThread):
|
||||
self.parallel_processing_AllImage(class_names_AI, Index, confidences, 0, self.lock, Images_AI)
|
||||
except Exception as e:
|
||||
self.dev_logger.error(f'parallel_processing_AllImage\n{e}')
|
||||
|
||||
# 發出狀態信號,表示該過程已經完成
|
||||
self.status.emit(True)
|
||||
|
||||
def split_list(alist, wanted_parts=1):
|
||||
@ -167,6 +169,7 @@ class ScrewDrive(QThread):
|
||||
while self.AOIimage_ISREADY == False:
|
||||
time.sleep(0.01)
|
||||
print('.')
|
||||
# 根據recipe名稱找INI檔內座標的絕對位置切割影像 切第二次圖
|
||||
self.image_AOI = self.image_AOI[self.Myini.Pre_ROI_Dic[self.Identity][1]:self.Myini.Pre_ROI_Dic[self.Identity][1] + self.Myini.Pre_ROI_Dic[self.Identity][3], self.Myini.Pre_ROI_Dic[self.Identity][0]:self.Myini.Pre_ROI_Dic[self.Identity][0] + self.Myini.Pre_ROI_Dic[self.Identity][2]]
|
||||
# cv2.imwrite(f'./imageprocess/{self.Identity}.png', self.image_AOI)
|
||||
|
||||
@ -192,7 +195,7 @@ class ScrewDrive(QThread):
|
||||
# class_name = class_names_AI[Index.index(i)]
|
||||
|
||||
print(f'{self.Myini.Class_Name_All[i]} --> {class_name} index = {Index.index(i)}')
|
||||
self.NG_Image_Information[self.Myini.Class_Name_All[i]] = class_name
|
||||
self.NG_Image_Information[self.Myini.Class_Name_All[i]] = class_name #沒看懂這啥 by賢恩
|
||||
if class_name == self.Myini.Class_Name_All[i]:
|
||||
self.report.emit(1, confidences[Index.index(i)], i, diameter, numberofvertices)
|
||||
self.DrawResult(i, 0, 255, 0)
|
||||
@ -259,7 +262,6 @@ class ScrewDrive(QThread):
|
||||
cv2.imwrite(
|
||||
f'./imageprocess/{self.Myini.recipe}/AOI_Origin/{self.Time_for_Record}_{class_name}_{i}_{diameter}_{numberofvertices}.png',
|
||||
img.Image)
|
||||
|
||||
cv2.imwrite(
|
||||
f'./imageprocess/{self.Myini.recipe}/AI/{self.Filenames_for_Record[self.Myini.Class_Name_AI.index(self.Myini.Class_Name_All[i])]}/{self.Time_for_Record}_{class_name}_{i}_{confidences[Index.index(i)]}.png',
|
||||
images_ai[i].Image)
|
||||
@ -800,7 +802,7 @@ class Measure:
|
||||
self.Remedy = inputimage
|
||||
self.Histogram = inputimage
|
||||
if classnumber == 'spanner' or classnumber == '03_Spanner':
|
||||
inputimage = self.Unsharpen(inputimage)
|
||||
inputimage = self.Unsharpen(inputimage) # USM锐化增强方法
|
||||
maskimage = self.GetMask_for_KleinTool(inputimage, 55, 60)
|
||||
maskimage_spanner = self.GetMask_for_KleinTool(inputimage, 80, 60)
|
||||
|
||||
@ -811,7 +813,7 @@ class Measure:
|
||||
elif classnumber == 'square':
|
||||
ret, Threshold_Image = cv2.threshold(inputimage, 130, 255, cv2.THRESH_BINARY)
|
||||
elif classnumber == 'hextamperproof':
|
||||
inputimage = self.Unsharpen(inputimage)
|
||||
inputimage = self.Unsharpen(inputimage) # USM锐化增强方法
|
||||
self.Remedy = inputimage
|
||||
maskimage = self.GetMask_for_KleinTool(inputimage)
|
||||
self.Histogram = maskimage
|
||||
@ -820,7 +822,7 @@ class Measure:
|
||||
elif classnumber == 'triwing':
|
||||
ret, Threshold_Image = cv2.threshold(inputimage, 170, 255, cv2.THRESH_BINARY) # 150
|
||||
elif classnumber == 'torxtamperproof':
|
||||
inputimage = self.Unsharpen(inputimage)
|
||||
inputimage = self.Unsharpen(inputimage) # USM锐化增强方法
|
||||
self.Remedy = inputimage
|
||||
maskimage = self.GetMask_for_KleinTool(inputimage, 55)
|
||||
self.Histogram = maskimage
|
||||
@ -848,14 +850,18 @@ class Measure:
|
||||
center = (int(x), int(y))
|
||||
radius_int = int(radius)
|
||||
if classnumber in ['torxtamperproof']:
|
||||
# 建立mask
|
||||
mask = np.zeros(Threshold_Image.shape, dtype='uint8')
|
||||
cv2.circle(mask, center, radius_int, (255, 255, 255), -1)
|
||||
cv2.circle(self.InputImage, center, radius_int, (0, 0, 255), 2)
|
||||
new_image = cv2.bitwise_and(inputimage, mask)
|
||||
# cv2.imwrite(f'./Measure/new_image.png', new_image)
|
||||
mean_value = cv2.mean(new_image[center[1] - radius_int:center[1] + radius_int,center[0] - radius_int:center[0] + radius_int]) # 計算套頭形狀部分的亮度平均值
|
||||
threshold_value = int(mean_value[0] * 1.15) # 計算inputimage的閾值
|
||||
# 計算套頭形狀部分的亮度平均值
|
||||
mean_value = cv2.mean(new_image[center[1] - radius_int:center[1] + radius_int,center[0] - radius_int:center[0] + radius_int])
|
||||
# 計算inputimage的閾值 二值化閾值為平均亮度*1.15
|
||||
threshold_value = int(mean_value[0] * 1.15)
|
||||
# print(f'threshold_value = {threshold_value}')
|
||||
# 保留遮罩範圍內的影像資訊
|
||||
self.Histogram = cv2.bitwise_and(new_image, maskimage)
|
||||
ret, Threshold_Image_mean_value = cv2.threshold(cv2.bitwise_and(new_image, maskimage),threshold_value, 255, cv2.THRESH_BINARY) # 二值化
|
||||
# self.Histogram = new_image
|
||||
|
@ -238,7 +238,7 @@ class Screwdriver_Detection(QtWidgets.QMainWindow, Ui_Screwdriver_Detection_Wind
|
||||
self.pushButton_Start.click()
|
||||
self.real_detect_amount -= 1
|
||||
|
||||
def Load_recipe(self):
|
||||
def Load_recipe(self): #用barcode讀工單
|
||||
try:
|
||||
br = abfactory()
|
||||
br.process = CINO_S680
|
||||
@ -261,10 +261,11 @@ class Screwdriver_Detection(QtWidgets.QMainWindow, Ui_Screwdriver_Detection_Wind
|
||||
print(f'barcodereader error --- {e}')
|
||||
|
||||
try:
|
||||
# 用awm_key從資料庫內讀part_no
|
||||
read_datas = self.dbwindow.get_aoi_op_master_datas(self.dbwindow.awm_key)
|
||||
|
||||
# 用part_no讀到權重名稱
|
||||
read_datas_weightname = self.dbwindow.get_aoi_recipe_master_datas(read_datas['part_no'])
|
||||
|
||||
# 用讀到的權重名稱找到INI檔中的模型名稱
|
||||
self.recipe_model = self.get_tool_name_from_ini(read_datas_weightname['para1'].split('.')[0])
|
||||
|
||||
self.engineer_mode_window.comboBox_recipe.setCurrentText(self.recipe_model)
|
||||
@ -272,6 +273,7 @@ class Screwdriver_Detection(QtWidgets.QMainWindow, Ui_Screwdriver_Detection_Wind
|
||||
|
||||
self.show_aoi_op_master_datas_on_UI(read_datas)
|
||||
|
||||
# Enable檢測按鈕
|
||||
self.pushButton_Load_Recipe.setEnabled(False)
|
||||
self.pushButton_Start.setEnabled(True)
|
||||
self.pushButton_ReDetect.setEnabled(True)
|
||||
@ -542,14 +544,14 @@ class Screwdriver_Detection(QtWidgets.QMainWindow, Ui_Screwdriver_Detection_Wind
|
||||
# if self.awm_Key_for_Recipe == 'M11-2303001' and self.dbwindow.awm_key == 'M11-2303001':
|
||||
# print(self.awm_Key_for_Recipe)
|
||||
|
||||
if self.recipe_model == 'Milwaukee':
|
||||
threading.Thread(target=self.Start_Thread_Milwaukee, args=()).start()
|
||||
if self.recipe_model == 'Milwaukee': #公單為Milwaukee
|
||||
threading.Thread(target=self.Start_Thread_Milwaukee, args=()).start() #進入Milwaukee線程
|
||||
# -------------------學長之前寫的測試工單-------------------------
|
||||
# if self.awm_Key_for_Recipe == 'M11-2303002':
|
||||
# threading.Thread(target=self.Start_Thread_KleinTools_Gray, args=()).start()
|
||||
# -------------------20250117修改-------------------------
|
||||
if self.recipe_model == 'KleinTool' or self.recipe_model == 'KleinToolblack':
|
||||
threading.Thread(target=self.Start_Thread_KleinTools_Gray, args=()).start()
|
||||
if self.recipe_model == 'KleinTool' or self.recipe_model == 'KleinToolblack': #公單為KleinTool或KleinToolblack
|
||||
threading.Thread(target=self.Start_Thread_KleinTools_Gray, args=()).start() #進入KleinTool線程
|
||||
self.real_detect_amount += 1
|
||||
def Start_Thread_Milwaukee(self):
|
||||
if self.pushButton_Start.text() == 'System Idle':
|
||||
@ -584,7 +586,7 @@ class Screwdriver_Detection(QtWidgets.QMainWindow, Ui_Screwdriver_Detection_Wind
|
||||
for sd in self.screwdrives:
|
||||
sd.Result = self.Result
|
||||
sd.image_AI = cv2.cvtColor(self.Result, cv2.COLOR_BGR2GRAY)
|
||||
sd.Main(1, self.dbwindow.aoi_start)
|
||||
sd.Main(1, self.dbwindow.aoi_start) # 1為modecode 進入run
|
||||
# self.screwdrive.Result = self.Result
|
||||
# self.screwdrive.image_AI = cv2.cvtColor(self.Result, cv2.COLOR_BGR2GRAY)
|
||||
# self.screwdrive.Main(1, self.dbwindow.aoi_start)
|
||||
|
Loading…
x
Reference in New Issue
Block a user