def file_open(self): full_path = QFileDialog.getOpenFileName(None, 'Open file', './') if full_path[0]: file_path = f'{full_path[0]}' dir_list = os.path.dirname(file_path) self.active_folder = dir_list[-1] print('Window: file_open = ', self.active_folder) return file_path else: notice.message('Warning', '파일 선택을 하지 않았습니다.') return 0
def algorithm(self): print('window: algorithm') # 풀스크린 테이블 초기화 self.confirmation.list_clear() # 이미지 리스트 초기화 self.roi_merge.clear() self.mask_merge.clear() self.mask_list.clear() self.roi_list.clear() if len(self.view.get_mask_list()) is 0: notice.message('Algorithm', '선택된 쓰레숄드가 없습니다.') return # string -> int casting. int_max = self.menu.label_max_value.text() int_min = self.menu.label_min_value.text() self.auto.clear_list() self.auto.max_size = int(int_max) self.auto.min_size = int(int_min) notice.message( '알림', '종료 알림창이 보일 때 까지 잠시 기다려 주세요! \n Yes 를 클릭하시면 알고리즘 처리를 시작합니다.') # 사용자 선택 이미지 총 갯수 i: int = 0 total_count = len(self.provider.image_container) # 사용자 선택된 마스크들 처리 for mask in self.view.get_mask_list(): roi_result, mask_result = self.auto.roi_designation( self.provider.image_container, self.active_image_index, mask, total_count) self.roi_list = self.roi_merge.mask_overwrite( total_count, roi_result) self.mask_list = self.mask_merge.mask_overwrite( total_count, mask_result) i = i + 1 print('t = ', i) self.progress_value(100, 100) notice.message('알림', '알고리즘 처리를 종료 했습니다.') # 알고리즘 처리된 결과를 화면에 보여 줍니다. self.progress_value(0, 0) self.menu.exportButtonGreenColor() self.confirmation.create(self.mask_list, self.roi_list) self.scroll_mask.setWidget(self.confirmation.top_widget) self.scroll_mask.show() self.view.repaint()
def changButtonClicked(self): print('call Menu: changButtonClicked') # 사용자가 선택한 파일경로 call_file = self.call_open_path file_path = call_file() if file_path is 0: return # 사용자가 선택한 파일이름 last_name = file_path[file_path.rfind('/') + 1:] # 파일이름의 경로 폴더명 dicom_folder = file_path.replace(last_name, '', 1) notice.message('messages..', '아래 Yes 를 누르면 파일 변환을 시작합니다. 잠시만 기다려 주세요...') if check.extension_dicom(dicom_folder): # 폴더에 들어 있는 DICOM 에서 PNG 파일 내보내기 img_folder = file_manager.create_folder_img( self.image_save_path, Menu.IMAGE_EXTENSION) roi_folder = file_manager.create_folder_roi(img_folder) convert.dicom_imageToImg(dicom_folder, img_folder, Menu.IMAGE_EXTENSION) print('DICOM 파일에서', {Menu.IMAGE_EXTENSION}, '파일 내보내기 완료!') # 0.1초 delay 후 time.sleep(0.1) # 썸내일 이미지 만들기 self.check_thumbnail(img_folder) # roi 폴더의 mask 파일 리스트 roi_list = file_manager.find_png_list(roi_folder) time.sleep(0.1) # Window 메소드를 호출하여 scroll 에 경로 데이터를 보냅니다. call_data = self.call_scroll call_data(img_folder, roi_list) else: notice.message('Error', messages.ERROR_DICOM) return notice.message('messages..', '파일 변환이 완료 되었습니다. 아래 Yes 를 눌러 주세요!')
def mask_export(self): if len(self.mask_list) is 0: notice.message('EXPORT', '선택된 이미지가 없습니다. 알고리즘 처리를 먼저 해 주세요!') return file_manager.create_folder(self.active_folder) notice.message('EXPORT', '내보내기를 시작합니다. 시간이 다소 소요 됩니다.') # 마스크 TEXT 파일로 내보내기 i: int = 0 for obj in self.mask_list: # obj 가 0이 아니면 if obj != 0: # 사용자 마스크 체크 확인 _, _, check = self.confirmation.mask_disable[i] if check is True: img, index = obj img_text.to_binary(self.active_folder, img, index) i = i + 1 self.progress_value(len(self.mask_list), i) # 종료 로직 self.progress_value(100, 100) self.mask_list.clear() self.roi_list.clear() self.menu.exportButtonGrayColor() notice.message('EXPORT', '내보내기가 완료 되었습니다.') self.progress_value(0, 0) # 풀스크린 우측 테이블 초기화 self.confirmation.list_clear() self.confirmation.create(self.mask_list, self.roi_list) self.scroll_mask.setWidget(self.confirmation.top_widget) self.scroll_mask.show() self.view.clear_mask() self.re_setting(self.active_path, self.active_image_index)