window.py 2.84 KB
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QAction, QApplication, QWidget,QGridLayout)
#from board import Board
#from clearButton import ClearButton
#from trainWidget import TrainWidget
#from testWidget import TestWidget
from ubuwidgets import (Button, ComboWidget, Board)

# Import datasets, classifiers and performance metrics
from sklearn import svm
from sklearn.externals import joblib

class MainWindow(QWidget):
    def __init__(self,parent=None):
        super(MainWindow, self).__init__(parent)
        self.scribbleArea = Board()
        self.clearButton = Button(self, "Clear Image", self.on_clear)
        self.trainButton = Button(self, "Train", self.on_train)
        self.saveCombo = ComboWidget(self, "Label: ", "Save", self.on_save)
        self.testCombo = ComboWidget(self, "Result: ", "Test", self.on_test, True)
        
        grid = QGridLayout()
        grid.addWidget(self.scribbleArea,1,0)
        grid.addWidget(self.clearButton,2,0)
        grid.addWidget(self.trainButton,3,0)
        grid.addWidget(self.saveCombo,4,0)
        grid.addWidget(self.testCombo,5,0)
        self.setLayout(grid)
        self.setWindowTitle("number ubu")
        self.resize(512, 700)

    def on_clear(self):
        self.scribbleArea.clearImage()
        

    def on_train(self):
        #เตรียมข้อมูล
        digit_data, digit_label = self.scribbleArea.data_prep_train()
        
        print('training..')  
        
        # สร้าง classifier: a support vector classifier 
        classifier = svm.SVC(gamma=0.001)
        
        # สอนให้คอมพิวเตอร์จดจำ
        classifier.fit(digit_data, digit_label)
        
        #เซฟ model
        joblib.dump(classifier, 'svmModel.pkl')
        
        #วัดประสิทธิภาพของโมเดล
        self.scribbleArea.evaluation(digit_data, digit_label, classifier)
 
        
    def on_test(self):
        print("testing...")
        #โหลดโมเดล
        clf = joblib.load('svmModel.pkl')
        
        #เตรียมข้อมูลสำหรับทดสอบ
        test_data = self.scribbleArea.data_prep_test()
        
        #ทำการทำนาย
        predicted = clf.predict(test_data)
        
        #แสดงผลการทำนาย
        result = "ผลการทำนาย คือ "+predicted[0]
        self.testCombo.set_text(result)
        print("ผลการทำนาย คือ", predicted)         
               
    def on_save(self):
        print('on_save')
        self.scribbleArea.saveImage(self.saveCombo.text())
        self.scribbleArea.clearImage()
        

        
if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())