| @@ -0,0 +1,656 @@ | |||||
| """ | |||||
| Author: youngorsu | |||||
| Email : zhiyongsu@qq.com | |||||
| Last edited: 2018.1.29 | |||||
| """ | |||||
| # coding=utf-8 | |||||
| import sys | |||||
| import os | |||||
| from PyQt5.QtWidgets import ( | |||||
| QMainWindow, | |||||
| QLabel, | |||||
| QLineEdit, | |||||
| QPushButton, | |||||
| QHBoxLayout, | |||||
| QVBoxLayout, | |||||
| QGridLayout, | |||||
| QTableWidget, | |||||
| QWidget, | |||||
| QAbstractItemView, | |||||
| QHeaderView, | |||||
| QGraphicsView, | |||||
| QGraphicsScene, | |||||
| QGraphicsPixmapItem, | |||||
| QSplitter, | |||||
| QFileDialog, | |||||
| QTableWidgetItem, | |||||
| QGraphicsRectItem, | |||||
| QCheckBox, | |||||
| QMessageBox, | |||||
| QGraphicsSimpleTextItem, | |||||
| qApp, | |||||
| QApplication) | |||||
| from PyQt5.QtGui import QIcon, QColor, QPainter, QImage, QPixmap, QPen, QBrush, QFont, QPalette | |||||
| from PyQt5.QtCore import Qt, QDir, QSize, QEventLoop, QThread, pyqtSignal | |||||
| from hyperlpr_py3 import pipline as pp | |||||
| import cv2 | |||||
| import numpy as np | |||||
| import time | |||||
| def SimpleRecognizePlateWithGui(image): | |||||
| t0 = time.time() | |||||
| images = pp.detect.detectPlateRough( | |||||
| image, image.shape[0], top_bottom_padding_rate=0.1) | |||||
| res_set = [] | |||||
| for j, plate in enumerate(images): | |||||
| plate, rect, origin_plate = plate | |||||
| plate = cv2.resize(plate, (136, 36 * 2)) | |||||
| t1 = time.time() | |||||
| plate_color = "蓝" | |||||
| plate_type = pp.td.SimplePredict(plate) | |||||
| if (plate_type > 0) and (plate_type < 5): | |||||
| plate = cv2.bitwise_not(plate) | |||||
| plate_color = "黄" | |||||
| image_rgb = pp.fm.findContoursAndDrawBoundingBox(plate) | |||||
| image_rgb = pp.fv.finemappingVertical(image_rgb) | |||||
| pp.cache.verticalMappingToFolder(image_rgb) | |||||
| e2e_plate, e2e_confidence = pp.e2e.recognizeOne(image_rgb) | |||||
| #print("e2e:", e2e_plate, e2e_confidence) | |||||
| image_gray = cv2.cvtColor(image_rgb, cv2.COLOR_RGB2GRAY) | |||||
| #print("校正", time.time() - t1, "s") | |||||
| t2 = time.time() | |||||
| val = pp.segmentation.slidingWindowsEval(image_gray) | |||||
| # print val | |||||
| #print("分割和识别", time.time() - t2, "s") | |||||
| if len(val) == 3: | |||||
| blocks, res, confidence = val | |||||
| if confidence / 7 > 0.7: | |||||
| for i, block in enumerate(blocks): | |||||
| block_ = cv2.resize(block, (24, 24)) | |||||
| block_ = cv2.cvtColor(block_, cv2.COLOR_GRAY2BGR) | |||||
| image[j * 24:(j * 24) + 24, i * 24:(i * 24) + 24] = block_ | |||||
| if image[j * 24:(j * 24) + 24, | |||||
| i * 24:(i * 24) + 24].shape == block_.shape: | |||||
| pass | |||||
| res_set.append([res, | |||||
| confidence / 7, | |||||
| rect, | |||||
| plate_color, | |||||
| e2e_plate, | |||||
| e2e_confidence, | |||||
| len(blocks)]) | |||||
| #print(time.time() - t0, "s") | |||||
| return image, res_set | |||||
| class LicenseRecognizationThread(QThread): | |||||
| recognization_done_signal = pyqtSignal(list) | |||||
| def __init__(self, parent=None): | |||||
| super().__init__(parent) | |||||
| self.hyperlpr_dir_path = "" | |||||
| self.filenames = [] | |||||
| def set_parameter(self, filename_list, path): | |||||
| self.hyperlpr_dir_path = path | |||||
| self.filenames = filename_list | |||||
| def run(self): | |||||
| while True: | |||||
| time.sleep(1) | |||||
| if len(self.hyperlpr_dir_path) > 0: | |||||
| for i in range(0, len(self.filenames)): | |||||
| path = os.path.join( | |||||
| self.hyperlpr_dir_path, self.filenames[i]) | |||||
| image = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1) | |||||
| image, res_set = SimpleRecognizePlateWithGui(image) | |||||
| self.recognization_done_signal.emit([i, res_set]) | |||||
| self.hyperlpr_dir_path = "" | |||||
| class HyperLprImageView(QGraphicsView): | |||||
| def __init__(self): | |||||
| super().__init__() | |||||
| self.init_ui() | |||||
| def init_ui(self): | |||||
| scene = QGraphicsScene() | |||||
| scene.setBackgroundBrush(QColor(100, 100, 100)) | |||||
| scene.setItemIndexMethod(QGraphicsScene.BspTreeIndex) | |||||
| scene.setSceneRect(scene.itemsBoundingRect()) | |||||
| self.setDragMode(QGraphicsView.RubberBandDrag) | |||||
| self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) | |||||
| self.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) | |||||
| self.frame_item = QGraphicsPixmapItem() | |||||
| self.text_item_offset = 0 | |||||
| self.rect_item_array = [] | |||||
| self.text_item_array = [] | |||||
| for i in range(0, 5): | |||||
| rect_item = QGraphicsRectItem() | |||||
| rect_item.setVisible(False) | |||||
| rect_item.setZValue(20.0) | |||||
| rect_item.setPen(QPen(Qt.red, 5)) | |||||
| rect_item.setRect(20, 20, 20, 20) | |||||
| scene.addItem(rect_item) | |||||
| self.rect_item_array.append(rect_item) | |||||
| text_item = QGraphicsSimpleTextItem("") | |||||
| text_item.setBrush(QBrush(Qt.red)) | |||||
| text_item.setZValue(20.0) | |||||
| text_item.setPos(10, 50) | |||||
| text_item.setFont(QFont("黑体", 32)) | |||||
| text_item.setVisible(False) | |||||
| scene.addItem(text_item) | |||||
| self.text_item_array.append(text_item) | |||||
| scene.addItem(self.frame_item) | |||||
| self.curr_factor = 1.0 | |||||
| self.setScene(scene) | |||||
| def resetRectText(self, res_set): | |||||
| max_no = len(res_set) | |||||
| if max_no > 5: | |||||
| max_no = 5 | |||||
| for i in range(0, 5): | |||||
| if i < max_no: | |||||
| curr_rect = res_set[i][2] | |||||
| self.rect_item_array[i].setRect(int(curr_rect[0]), int( | |||||
| curr_rect[1]), int(curr_rect[2]), int(curr_rect[3])) | |||||
| self.rect_item_array[i].setVisible(True) | |||||
| self.text_item_array[i].setText( | |||||
| res_set[i][0] + " " + res_set[i][3]) | |||||
| self.text_item_array[i].setPos( | |||||
| int(curr_rect[0]), int(curr_rect[1]) - 48) | |||||
| self.text_item_array[i].setVisible(True) | |||||
| else: | |||||
| self.text_item_array[i].setVisible(False) | |||||
| self.rect_item_array[i].setVisible(False) | |||||
| def wheelEvent(self, event): | |||||
| factor = event.angleDelta().y() / 120.0 | |||||
| if event.angleDelta().y() / 120.0 > 0: | |||||
| factor = 1.08 | |||||
| else: | |||||
| factor = 0.92 | |||||
| if self.curr_factor > 0.1 and self.curr_factor < 10: | |||||
| self.curr_factor = self.curr_factor * factor | |||||
| self.scale(factor, factor) | |||||
| def resetPixmap(self, image): | |||||
| self.frame_item.setPixmap(QPixmap.fromImage(image)) | |||||
| class HyperLprWindow(QMainWindow): | |||||
| start_init_signal = pyqtSignal() | |||||
| def __init__(self): | |||||
| super().__init__() | |||||
| self.initUI() | |||||
| def initUI(self): | |||||
| self.statusBar().showMessage('Ready') | |||||
| self.image_window_view = HyperLprImageView() | |||||
| table_widget_header_labels = [ | |||||
| "文件名", | |||||
| "分割识别", | |||||
| "置信度", | |||||
| "颜色", | |||||
| "E2E识别", | |||||
| "E2E置信度"] | |||||
| self.hyperlpr_tableview = QTableWidget( | |||||
| 0, len(table_widget_header_labels)) | |||||
| self.hyperlpr_tableview.setHorizontalHeaderLabels( | |||||
| table_widget_header_labels) | |||||
| self.hyperlpr_tableview.setSelectionBehavior( | |||||
| QAbstractItemView.SelectItems) | |||||
| self.hyperlpr_tableview.setSelectionMode( | |||||
| QAbstractItemView.SingleSelection) | |||||
| self.hyperlpr_tableview.setEditTriggers( | |||||
| QAbstractItemView.NoEditTriggers) | |||||
| self.hyperlpr_tableview.horizontalHeader().setSectionResizeMode( | |||||
| QHeaderView.ResizeToContents) | |||||
| self.hyperlpr_tableview.setEditTriggers( | |||||
| QAbstractItemView.NoEditTriggers) | |||||
| self.hyperlpr_tableview.cellClicked.connect( | |||||
| self.recognize_one_license_plate) | |||||
| self.location_label = QLabel("车牌目录", self) | |||||
| self.location_text = QLineEdit(self) | |||||
| self.location_text.setEnabled(False) | |||||
| self.location_text.setFixedWidth(300) | |||||
| self.location_button = QPushButton("...") | |||||
| self.location_button.clicked.connect(self.select_new_dir) | |||||
| self.location_layout = QHBoxLayout() | |||||
| self.location_layout.addWidget(self.location_label) | |||||
| self.location_layout.addWidget(self.location_text) | |||||
| self.location_layout.addWidget(self.location_button) | |||||
| self.location_layout.addStretch() | |||||
| self.check_box = QCheckBox("与文件名比较车牌") | |||||
| self.check_box.setChecked(True) | |||||
| self.update_file_path_button = QPushButton('批量识别') | |||||
| self.update_file_path_button.clicked.connect( | |||||
| self.batch_recognize_all_images) | |||||
| self.update_file_path_layout = QHBoxLayout() | |||||
| self.update_file_path_layout.addWidget(self.check_box) | |||||
| self.update_file_path_layout.addWidget(self.update_file_path_button) | |||||
| self.update_file_path_layout.addStretch() | |||||
| self.bottom_layout = QVBoxLayout() | |||||
| self.bottom_layout.addLayout(self.location_layout) | |||||
| self.bottom_layout.addLayout(self.update_file_path_layout) | |||||
| bottom_widget = QWidget() | |||||
| bottom_widget.setLayout(self.bottom_layout) | |||||
| license_plate_iamge_label = QLabel("车牌图") | |||||
| self.license_plate_widget = QLabel("") | |||||
| block_image_label = QLabel("分割图") | |||||
| self.block_plate_widget = QLabel("") | |||||
| filename_label = QLabel("文件名:") | |||||
| self.filename_edit = QLineEdit() | |||||
| segmentation_recognition_label = QLabel("分割识别:") | |||||
| self.segmentation_recognition_edit = QLineEdit() | |||||
| self.segmentation_recognition_edit.setFont(QFont("黑体", 24, QFont.Bold)) | |||||
| self.segmentation_recognition_edit.setStyleSheet("color:red") | |||||
| confidence_label = QLabel("置信度") | |||||
| self.confidence_edit = QLineEdit() | |||||
| self.confidence_edit.setFont(QFont("黑体", 24, QFont.Bold)) | |||||
| self.confidence_edit.setStyleSheet("color:red") | |||||
| plate_color_label = QLabel("车牌颜色") | |||||
| self.plate_color_edit = QLineEdit() | |||||
| self.plate_color_edit.setFont(QFont("黑体", 24, QFont.Bold)) | |||||
| self.plate_color_edit.setStyleSheet("color:red") | |||||
| e2e_recognization_label = QLabel("e2e识别:") | |||||
| self.e2e_recognization_edit = QLineEdit() | |||||
| self.e2e_recognization_edit.setFont(QFont("黑体", 24, QFont.Bold)) | |||||
| self.e2e_recognization_edit.setStyleSheet("color:red") | |||||
| e2e_confidence_label = QLabel("e2e置信度") | |||||
| self.e2e_confidence_edit = QLineEdit() | |||||
| self.e2e_confidence_edit.setFont(QFont("黑体", 24, QFont.Bold)) | |||||
| self.e2e_confidence_edit.setStyleSheet("color:red") | |||||
| info_gridlayout = QGridLayout() | |||||
| info_gridlayout.addWidget(filename_label, 0, 0) | |||||
| info_gridlayout.addWidget(self.filename_edit, 0, 1) | |||||
| info_gridlayout.addWidget(license_plate_iamge_label, 1, 0) | |||||
| info_gridlayout.addWidget(self.license_plate_widget, 1, 1) | |||||
| info_gridlayout.addWidget(block_image_label, 2, 0) | |||||
| info_gridlayout.addWidget(self.block_plate_widget, 2, 1) | |||||
| info_gridlayout.addWidget(segmentation_recognition_label, 3, 0) | |||||
| info_gridlayout.addWidget(self.segmentation_recognition_edit, 3, 1) | |||||
| info_gridlayout.addWidget(confidence_label, 4, 0) | |||||
| info_gridlayout.addWidget(self.confidence_edit, 4, 1) | |||||
| info_gridlayout.addWidget(plate_color_label, 5, 0) | |||||
| info_gridlayout.addWidget(self.plate_color_edit, 5, 1) | |||||
| info_gridlayout.addWidget(e2e_recognization_label, 6, 0) | |||||
| info_gridlayout.addWidget(self.e2e_recognization_edit, 6, 1) | |||||
| info_gridlayout.addWidget(e2e_confidence_label, 7, 0) | |||||
| info_gridlayout.addWidget(self. e2e_confidence_edit, 7, 1) | |||||
| info_widget = QWidget() | |||||
| info_widget.setLayout(info_gridlayout) | |||||
| right_splitter = QSplitter(Qt.Vertical) | |||||
| right_splitter.addWidget(bottom_widget) | |||||
| right_splitter.addWidget(self.hyperlpr_tableview) | |||||
| right_splitter.addWidget(info_widget) | |||||
| right_splitter.setStretchFactor(1, 3) | |||||
| right_splitter.setStretchFactor(2, 2) | |||||
| main_splitter = QSplitter(Qt.Horizontal) | |||||
| main_splitter.addWidget(self.image_window_view) | |||||
| main_splitter.addWidget(right_splitter) | |||||
| main_splitter.setStretchFactor(0, 1) | |||||
| self.image_filename_list = [] | |||||
| self.hyperlpr_dir_path = "" | |||||
| self.segmentation_recognition_correct_number = 0 | |||||
| self.color_correct_number = 0 | |||||
| self.e2e_recognization_correct_number = 0 | |||||
| self.batch_recognization_thread = LicenseRecognizationThread() | |||||
| self.batch_recognization_thread.recognization_done_signal.connect( | |||||
| self.recognization_done_slot) | |||||
| self.batch_recognization_thread.start() | |||||
| self.start_init_signal.connect(self.read_path_and_show_one_image) | |||||
| self.setCentralWidget(main_splitter) | |||||
| self.setWindowTitle("HyperLPR车牌识别软件v1.0") | |||||
| self.start_init_signal.emit() | |||||
| def read_path_and_show_one_image(self): | |||||
| hyperlpr_dir_info_filepath = QDir.homePath() + "/hyperlpr_dir_file" | |||||
| if os.path.exists(hyperlpr_dir_info_filepath): | |||||
| with open(hyperlpr_dir_info_filepath, 'r') as f: | |||||
| self.hyperlpr_dir_path = f.read() | |||||
| if len(self.hyperlpr_dir_path) > 0: | |||||
| self.reset_info_gui() | |||||
| if len(self.image_filename_list) > 0: | |||||
| self.recognize_and_show_one_image(self.image_filename_list[0], 0) | |||||
| def select_new_dir(self): | |||||
| self.hyperlpr_dir_path = QFileDialog.getExistingDirectory( | |||||
| self, "读取文件夹", QDir.currentPath()) | |||||
| if len(self.hyperlpr_dir_path) > 0: | |||||
| hyperlpr_dir_info_filepath = QDir.homePath() + "/hyperlpr_dir_file" | |||||
| with open(hyperlpr_dir_info_filepath, 'w') as f: | |||||
| f.write(self.hyperlpr_dir_path) | |||||
| self.reset_info_gui() | |||||
| def reset_info_gui(self): | |||||
| self.location_text.setText(self.hyperlpr_dir_path) | |||||
| self.scan_files_with_new_dir(self.hyperlpr_dir_path) | |||||
| self.fill_table_with_new_info() | |||||
| def scan_files_with_new_dir(self, path): | |||||
| name_list = os.listdir(path) # 列出文件夹下所有的目录与文件 | |||||
| self.image_filename_list.clear() | |||||
| for i in range(0, len(name_list)): | |||||
| if name_list[i].endswith( | |||||
| ".jpg") or name_list[i].endswith(".png"): | |||||
| self.image_filename_list.append(name_list[i]) | |||||
| def fill_table_with_new_info(self): | |||||
| self.hyperlpr_tableview.clearContents() | |||||
| row_count = self.hyperlpr_tableview.rowCount() | |||||
| for i in range(row_count, -1, -1): | |||||
| self.hyperlpr_tableview.removeRow(i) | |||||
| for i in range(0, len(self.image_filename_list)): | |||||
| row = self.hyperlpr_tableview.rowCount() | |||||
| self.hyperlpr_tableview.insertRow(row) | |||||
| item0 = QTableWidgetItem() | |||||
| item0.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 0, item0) | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 0).setText( | |||||
| self.image_filename_list[i]) | |||||
| item1 = QTableWidgetItem() | |||||
| item1.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 1, item1) | |||||
| item2 = QTableWidgetItem() | |||||
| item2.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 2, item2) | |||||
| item3 = QTableWidgetItem() | |||||
| item3.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 3, item3) | |||||
| item4 = QTableWidgetItem() | |||||
| item4.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 4, item4) | |||||
| item5 = QTableWidgetItem() | |||||
| item5.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(row, 5, item5) | |||||
| def recognize_one_license_plate(self, row, col): | |||||
| if col == 0 and row < len(self.image_filename_list): | |||||
| self.recognize_and_show_one_image( | |||||
| self.image_filename_list[row], row) | |||||
| def recognize_and_show_one_image(self, image_filename_text, row): | |||||
| if image_filename_text.endswith(".jpg"): | |||||
| path = os.path.join(self.hyperlpr_dir_path, image_filename_text) | |||||
| image = cv2.imdecode(np.fromfile(path, dtype=np.uint8), -1) | |||||
| image, res_set = SimpleRecognizePlateWithGui(image) | |||||
| img = QImage( | |||||
| image.data, | |||||
| image.shape[1], | |||||
| image.shape[0], | |||||
| image.shape[1] * image.shape[2], | |||||
| QImage.Format_RGB888) | |||||
| self.image_window_view.resetPixmap(img.rgbSwapped()) | |||||
| self.image_window_view.resetRectText(res_set) | |||||
| if len(res_set) > 0: | |||||
| curr_rect = res_set[0][2] | |||||
| image_crop = image[int(curr_rect[1]):int( | |||||
| curr_rect[1] + curr_rect[3]), int(curr_rect[0]):int(curr_rect[0] + curr_rect[2])] | |||||
| curr_plate = cv2.resize(image_crop, (136, 72)) | |||||
| plate_img = QImage( | |||||
| curr_plate.data, | |||||
| curr_plate.shape[1], | |||||
| curr_plate.shape[0], | |||||
| curr_plate.shape[1] * | |||||
| curr_plate.shape[2], | |||||
| QImage.Format_RGB888) | |||||
| self.license_plate_widget.setPixmap( | |||||
| QPixmap.fromImage(plate_img.rgbSwapped())) | |||||
| # print(res_set[0][6]) | |||||
| block_crop = image[0:24, 0:(24 * int(res_set[0][6]))] | |||||
| curr_block = cv2.resize( | |||||
| block_crop, (24 * int(res_set[0][6]), 24)) | |||||
| block_image = QImage( | |||||
| curr_block.data, | |||||
| curr_block.shape[1], | |||||
| curr_block.shape[0], | |||||
| curr_block.shape[1] * | |||||
| curr_block.shape[2], | |||||
| QImage.Format_RGB888) | |||||
| self.block_plate_widget.setPixmap( | |||||
| QPixmap.fromImage(block_image.rgbSwapped())) | |||||
| self.segmentation_recognition_edit.setText(res_set[0][0]) | |||||
| self.filename_edit.setText(image_filename_text) | |||||
| self.confidence_edit.setText("%.3f" % (float(res_set[0][1]))) | |||||
| self.plate_color_edit.setText(res_set[0][3]) | |||||
| self.e2e_recognization_edit.setText(res_set[0][4]) | |||||
| self.e2e_confidence_edit.setText( | |||||
| "%.3f" % (float(res_set[0][5]))) | |||||
| else: | |||||
| self.license_plate_widget.clear() | |||||
| self.block_plate_widget.clear() | |||||
| self.segmentation_recognition_edit.setText("") | |||||
| self.filename_edit.setText("") | |||||
| self.confidence_edit.setText("") | |||||
| self.plate_color_edit.setText("") | |||||
| self.e2e_recognization_edit.setText("") | |||||
| self.e2e_confidence_edit.setText("") | |||||
| self.fill_table_widget_with_res_info(res_set, row) | |||||
| def batch_recognize_all_images(self): | |||||
| self.segmentation_recognition_correct_number = 0 | |||||
| self.color_correct_number = 0 | |||||
| self.e2e_recognization_correct_number = 0 | |||||
| self.batch_recognization_thread.set_parameter( | |||||
| self.image_filename_list, self.hyperlpr_dir_path) | |||||
| def recognization_done_slot(self, result_list): | |||||
| row = result_list[0] | |||||
| res_set = result_list[1] | |||||
| self.fill_table_widget_with_res_info(res_set, row) | |||||
| if row == len(self.image_filename_list) - 1: | |||||
| total_number = len(self.image_filename_list) | |||||
| row_count = self.hyperlpr_tableview.rowCount() | |||||
| if row_count > total_number: | |||||
| self.hyperlpr_tableview.removeRow(total_number) | |||||
| self.hyperlpr_tableview.insertRow(total_number) | |||||
| item0 = QTableWidgetItem() | |||||
| item0.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 0, item0) | |||||
| self.hyperlpr_tableview.item( | |||||
| total_number, 0).setText( | |||||
| "统计结果") | |||||
| item1 = QTableWidgetItem() | |||||
| item1.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 1, item1) | |||||
| self.hyperlpr_tableview.item( | |||||
| total_number, 1).setText( | |||||
| "{0} / {1} = {2: .3f}".format(self.segmentation_recognition_correct_number,total_number,self.segmentation_recognition_correct_number/total_number)) | |||||
| item2 = QTableWidgetItem() | |||||
| item2.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 2, item2) | |||||
| item3 = QTableWidgetItem() | |||||
| item3.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 3, item3) | |||||
| self.hyperlpr_tableview.item( | |||||
| total_number, 3).setText( | |||||
| "{0} / {1} = {2: .3f}".format(self.e2e_recognization_correct_number, total_number, | |||||
| self.e2e_recognization_correct_number / total_number)) | |||||
| item4 = QTableWidgetItem() | |||||
| item4.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 4, item4) | |||||
| self.hyperlpr_tableview.item( | |||||
| total_number, 4).setText( | |||||
| "{0} / {1} = {2: .3f}".format(self.color_correct_number, total_number, | |||||
| self.color_correct_number / total_number)) | |||||
| item5 = QTableWidgetItem() | |||||
| item5.setTextAlignment(Qt.AlignCenter) | |||||
| self.hyperlpr_tableview.setItem(total_number, 5, item5) | |||||
| def fill_table_widget_with_res_info(self, res_set, row): | |||||
| image_filename_text = self.image_filename_list[row] | |||||
| if len(res_set) > 0: | |||||
| self.hyperlpr_tableview.item(row, 1).setText(res_set[0][0]) | |||||
| if res_set[0][0] in image_filename_text: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 1).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 0, 0, 255))) | |||||
| self.segmentation_recognition_correct_number += 1 | |||||
| else: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 1).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 255, 0, 0))) | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 2).setText( | |||||
| "%.3f" % | |||||
| (float( | |||||
| res_set[0][1]))) | |||||
| self.hyperlpr_tableview.item(row, 3).setText(res_set[0][3]) | |||||
| if res_set[0][3] in image_filename_text: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 3).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 0, 0, 255))) | |||||
| self.color_correct_number += 1 | |||||
| else: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 3).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 255, 0, 0))) | |||||
| self.hyperlpr_tableview.item(row, 4).setText(res_set[0][4]) | |||||
| if res_set[0][4] in image_filename_text: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 4).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 0, 0, 255))) | |||||
| self.e2e_recognization_correct_number += 1 | |||||
| else: | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 4).setForeground( | |||||
| QBrush( | |||||
| QColor( | |||||
| 255, 0, 0))) | |||||
| self.hyperlpr_tableview.item( | |||||
| row, 5).setText( | |||||
| "%.3f" % | |||||
| (float( | |||||
| res_set[0][5]))) | |||||
| if __name__ == '__main__': | |||||
| app = QApplication(sys.argv) | |||||
| hyper_lpr_widow = HyperLprWindow() | |||||
| hyper_lpr_widow.showMaximized() | |||||
| sys.exit(app.exec_()) | |||||