DWTT自动评定系统算法研究、界面及其逻辑设计
1.程序界面功能效果
2.LoginGui.py登陆界面源码
from PyQt5 import QtCore, QtGui, QtWidgets, Qt from PyQt5.QtGui import QIcon from MainFunGui import * #from hello import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * class Ui_MainWindow(QtWidgets.QMainWindow): def __init__(self): super(Ui_MainWindow,self).__init__() self.setupUi(self) self.retranslateUi(self) def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(600, 400) MainWindow.setWindowIcon(QIcon('compute.png')) MainWindow.setStyleSheet("background-image:url(demo1.jpg)") self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.lineEdit = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit.setGeometry(QtCore.QRect(250, 70, 100, 20)) #加50 self.lineEdit.setText("") self.lineEdit.setObjectName("lineEdit") self.lineEdit_2 = QtWidgets.QLineEdit(self.centralWidget) self.lineEdit_2.setGeometry(QtCore.QRect(250, 120, 100, 20)) self.lineEdit_2.setText("") self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password) self.lineEdit_2.setObjectName("lineEdit_2") self.label = QtWidgets.QLabel(self.centralWidget) self.label.setGeometry(QtCore.QRect(200, 74, 24, 12)) #加50 self.label.setTextFormat(QtCore.Qt.AutoText) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralWidget) self.label_2.setGeometry(QtCore.QRect(200, 124, 24, 12)) self.label_2.setObjectName("label_2") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(190, 180, 75, 23)) #加80 self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(350, 180, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") MainWindow.setCentralWidget(self.centralWidget) self.pushButton.clicked.connect(self.word_get) self.pushButton_2.clicked.connect(MainWindow.close) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "DWTT断口评定系统登录界面")) self.lineEdit.setPlaceholderText(_translate("MainWindow", "请输入帐号")) self.lineEdit_2.setPlaceholderText(_translate("MainWindow", "请输入密码")) self.label.setText(_translate("MainWindow", "帐号")) self.label_2.setText(_translate("MainWindow", "密码")) self.pushButton.setText(_translate("MainWindow", "确定")) self.pushButton_2.setText(_translate("MainWindow", "取消")) def word_get(self): login_user = self.lineEdit.text() login_password = self.lineEdit_2.text() if login_user == '周飞达' and login_password == '123456': #ui_hello.show() #Ui_mainWindow.show() ui_MainFunGui.show() #mainWindow.show() #hello_mainWindow.show() MainWindow.close() else: QMessageBox.warning(self, "警告", "用户名或密码错误!", QMessageBox.Yes) self.lineEdit.setFocus() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui_MainFunGui = MainFunGui_mainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
2.程序的主要逻辑功能模块及其不同模型的预测方法和显示。
#coding:utf-8 import sys import os import win32api from PyQt5 import QtCore, QtGui, QtWidgets #from PyQt5.QtGui import QIcon from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import QFont from PyQt5.QAxContainer import QAxWidget #from pre import * #import pre import pandas as pd import numpy as np import re #主界面设计 class MainFunGui_mainWindow(QtWidgets.QMainWindow): sig = pyqtSignal() def __init__(self): super(MainFunGui_mainWindow,self).__init__() self.tick_win = None self.pushButton1 = QPushButton(self) self.setupUi(self) self.retranslateUi(self) def setupUi(self, mainWindow): mainWindow.setObjectName("mainWindow") mainWindow.setWindowModality(QtCore.Qt.WindowModal) mainWindow.resize(1350, 720) self.retranslateUi(mainWindow) self.centralWidget = QtWidgets.QWidget(mainWindow) self.centralWidget.setObjectName("centralWidget") # 字体设计 font = QtGui.QFont() font.setFamily('微软雅黑') font.setBold(True) font.setPointSize(10) font.setWeight(60) # 按钮设计 self.pushButton1 = QtWidgets.QPushButton(self.centralWidget) self.pushButton1.setGeometry(QtCore.QRect(10, 40, 300, 30)) self.pushButton1.setStyleSheet("background-color:rgb(164,185,255);") self.pushButton1.setText("FCN网络进行DWTT断口图像的语义分割") self.pushButton1.setObjectName("pushButton1") self.pushButton1.setFont(font) self.pushButton2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton2.setGeometry(QtCore.QRect(10, 80, 300, 30)) self.pushButton2.setStyleSheet("background-color:rgb(164,185,255);") self.pushButton2.setText("DeepLabV3+网络进行DWTT断口图像的语义分割") self.pushButton2.setObjectName("pushButton2") self.pushButton2.setFont(font) self.pushButton3 = QtWidgets.QPushButton(self.centralWidget) self.pushButton3.setGeometry(QtCore.QRect(10, 120, 300, 30)) self.pushButton3.setStyleSheet("background-color:rgb(164,185,255);") self.pushButton3.setText("Mask R-CNN网络进行DWTT断口图像的实例分割") self.pushButton3.setObjectName("pushButton3") self.pushButton3.setFont(font) self.pushButton4 = QtWidgets.QPushButton(self.centralWidget) self.pushButton4.setGeometry(QtCore.QRect(1100, 640, 200, 30)) self.pushButton4.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton4.setText("退出系统") self.pushButton4.setObjectName("leave") self.pushButton4.setFont(font) self.pushButton4.clicked.connect(mainWindow.close) self.pushButton5 = QtWidgets.QPushButton(self.centralWidget) self.pushButton5.setGeometry(QtCore.QRect(750, 60, 200, 30)) self.pushButton5.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton5.setText("查看fcn评定结果") self.pushButton5.setObjectName("calculate") self.pushButton5.setFont(font) self.pushButton6 = QtWidgets.QPushButton(self.centralWidget) #打开图像按钮 self.pushButton6.setGeometry(QtCore.QRect(330, 40, 160, 30)) #self.pushButton6.setGeometry(QtCore.QRect(890, 60, 200, 30)) self.pushButton6.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton6.setText("查看FCN分割效果") self.pushButton6.setObjectName("OpenfcnPicture") self.pushButton6.setFont(font) self.pushButton7 = QtWidgets.QPushButton(self.centralWidget) # 打开图像按钮 self.pushButton7.setGeometry(QtCore.QRect(330, 80, 160, 30)) # self.pushButton6.setGeometry(QtCore.QRect(890, 60, 200, 30)) self.pushButton7.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton7.setText("查看DeepLabv3+分割效果") self.pushButton7.setObjectName("Opendeeplabv3+Picture") self.pushButton7.setFont(font) self.pushButton8 = QtWidgets.QPushButton(self.centralWidget) # 打开图像按钮 self.pushButton8.setGeometry(QtCore.QRect(330, 120, 160, 30)) # self.pushButton6.setGeometry(QtCore.QRect(890, 60, 200, 30)) self.pushButton8.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton8.setText("查看MaskR-CNN分割效果") self.pushButton8.setObjectName("OpenmaskrcnnPicture") self.pushButton8.setFont(font) #self.pushButton6.clicked.connect(self.openimage) self.pushButton9 = QtWidgets.QPushButton(self.centralWidget) self.pushButton9.setGeometry(QtCore.QRect(1000, 60, 200, 30)) self.pushButton9.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton9.setText("查看DeepLabv3+评定结果") self.pushButton9.setObjectName("calculate") self.pushButton9.setFont(font) # label设计 self.label1 = QtWidgets.QLabel(self.centralWidget) self.label1.setGeometry(QtCore.QRect(120, 180, 350, 30)) self.label1.setText("DWTT断口识别结果图像") self.label1.setObjectName("label1") self.label1.setFont(font) self.label1.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label2 = QtWidgets.QLabel(self.centralWidget) self.label2.setGeometry(QtCore.QRect(50, 230, 300, 30)) self.label2.setText("DWTT断口原始图像") self.label2.setObjectName("label2") self.label2.setFont(font) self.label2.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label3 = QtWidgets.QLabel(self.centralWidget) self.label3.setGeometry(QtCore.QRect(320, 230, 300, 30)) self.label3.setText("DWTT断口识别图像") self.label3.setObjectName("label3") self.label3.setFont(font) self.label3.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label4 = QtWidgets.QLabel(self.centralWidget) self.label4.setGeometry(QtCore.QRect(900, 30, 200, 30)) self.label4.setText("DWTT断口评定结果(分析)") self.label4.setObjectName("label4") self.label4.setFont(font) self.label4.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label5 = QtWidgets.QLabel(self.centralWidget) self.label5.setGeometry(QtCore.QRect(600, 120, 200, 30)) self.label5.setText("DWTT断口评定结果") self.label5.setObjectName("label5") self.label5.setFont(font) self.label5.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label6 = QtWidgets.QLabel(self.centralWidget) self.label6.setGeometry(QtCore.QRect(600, 400, 200, 30)) self.label6.setText("DWTT断口评定说明") self.label6.setObjectName("label6") self.label6.setFont(font) self.label6.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) #打开图像显示区域 self.label8 = QtWidgets.QLabel(self.centralWidget) #self.label8=QLabel(self) self.label8.setText("显示原始图像区域") self.label8.setGeometry(QtCore.QRect(10, 300, 240, 350)) self.label8.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:12px;font-family:宋体;}" ) self.label9 = QtWidgets.QLabel(self.centralWidget) #self.label9 = QLabel(self) self.label9.setText("显示预测图像区域") # self.label8.setFixedSize(300,200) # self.label8.move(160,160) self.label9.setGeometry(QtCore.QRect(280, 300, 240, 350)) self.label9.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:12px;font-family:宋体;}" ) #打开excel显示区域 self.tableWidget = QtWidgets.QTableWidget(self.centralWidget) self.tableWidget.setGeometry(QtCore.QRect(600, 160, 730, 240)) self.tableWidget.setObjectName("tableWidget") self.tableWidget.setColumnCount(0) self.tableWidget.setRowCount(0) self.tableWidget.setStyleSheet("selection-background-color:pink") self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) self.tableWidget.raise_() self.label11 = QtWidgets.QLabel(self.centralWidget) #self.label11 = QLabel(self) self.label11.setAlignment(Qt.AlignTop) self.label11.setText("说明:\n> 表中TS,PTS,GTTS分别表示管材断口原始图像,识别图像和标记图像净截面积的总像素值( 包含背景)\n> FS表示管材断口图像净截面中图像区域的像素值(不含背景),PFS,GTFS分别表示管材断口识别及标记图像脆性区域的像素值\n> FR表示FS和TS之间的比率。PFR表示PFS和PTS之间的比率。GTFR表示GTFS和GTTS之间的比率。\n> APFR,AGFR分别表示管材断口识别图像和标记图像脆性区域所占净截面(不含背景)的比率。\n结果说明:\n>以试样断口规格:305*76*32mm为检测标准,对钢材试样断口剪切面积百分数进行计算(SA)\n> 当SA>=70时,一般评定为安全的断裂行为,当SA<70时,评定为不安全的脆断行为。") self.label11.setGeometry(QtCore.QRect(600, 440, 730, 180)) self.label11.setStyleSheet("QLabel{background:yellow;}" "QLabel{color:rgb(300,300,300,120);font-size:13px;font-family:宋体;}") #菜单设计 #信号槽衔接 mainWindow.setCentralWidget(self.centralWidget) QtCore.QMetaObject.connectSlotsByName(mainWindow) self.pushButton1.clicked.connect(self.setText_qlabel1) self.pushButton2.clicked.connect(self.setText_qlabel2) self.pushButton3.clicked.connect(self.setText_qlabel3) self.pushButton5.clicked.connect(self.openfile) self.pushButton5.clicked.connect(self.creat_table_show) self.pushButton6.clicked.connect(self.call_back_btn) self.sig.connect(self.call_back_sig) self.pushButton7.clicked.connect(self.opendeeplabv3image) self.pushButton8.clicked.connect(self.openmaskrcnnimage) self.pushButton9.clicked.connect(self.openfile1) self.pushButton9.clicked.connect(self.creat_table_show1) #边框题目定义 def retranslateUi(self, mainWindow): _translate = QtCore.QCoreApplication.translate #mainWindow.setWindowTitle(_translate("mainWindow", "hello word")) mainWindow.setWindowTitle(_translate("mainWindow",'您好,欢迎来到钢材DWTT断口评定系统(2020)')) mainWindow.setWindowIcon(QIcon('compute.png')) #菜单设计 #槽函数定义 def setText_qlabel1(self): self.label1.setText('FCN网络进行DWTT断口图像的语义分割') def setText_qlabel2(self): self.label1.setText('DeepLabV3+网络进行DWTT断口图像的语义分割') #win32api.ShellExecute(0, 'open', 'pre.py', '', '', 0) # 调用预测图像文件执行pre #str = ('python pre.py') #p = os.system(str) #print(p) #os.system("python D:/paper/DWTTGUI/pre.py") #execfile('pre.py') #exec(D:/paper/DWTTGUI/pre.py) #execfile('hello.py') exec("import deeplabv3pre") def setText_qlabel3(self): self.label1.setText('Mask R-CNN网络进行DWTT断口图像的实例分割') exec("import test_model") def opendeeplabv3image(self): #打开图像槽函数定义 imgName, imgType = QFileDialog.getOpenFileName(self, "打开图片", "D:\paper\DWTTGUI\deeplabv3+predict_picture", "*.jpg;;*.png;;All Files(*)") jpg = QtGui.QPixmap(imgName).scaled(self.label8.width(), self.label8.height()) self.label8.setPixmap(jpg) n=re.findall(r"Example(.+?).jpg",imgName) imgName1='' imgName1+='D:/paper/DWTTGUI/deeplabv3+predict_result/Example' for i in n: index=int(i) imgName1='D:/paper/DWTTGUI/deeplabv3+predict_result/Example%d'%(index) imgName1+='.png' jpg1 = QtGui.QPixmap(imgName1).scaled(self.label9.width(), self.label9.height()) self.label9.setPixmap(jpg1) def openmaskrcnnimage(self): #打开图像槽函数定义 imgName, imgType = QFileDialog.getOpenFileName(self, "打开图片", "D:\paper\DWTTGUI\maskrcnnimages", "*.jpg;;*.png;;All Files(*)") jpg = QtGui.QPixmap(imgName).scaled(self.label8.width(), self.label8.height()) self.label8.setPixmap(jpg) n=re.findall(r"train(.+?).jpg",imgName) print(n) imgName1='' imgName1+='D:/paper/DWTTGUI/test_results(Mresnet101)' for i in n: index=int(i) if(index>=1 and index<=9): imgName1 = 'D:/paper/DWTTGUI/test_results(Mresnet101)/0%d' % (index) else: imgName1='D:/paper/DWTTGUI/test_results(Mresnet101)/%d'%(index) imgName1+='.jpg' jpg1 = QtGui.QPixmap(imgName1).scaled(self.label9.width(), self.label9.height()) self.label9.setPixmap(jpg1) def openfile(self): #fcn ###获取路径=================================================================== path= QFileDialog.getOpenFileName( self, '打开结果文件', 'E:/letcodepritice/countpix/countpix/FcnStellTestData(name).xls', 'excel(*.xlsx *.xls *.csv)') global path_openfile_name ###获取路径==================================================================== path_openfile_name = path[0] def creat_table_show(self): #fcn ###===========读取表格,转换表格,=========================================== if len(path_openfile_name) > 0: input_table = pd.read_excel(path_openfile_name) input_table_rows = input_table.shape[0] input_table_colunms = input_table.shape[1] input_table_header = input_table.columns.values.tolist() ###===========读取表格,转换表格,============================================ ###======================给tablewidget设置行列表头============================ self.tableWidget.setColumnCount(input_table_colunms) self.tableWidget.setRowCount(input_table_rows) self.tableWidget.setHorizontalHeaderLabels(input_table_header) ###======================给tablewidget设置行列表头============================ ###================遍历表格每个元素,同时添加到tablewidget中======================== for i in range(input_table_rows): input_table_rows_values = input_table.iloc[[i]] input_table_rows_values_array = np.array(input_table_rows_values) input_table_rows_values_list = input_table_rows_values_array.tolist()[0] for j in range(input_table_colunms): input_table_items_list = input_table_rows_values_list[j] ###==============将遍历的元素添加到tablewidget中并显示======================= input_table_items = str(input_table_items_list) newItem = QTableWidgetItem(input_table_items) self.tableWidget.setItem(i, j, newItem) ###================遍历表格每个元素,同时添加到tablewidget中======================== else: self.centralWidget.show() def openfile1(self): #fcn ###获取路径=================================================================== path= QFileDialog.getOpenFileName( self, '打开结果文件', 'E:/letcodepritice/countpix/countpix/deeplabStellTestData.xls', 'excel(*.xlsx *.xls *.csv)') global path_openfile_name1 ###获取路径==================================================================== path_openfile_name1 = path[0] def creat_table_show1(self): #fcn ###===========读取表格,转换表格,=========================================== if len(path_openfile_name1) > 0: input_table = pd.read_excel(path_openfile_name1) input_table_rows = input_table.shape[0] input_table_colunms = input_table.shape[1] input_table_header = input_table.columns.values.tolist() ###===========读取表格,转换表格,============================================ ###======================给tablewidget设置行列表头============================ self.tableWidget.setColumnCount(input_table_colunms) self.tableWidget.setRowCount(input_table_rows) self.tableWidget.setHorizontalHeaderLabels(input_table_header) ###======================给tablewidget设置行列表头============================ ###================遍历表格每个元素,同时添加到tablewidget中======================== for i in range(input_table_rows): input_table_rows_values = input_table.iloc[[i]] input_table_rows_values_array = np.array(input_table_rows_values) input_table_rows_values_list = input_table_rows_values_array.tolist()[0] for j in range(input_table_colunms): input_table_items_list = input_table_rows_values_list[j] ###==============将遍历的元素添加到tablewidget中并显示======================= input_table_items = str(input_table_items_list) newItem = QTableWidgetItem(input_table_items) self.tableWidget.setItem(i, j, newItem) ###================遍历表格每个元素,同时添加到tablewidget中======================== else: self.centralWidget.show() def call_back_btn(self): self.sig.emit() def call_back_sig(self): if self.tick_win: print("++++++++++++++++++++++ call_back_sig first +++++++++++++++++++++") self.tick_win.show() else: self.tick_win = SecondWindow() self.tick_win.show() #self.tick_win.move(200, 200) print("--------------------- call_back_sig second ----------------") #导入excel结果文件 #查看fcn网络结果类 class SecondWindow(QMainWindow): def __init__(self, parent=None): super(SecondWindow, self).__init__(parent) self.resize(850, 480) self.setWindowTitle('FCN网络评估结果') self.pushButton1 = QPushButton(self) self.label1 = QtWidgets.QLabel(self) self.label2 = QtWidgets.QLabel(self) self.label3 = QtWidgets.QLabel(self) self.label4 = QtWidgets.QLabel(self) self.label5 = QtWidgets.QLabel(self) self.label6 = QtWidgets.QLabel(self) self.label7 = QtWidgets.QLabel(self) # 字体设计 font = QtGui.QFont() font.setFamily('微软雅黑') font.setBold(True) font.setPointSize(10) font.setWeight(60) #self.pushButton1 = QtWidgets.QPushButton(self.centralWidget) self.pushButton1.setGeometry(QtCore.QRect(0, 0, 200, 30)) self.pushButton1.setStyleSheet("background-color:rgb(164,255,255);") self.pushButton1.setText("查看分割效果") self.pushButton1.setObjectName("calculate") self.pushButton1.setFont(font) self.pushButton1.clicked.connect(self.openimage) #self.label1 = QtWidgets.QLabel(self.centralWidget) self.label1.setGeometry(QtCore.QRect(250, 30, 350, 30)) self.label1.setText("FCN网络进行DWTT断口图像的语义分割") self.label1.setObjectName("label1") self.label1.setFont(font) self.label1.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) #self.label2 = QtWidgets.QLabel(self.centralWidget) self.label2.setGeometry(QtCore.QRect(50, 80, 300, 30)) self.label2.setText("DWTT断口原始图像") self.label2.setObjectName("label2") self.label2.setFont(font) self.label2.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) #self.label3 = QtWidgets.QLabel(self.centralWidget) self.label3.setGeometry(QtCore.QRect(320, 80, 300, 30)) self.label3.setText("DWTT断口识别图像") self.label3.setObjectName("label3") self.label3.setFont(font) self.label3.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) self.label4.setGeometry(QtCore.QRect(590, 80, 300, 30)) self.label4.setText("DWTT断口标记图像") self.label4.setObjectName("label4") self.label4.setFont(font) self.label4.setStyleSheet( "QLabel{color:rgb(300,300,300,120);font-size:14px;font-weight:bold;font-family:宋体;}" ) #self.label8 = QtWidgets.QLabel(self.centralWidget) # self.label8=QLabel(self) self.label5.setText("显示原始图像区域") self.label5.setGeometry(QtCore.QRect(20, 110, 240, 350)) self.label5.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:12px;font-family:宋体;}" ) #self.label9 = QtWidgets.QLabel(self.centralWidget) # self.label9 = QLabel(self) self.label6.setText("显示预测图像区域") # self.label8.setFixedSize(300,200) # self.label8.move(160,160) self.label6.setGeometry(QtCore.QRect(290, 110, 240, 350)) self.label6.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:12px;font-family:宋体;}" ) #self.label8 = QtWidgets.QLabel(self.centralWidget) # self.label8=QLabel(self) self.label7.setText("显示标记图像区域") self.label7.setGeometry(QtCore.QRect(560, 110, 240, 350)) self.label7.setStyleSheet("QLabel{background:white;}" "QLabel{color:rgb(300,300,300,120);font-size:12px;font-family:宋体;}" ) #槽函数定义 def openimage(self): #打开图像槽函数定义 imgName, imgType = QFileDialog.getOpenFileName(self, "打开图片", "D:/paper/DWTTGUI/fcnpredict_picture", "*.jpg;;*.png;;All Files(*)") jpg = QtGui.QPixmap(imgName).scaled(self.label5.width(), self.label5.height()) self.label5.setPixmap(jpg) n=re.findall(r"train(.+?).jpg",imgName) imgName1='' imgName1+='D:/paper/DWTTGUI/fcnpredict_gtresult/train0' imgName2 = '' imgName2 += 'D:/paper/DWTTGUI/fcnpredict_ptresult/pred_train0' for i in n: i=int(i) imgName1='D:/paper/DWTTGUI/fcnpredict_gtresult/train0%d'%(i) imgName1+='.png' imgName2 = 'D:/paper/DWTTGUI/fcnpredict_ptresult/pred_train0%d' % (i) imgName2 += '.png' print(imgName1) print(imgName2) jpg1 = QtGui.QPixmap(imgName2).scaled(self.label6.width(), self.label6.height()) self.label6.setPixmap(jpg1) jpg2 = QtGui.QPixmap(imgName1).scaled(self.label7.width(), self.label7.height()) self.label7.setPixmap(jpg2) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) mainWindow = QtWidgets.QMainWindow() ui = MainFunGui_mainWindow() ui.setupUi(mainWindow) #ui.show() mainWindow.show() #ui.show() sys.exit(app.exec_())
4.钢材DWTT断口面中不同区域(脆性,韧性)的计算和评定
#include "stdafx.h" #include"stdafx.h" #include<iostream> #include <fstream> #include <string> #include<iomanip> #include<math.h> #include<vector> #include<highgui.hpp> #include<cv.hpp> #include<imgproc.hpp> using namespace std; using namespace cv; /////////////////////全局变量的定义 double TS, FS, PTS, PFS, GTTS, GTFS; double FR, PFR, GTFR, APFR, AGFR, DER; ////////////////////全局变量的定义 //////////////////////////////////////////////////原始断口数据采集 void outputImageInformation1(const Mat& hi) { ///计算 int image_count = 1;//要计算直方图的图像的个数 int channels[1] = { 0 };//图像的通道' Mat out;//计算所得直方图 int dims = 1;//得到直方图的维数 int histsize[1] = { 256 };//直方图横坐标的子区间数 float hrange[2] = { 0, 255 };//区间的总范围 const float *ranges[1] = { hrange };//指针数组 calcHist(&hi, image_count, channels, Mat(), out, dims, histsize, ranges); ///////////////////输出直方图信息 double maxValue = 0; double minValue = 0; int a = 0; /* for (int i = 0; i < out.rows; i++) { for (int j = 0; j < out.cols; j++) { float b = out.at<float>(i, j); a += 1; cout << b << endl; } } */ int histSize = out.rows; //Mat histImage(histSize, histSize, CV_8UC3, Scalar(255, 255, 255)); //int hpt = static_cast<int>(0.9*histSize); int total = 0; //Scalar color(255, 0, 0);//BGR for (int h = 0; h < histSize; h++) { float binVal = out.at<float>(h);//读取对应灰度级的像素个数 if (h % 10 == 0) { cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; cout << endl; } else cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; } cout << endl; minMaxLoc(out, &minValue, &maxValue, 0, 0);//找到全局最小、最大的像素值数目 cout << "max pix num: " << maxValue << " " << "min pix num: " << minValue << " "; cout << "total pix num:" << total << endl; TS = total; FS = total - maxValue; FR = FS / TS; cout << "FR=" << FR << endl; } ////////////////////////////原始断口数据采集 ////////////////////////预测断口数据采集 void outputImageInformation2(const Mat& hi) { ///计算 int image_count = 1;//要计算直方图的图像的个数 int channels[1] = { 0 };//图像的通道' Mat out;//计算所得直方图 int dims = 1;//得到直方图的维数 int histsize[1] = { 256 };//直方图横坐标的子区间数 float hrange[2] = { 0, 255 };//区间的总范围 const float *ranges[1] = { hrange };//指针数组 calcHist(&hi, image_count, channels, Mat(), out, dims, histsize, ranges); ///////////////////输出直方图信息 double maxValue = 0; double minValue = 0; int a = 0; /* for (int i = 0; i < out.rows; i++) { for (int j = 0; j < out.cols; j++) { float b = out.at<float>(i, j); a += 1; cout << b << endl; } } */ int histSize = out.rows; //Mat histImage(histSize, histSize, CV_8UC3, Scalar(255, 255, 255)); //int hpt = static_cast<int>(0.9*histSize); int total = 0; //Scalar color(255, 0, 0);//BGR for (int h = 0; h < histSize; h++) { float binVal = out.at<float>(h);//读取对应灰度级的像素个数 if (h % 10 == 0) { cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; cout << endl; } else cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; } cout << endl; minMaxLoc(out, &minValue, &maxValue, 0, 0);//找到全局最小、最大的像素值数目 cout << "max pix num: " << maxValue << " " << "min pix num: " << minValue << " "; cout << "total pix num:" << total << endl; PTS = total; PFS = total - maxValue; PFR = PFS / PTS; } ///////////////////////预测断口数据采集 ////////////////////////标记断口数据采集 void outputImageInformation3(const Mat& hi) { ///计算 int image_count = 1;//要计算直方图的图像的个数 int channels[1] = { 0 };//图像的通道' Mat out;//计算所得直方图 int dims = 1;//得到直方图的维数 int histsize[1] = { 256 };//直方图横坐标的子区间数 float hrange[2] = { 0, 255 };//区间的总范围 const float *ranges[1] = { hrange };//指针数组 calcHist(&hi, image_count, channels, Mat(), out, dims, histsize, ranges); ///////////////////输出直方图信息 double maxValue = 0; double minValue = 0; int a = 0; /* for (int i = 0; i < out.rows; i++) { for (int j = 0; j < out.cols; j++) { float b = out.at<float>(i, j); a += 1; cout << b << endl; } } */ int histSize = out.rows; //Mat histImage(histSize, histSize, CV_8UC3, Scalar(255, 255, 255)); //int hpt = static_cast<int>(0.9*histSize); int total = 0; //Scalar color(255, 0, 0);//BGR for (int h = 0; h < histSize; h++) { float binVal = out.at<float>(h);//读取对应灰度级的像素个数 if (h % 10 == 0) { cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; cout << endl; } else cout << setw(4) << h << ": " << setw(4) << binVal << " "; total += binVal; } cout << endl; minMaxLoc(out, &minValue, &maxValue, 0, 0);//找到全局最小、最大的像素值数目 cout << "max pix num: " << maxValue << " " << "min pix num: " << minValue << " "; cout << "total pix num:" << total << endl; GTTS = total; GTFS = total - maxValue; GTFR = GTFS / GTTS; APFR = PFR / FR; AGFR = GTFR / FR; DER = abs(APFR - AGFR); } ////////////////////////标记断口数据采集 void getHistImage(const Mat& hist) { ////////////////////绘制直方图 Mat dstHist;//得到的直方图 int dims = 1;//得到的直方图的维数 灰度图的维数为1 float hranges[2] = { 0, 255 }; //直方图统计的灰度值范围 const float *ranges[1] = { hranges }; // 这里需要为const类型,二维数组用来指出每个区间的范围 int bin = 255;//直方图横坐标的区间数 即横坐标被分成多少份 int channels = 0;//图像得通道 灰度图的通道数为0 /* 计算图像的直方图 */ calcHist(&hist, 1/*输入图像个数*/, &channels, Mat()/*掩码*/, dstHist, dims, &bin, ranges); int height = 150; //直方图高度 int scale = 3; //垂直缩放比 int horvizon_scale = 3; //水平缩放比 //获取最大值和最小值 double minValue = 0; double maxValue = 0; minMaxLoc(dstHist, &minValue, &maxValue, 0, 0); //找到直方图中的最大值和最小值 int shift_vertical = 13; //直方图偏移值,偏移用于显示水平坐标 int shift_horvizon = 30; //直方图偏移值,偏移用于显示垂直坐标 //绘制出直方图 Mat dstImage(height*scale, bin*horvizon_scale + shift_horvizon, CV_8UC3, Scalar(255, 255, 255)); //图像背景颜色 //创建一个彩色三通道矩阵,大小a*b,填充0 int hpt = saturate_cast<int>((dstImage.rows - shift_vertical)*0.95); //最大值对应的Y坐标,防止溢出 for (int i = 0; i < bin; i++) { float binValue = dstHist.at<float>(i); int realValue = saturate_cast<int>(binValue * hpt / maxValue); rectangle(dstImage, Point(i*horvizon_scale + shift_horvizon, dstImage.rows - 1 - shift_vertical), Point((i + 1)*horvizon_scale + shift_horvizon - 1, dstImage.rows - realValue - shift_vertical), Scalar(255, 0, 0), 1, 8, 0); } //绘制垂直刻度 char string[100]; CvFont font; double font_size = 1;//字体大小 cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1, 0, 1, 8);//字体结构初始化 Size text_size; for (int i = hpt; i >= 0; ) { _itoa_s(maxValue*i / hpt, string, 10);//把一个整数转换为字符串 //在图像中显示文本字符串 text_size = getTextSize(string, CV_FONT_HERSHEY_PLAIN, font_size, 1, NULL); //获得字体大小 putText(dstImage, string, cvPoint(0, dstImage.rows - i - shift_vertical + text_size.height / 2), cv::FONT_HERSHEY_PLAIN, font_size, Scalar(0, 0, 0), 1, 8, 0); i -= hpt / 10; //只显示10个刻度 } //刻画水平刻度 for (int i = bin; i >= 0;) { _itoa_s(i, string, 10);//把一个整数转换为字符串 //在图像中显示文本字符串 text_size = getTextSize(string, CV_FONT_HERSHEY_PLAIN, font_size, 1, NULL); //获得字体大小 putText(dstImage, string, cvPoint(i*horvizon_scale + shift_horvizon - text_size.width / 2, dstImage.rows), cv::FONT_HERSHEY_PLAIN, font_size, Scalar(0, 0, 0), 1, 8, 0); i -= bin / 10; //只显示20个刻度 } //显示统计信息 sprintf_s(string, " Range from 0 to %d", (int)hranges[1]); putText(dstImage, string, cvPoint(dstImage.cols / 5, 30), cv::FONT_HERSHEY_PLAIN, (double)1.3, Scalar(0, 0, 0), 1, 8, 0); imshow("灰度直方图", dstImage); } int main(int argc, _TCHAR* argv[]) { //Mat src = imread("E:\\letcodepritice\\countpix\\picset\\prediction6.png",-1); //IplImage* image = cvLoadImage("D:/timg.jpg"); //Mat src = imread("E://graduation//traditionMethods//Kmeans2forImage//Kmeans2forImage//Debug//testset//scissor1+.jpg", -1); ///////////////////图像的原图和灰度图显示 /* int a = src.channels();//a = 3通道 imshow("原图", src); if (!src.data) { cout << "no picture!\n"; exit(1); } cvtColor(src, src, CV_BGR2GRAY, 0); a = src.channels();//a = 1通道 imshow("灰度图", src); */ ////////////////////////////////// //////////////////////////将生成的数据保存到excel文件当中,第一次使用 ofstream oFile; oFile.open("FCNStellTestData.csv", ios::out | ios::trunc); oFile << "图像" << "," << "TS" << "," << "FS" << "," << "FR" << "," << "PTS" << "," << "PFS" << "," << "PFR(%)" << "," << "GTTS" << "," << "GTFS" << "," << "GTFR(%)" << "," << "APFR(%)" << "," << "AGFR(%)" << "," << "APSA(%)" << "," << "AGSA(%)" << "," << "DER(%)" << endl; //oFile << "010101" << "," << "1 2 3" << "," << "32.2 112.3;23.12 23.22;23.14 23.45" << "," << "1" << endl; //oFile.close(); //////////////////////////////// /* int image_count = 1;//要计算直方图的图像的个数 int channels[1] = { 0 };//图像的通道' Mat out;//计算所得直方图 int dims = 1;//得到直方图的维数 int histsize[1] = { 256 };//直方图横坐标的子区间数 float hrange[2] = { 0, 255 };//区间的总范围 const float *ranges[1] = { hrange };//指针数组 calcHist(&src, image_count, channels, Mat(), out, dims, histsize, ranges); */ for (int i = 0; i < 40; i++) //for (int i = 0; i < 16; i++) { ////////////////1.保存原始试样断口图像信息 //vector<string> name1 = {"qj1.jpg","qj2.jpg","qj3.jpg","qj4.jpg","qj5.jpg","qj6.jpg"}; //vector<string> name1 = {"qj1.jpg","qj2.jpg","qj3.jpg","qj4.jpg","qj5.jpg","qj6.jpg","qj7.jpg","qj8.jpg","qj9.jpg","qj10.jpg","qj11.jpg","qj12.jpg","qj13.jpg","qj14.jpg","qj15.jpg","qj16.jpg"}; //vector<string> name1 = { "qjExample1.jpg","qjExample2.jpg", "qjExample3.jpg", "qjExample4.jpg", "qjExample5.jpg", "qjExample6.jpg", "qjExample7.jpg", "qjExample8.jpg", "qjExample9.jpg", "qjExample10.jpg", "qjExample11.jpg", "qjExample12.jpg", "qjExample13.jpg", "qjExample14.jpg", "qjExample15.jpg", "qjExample16.jpg" }; vector<string> name = { "train01002","train01010", "train01013", "train01015", "train01016", "train01017", "train01018", "train01019", "train01020", "train01023", "train01027", "train01032", "train01033", "train01034", "train01036", "train01038", "train01043", "train01053", "train01060", "train01061", "train01062", "train01070", "train01071", "train01074", "train01083", "train01084", "train01097", "train01099", "train01101", "train01102", "train01103", "train01104", "train01106", "train01108", "train01109", "train01115", "train01121", "train01124", "train01129", "train01134" }; vector<string> name1 = {"qjtrain01002.jpg","qjtrain01010.jpg", "qjtrain01013.jpg", "qjtrain01015.jpg", "qjtrain01016.jpg", "qjtrain01017.jpg", "qjtrain01018.jpg", "qjtrain01019.jpg", "qjtrain01020.jpg", "qjtrain01023.jpg", "qjtrain01027.jpg", "qjtrain01032.jpg", "qjtrain01033.jpg", "qjtrain01034.jpg", "qjtrain01036.jpg", "qjtrain01038.jpg", "qjtrain01043.jpg", "qjtrain01053.jpg", "qjtrain01060.jpg", "qjtrain01061.jpg", "qjtrain01062.jpg", "qjtrain01070.jpg", "qjtrain01071.jpg", "qjtrain01074.jpg", "qjtrain01083.jpg", "qjtrain01084.jpg", "qjtrain01097.jpg", "qjtrain01099.jpg", "qjtrain01101.jpg", "qjtrain01102.jpg", "qjtrain01103.jpg", "qjtrain01104.jpg", "qjtrain01106.jpg", "qjtrain01108.jpg", "qjtrain01109.jpg", "qjtrain01115.jpg", "qjtrain01121.jpg", "qjtrain01124.jpg", "qjtrain01129.jpg", "qjtrain01134.jpg"}; //Mat src = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\picture\\qj16.jpg", -1); //Mat src = imread("E:\\FCN\\FCN.tensorflow-master\\FCN.tensorflow-master\\logs\\imageoutput\\fcn实验计算\\"+name1[i], -1); //Mat src = imread("D:\\paper\\DWTTGUI\\deeplabv3+predict_picture\\" + name1[i], -1); Mat src = imread("D:\\paper\\DWTTGUI\\fcnpredict_picture\\" + name1[i], -1); //Mat src = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\picture\\" + name1[i], -1); ///////////////////图像的原图和灰度图显示 int a = src.channels();//a = 3通道 imshow("原图", src); if (!src.data) { cout << "no picture!\n"; exit(1); } cvtColor(src, src, CV_BGR2GRAY, 0); a = src.channels();//a = 1通道 imshow("灰度图", src); ////////////////////////////////// outputImageInformation1(src); //输出原始图像信息 //ofstream oFile; //oFile.open("StellTestData.csv", ios::out | ios::trunc); //oFile << "Group" << i + 1 << "," << TS << "," << FS << "," << FR * 100; oFile << name[i] << "," << TS << "," << FS << "," << FR * 100; //oFile << "010101" << "," << "1 2 3" << "," << "32.2 112.3;23.12 23.22;23.14 23.45" << "," << "1" << endl; //oFile.close(); //////////////////////////////////////////////////////// ////////////////2.保存预测试样断口图像信息 //vector<string> name2 = { "p1.png","p2.png","p3.png","p4.png","p5.png","p6.png" }; //vector<string> name2 = { "Example1.png","Example2.png", "Example3.png", "Example4.png", "Example5.png", "Example6.png", "Example7.png", "Example8.png", "Example9.png", "Example10.png", "Example11.png", "Example12.png", "Example13.png", "Example14.png", "Example15.png", "Example16.png" }; vector<string> name2 = { "pred_train01002.png","pred_train01010.png", "pred_train01013.png", "pred_train01015.png", "pred_train01016.png", "pred_train01017.png", "pred_train01018.png", "pred_train01019.png", "pred_train01020.png", "pred_train01023.png", "pred_train01027.png", "pred_train01032.png", "pred_train01033.png", "pred_train01034.png", "pred_train01036.png", "pred_train01038.png", "pred_train01043.png", "pred_train01053.png", "pred_train01060.png", "pred_train01061.png", "pred_train01062.png", "pred_train01070.png", "pred_train01071.png", "pred_train01074.png", "pred_train01083.png", "pred_train01084.png", "pred_train01097.png", "pred_train01099.png", "pred_train01101.png", "pred_train01102.png", "pred_train01103.png", "pred_train01104.png", "pred_train01106.png", "pred_train01108.png", "pred_train01109.png", "pred_train01115.png", "pred_train01121.png", "pred_train01124.png", "pred_train01129.png", "pred_train01134.png" }; //vector<string> name2 = {"prediction1.png","prediction2.png","prediction3.png","prediction4.png","prediction5.png","prediction6.png","prediction7.png","prediction8.png","prediction9.png","prediction10.png","prediction11.png","prediction12.png","prediction13.png","prediction14.png","prediction15.png","prediction16.png"}; //Mat psrc = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\prediction\\prediction16.png", -1); //Mat psrc = imread("D:\\paper\\DWTTGUI\\deeplabv3+predict_result\\" + name2[i], -1); Mat psrc = imread("D:\\paper\\DWTTGUI\\fcnpredict_ptresult\\" + name2[i], -1); //Mat psrc = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\prediction\\" + name2[i], -1); ///////////////////图像的原图和灰度图显示 int p = psrc.channels();//a = 3通道 imshow("原图", psrc); if (!psrc.data) { cout << "no picture!\n"; exit(1); } cvtColor(psrc, psrc, CV_BGR2GRAY, 0); p = psrc.channels();//a = 1通道 imshow("灰度图", psrc); ////////////////////////////////// outputImageInformation2(psrc); //输出原始图像信息 //ofstream oFile; //oFile.open("StellTestData.csv", ios::out | ios::trunc); oFile << "," << PTS << "," << PFS << "," << PFR * 100; //oFile << "010101" << "," << "1 2 3" << "," << "32.2 112.3;23.12 23.22;23.14 23.45" << "," << "1" << endl; //oFile.close(); //////////////////////////////////////////////////////// ////////////////3.保存标记试样断口图像信息 //vector<string> name3 = { "g1.png","g2.png","g3.png","g4.png","g5.png","g6.png" }; vector<string> name3 = { "train01002.png","train01010.png", "train01013.png", "train01015.png", "train01016.png", "train01017.png", "train01018.png", "train01019.png", "train01020.png", "train01023.png", "train01027.png", "train01032.png", "train01033.png", "train01034.png", "train01036.png", "train01038.png", "train01043.png", "train01053.png", "train01060.png", "train01061.png", "train01062.png", "train01070.png", "train01071.png", "train01074.png", "train01083.png", "train01084.png", "train01097.png", "train01099.png", "train01101.png", "train01102.png", "train01103.png", "train01104.png", "train01106.png", "train01108.png", "train01109.png", "train01115.png", "train01121.png", "train01124.png", "train01129.png", "train01134.png" }; //vector<string> name3 = {"gt1.png","gt2.png","gt3.png","gt4.png","gt5.png","gt6.png","gt7.png","gt8.png","gt9.png","gt10.png","gt11.png","gt12.png","gt13.png","gt14.png","gt15.png","gt16.png"}; //Mat gsrc = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\labels\\gt16.png", -1); //Mat gsrc = imread("E:\\FCN\\FCN.tensorflow-master\\FCN.tensorflow-master\\logs\\imageoutput\\fcn实验计算\\" + name3[i], -1); Mat gsrc = imread("D:\\paper\\DWTTGUI\\fcnpredict_gtresult\\" + name3[i], -1); //Mat gsrc = imread("C:\\Users\\thinkpad\\Desktop\\石油管材与仪器投稿\\第二次实验\\labels\\" + name3[i], -1); ///////////////////图像的原图和灰度图显示 int g = gsrc.channels();//a = 3通道 imshow("原图", gsrc); if (!gsrc.data) { cout << "no picture!\n"; exit(1); } cvtColor(gsrc, gsrc, CV_BGR2GRAY, 0); g = gsrc.channels();//a = 1通道 imshow("灰度图", gsrc); ////////////////////////////////// outputImageInformation3(gsrc); //输出原始图像信息 //ofstream oFile; //oFile.open("StellTestData.csv", ios::out | ios::trunc); oFile << "," << GTTS << "," << GTFS << "," << GTFR * 100 << "," << APFR * 100 << "," << AGFR * 100 << "," << 100 - APFR * 100 << "," << 100 - AGFR * 100 << "," << DER * 100 << endl; //oFile << "010101" << "," << "1 2 3" << "," << "32.2 112.3;23.12 23.22;23.14 23.45" << "," << "1" << endl; //oFile.close(); //////////////////////////////////////////////////////// } //getHistImage(src); //绘制直方图 waitKey(); return 0; }
5.评定结果图像及其数据文件
(1)FCN网络预测
(2)DeepLab网络预测结果图
(3)Mask-Rcnn网络预测结果图像
预测的结果数据
图像 TS FS FR PTS PFS PFR(%) GTTS GTFS GTFR(%) APFR(%) AGFR(%) APSA(%) AGSA(%) DER(%) train01002 140264 104819 74.7298 132647 17784 13.407 131072 14746 11.2503 17.9407 15.0546 82.0593 84.9454 2.88601 train01010 138792 89173 64.2494 132238 22493 17.0095 131072 17742 13.5361 26.4742 21.068 73.5258 78.932 5.40614 train01013 139338 93449 67.0664 132148 11949 9.04213 131072 14434 11.0123 13.4824 16.4199 86.5176 83.5801 2.93759 train01015 138248 83447 60.3604 132062 8850 6.7014 131072 10050 7.66754 11.1023 12.7029 88.8977 87.2971 1.60063 train01016 139086 90965 65.402 132916 21026 15.819 131072 6214 4.74091 24.1874 7.24887 75.8126 92.7511 16.9385 train01017 139374 95156 68.2739 132168 11696 8.84934 131072 4534 3.45917 12.9615 5.06661 87.0385 94.9334 7.89493 train01018 138454 83351 60.2012 132224 19382 14.6585 131072 21470 16.3803 24.3491 27.2093 75.6509 72.7907 2.86016 train01019 138083 81276 58.8603 132319 17545 13.2596 131072 19715 15.0414 22.5273 25.5543 77.4727 74.4457 3.02705 train01020 138891 89939 64.7551 131965 11089 8.40299 131072 12313 9.39407 12.9766 14.5071 87.0234 85.4929 1.53052 train01023 138709 86324 62.2339 132528 18415 13.8952 131072 4794 3.65753 22.3273 5.87707 77.6727 94.1229 16.4503 train01027 139330 96573 69.3124 132794 45755 34.4556 131072 54491 41.5733 49.7106 59.9796 50.2894 40.0204 10.269 train01032 139877 100207 71.6394 132283 18197 13.7561 131072 17577 13.4102 19.2019 18.719 80.7981 81.281 0.482873 train01033 139737 97185 69.5485 132677 57977 43.6979 131072 56889 43.4029 62.8308 62.4066 37.1692 37.5934 0.42415 train01034 138242 83666 60.5214 132197 15239 11.5275 131072 5519 4.21066 19.047 6.95731 80.953 93.0427 12.0897 train01036 139770 98485 70.4622 132289 16714 12.6345 131072 14930 11.3907 17.9308 16.1657 82.0692 83.8343 1.76516 train01038 139247 94923 68.1688 132239 14291 10.8069 131072 12222 9.32465 15.8532 13.6788 84.1468 86.3212 2.17446 train01043 139728 99218 71.008 132420 17933 13.5425 131072 14172 10.8124 19.0718 15.227 80.9282 84.773 3.84483 train01053 140013 103332 73.8017 133004 34621 26.03 131072 41541 31.6933 35.2702 42.9438 64.7298 57.0562 7.67357 train01060 138772 88659 63.8882 132014 12098 9.16418 131072 9435 7.19833 14.3441 11.2671 85.6559 88.7329 3.07701 train01061 139106 92083 66.1963 132272 19203 14.5178 131072 13105 9.99832 21.9315 15.1041 78.0685 84.8959 6.82741 train01062 140099 101325 72.3239 132232 22618 17.1048 131072 20092 15.329 23.6503 21.1949 76.3497 78.8051 2.45535 train01070 139587 97138 69.5896 132789 18627 14.0275 131072 10261 7.82852 20.1575 11.2496 79.8425 88.7504 8.90794 train01071 141359 116925 82.7149 132495 22984 17.3471 131072 15183 11.5837 20.9721 14.0044 79.0279 85.9956 6.96774 train01074 141054 116466 82.5684 132341 19044 14.3901 131072 13817 10.5415 17.4281 12.767 82.5719 87.233 4.66106 train01083 139867 99642 71.2405 132459 33035 24.9398 131072 32380 24.704 35.0079 34.6769 64.9921 65.3231 0.33101 train01084 139521 95661 68.5639 132729 50525 38.0663 131072 34272 26.1475 55.5195 38.1359 44.4805 61.8641 17.3835 train01097 140291 103871 74.0397 132481 27721 20.9245 131072 24427 18.6363 28.2612 25.1707 71.7388 74.8293 3.09049 train01099 139687 97989 70.149 132208 19133 14.4719 131072 31722 24.202 20.6302 34.5008 79.3698 65.4992 13.8706 train01101 139522 96445 69.1253 132149 10803 8.17486 131072 12774 9.74579 11.8262 14.0987 88.1738 85.9013 2.27258 train01102 140267 105154 74.967 132106 14520 10.9912 131072 9754 7.44171 14.6613 9.92665 85.3387 90.0734 4.7347 train01103 139938 99737 71.2723 132173 13802 10.4424 131072 9866 7.52716 14.6514 10.5611 85.3486 89.4389 4.09025 train01104 140148 104206 74.3543 132225 14898 11.2672 131072 12851 9.80453 15.1533 13.1862 84.8467 86.8138 1.9671 train01106 140883 109740 77.8944 132749 56460 42.5314 131072 54984 41.9495 54.6013 53.8543 45.3987 46.1457 0.747077 train01108 140972 110981 78.7256 132416 23250 17.5583 131072 21944 16.7419 22.3032 21.2662 77.6968 78.7338 1.03697 train01109 140150 101764 72.6108 132285 25082 18.9606 131072 26813 20.4567 26.1126 28.1731 73.8874 71.8269 2.06046 train01115 139572 96532 69.1629 132437 22056 16.654 131072 25288 19.2932 24.0793 27.8953 75.9207 72.1047 3.816 train01121 139260 93454 67.1076 132594 19656 14.8242 131072 14880 11.3525 22.0902 16.9169 77.9098 83.0831 5.17328 train01124 140160 102341 73.0173 132381 18920 14.2921 131072 14724 11.2335 19.5736 15.3847 80.4264 84.6153 4.18882 train01129 141571 120141 84.8627 132392 22470 16.9723 131072 14094 10.7529 19.9997 12.6709 80.0003 87.3291 7.32884 train01134 139162 93734 67.356 132013 15225 11.533 131072 12480 9.52148 17.1224 14.1361 82.8776 85.8639 2.98633
源代码及其模型下载:
【1】https://download.csdn.net/download/hopegrace/12500343
【2】https://download.csdn.net/download/hopegrace/12500292