Ejemplo n.º 1
0
class MainWidget(QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)

        self.isCurrExProper = False
        self.pixelMap = np.array([-1.0 for i in range(ENTRANCES)])
        self.currentAdalineIndex = 0

        self.xmlParser = XMLParser()
        self.examples = self.xmlParser.getAllExamples()

        self.adalines = [
            Adaline(myDigit=i, examples=self.examples, weightsCount=ENTRANCES)
            for i in range(PERCEPTRONS)
        ]
        #for perc in self.adalines:
        #    perc.setWeights(self.xmlParser.getWeights(perc.getMyDigit()))

        self.setupUI()

    def setupUI(self):
        self.setMinimumSize(MAX_WINDOW * 3, MAX_WINDOW + 400)

        # pixel matrix
        wid1 = QWidget(self)
        wid1.setGeometry(10, 10, MAX_WINDOW, MAX_WINDOW)
        wid1.setStyleSheet("QWidget {background-color: black }")
        wid1.show()
        wid1.setAutoFillBackground(True)

        pixels = [Field(i) for i in range(ENTRANCES)]
        for pixel in pixels:
            pixel.changed.connect(self.pixelChanged)
        pixelsLay = QGridLayout()
        for i in range(HEIGHT):
            for j in range(WIDTH):
                pixelsLay.addWidget(pixels[i * WIDTH + j], i, j)
        wid1.setLayout(pixelsLay)

        # add example

        addExLabel = QLabel("<b><FONT SIZE = 4>Dodaj przyklad dla cyfry: </b>",
                            self)
        addExLabel.setGeometry(MAX_WINDOW + 50, 10, 250, 30)

        self.addExText = QTextEdit(self)
        self.addExText.setGeometry(MAX_WINDOW + 300, 10, 50, 30)

        self.isProperButton = QPushButton("NIEPOPRAWNY", self)
        self.isProperButton.setGeometry(MAX_WINDOW + 370, 10, 120, 30)
        self.isProperButton.clicked.connect(self.changeCurrExProper)

        self.addExButton = QPushButton("DODAJ", self)
        self.addExButton.setGeometry(MAX_WINDOW + 500, 10, 70, 30)
        self.addExButton.clicked.connect(self.addExample)

        # show test result
        testLabel = QLabel("<b><FONT SIZE = 4>Rezultat klasyfikacji: </b>",
                           self)
        testLabel.setGeometry(MAX_WINDOW + 50, 100, 250, 30)

        self.resultLabel = QLabel("<b><h1>3</h1></b>", self)
        self.resultLabel.setGeometry(MAX_WINDOW + 50, 150, 400, 100)
        # learn
        self.learnLabel = QLabel(
            "<b><FONT SIZE = 4>Status uczenia: nie rozpoczeto</b>", self)
        self.learnLabel.setGeometry(MAX_WINDOW + 50, MAX_WINDOW - 50, 400, 30)

        self.learnButton = QPushButton("UCZ", self)
        self.learnButton.setGeometry(MAX_WINDOW + 400, MAX_WINDOW - 50, 100,
                                     30)
        self.learnButton.clicked.connect(self.learnAdalines)

        self.errorWid = ErrorField(self)
        self.errorWid.setGeometry(10, MAX_WINDOW, MAX_WINDOW * 3, 400)

        self.nextChartButton = QPushButton("CHART >>", self)
        self.nextChartButton.setGeometry(MAX_WINDOW + 500, MAX_WINDOW - 200,
                                         70, 30)
        self.nextChartButton.clicked.connect(self.nextChart)

    def nextChart(self):
        self.currentAdalineIndex = (self.currentAdalineIndex + 1) % len(
            self.adalines)
        self.errorWid.setErrorPoints(self.adalines[self.currentAdalineIndex])

    def changeCurrExProper(self):
        if self.isCurrExProper:
            self.isCurrExProper = False
            self.isProperButton.setText("NIEPOPRAWNY")
        else:
            self.isCurrExProper = True
            self.isProperButton.setText("POPRAWNY")

    def testPixels(self):
        result = [
            perc.isThatYourNumber(self.pixelMap) for perc in self.adalines
        ]
        print(result)
        result = list(filter(lambda x: x >= 0, result))

        result = map(str, result)
        if result:
            testText = '<b>' + ' or '.join(result) + '</b>'
        else:
            testText = '<b>no classification</b>'
        self.resultLabel.setText(testText)
        self.resultLabel.setStyleSheet("font: %spt;" %
                                       str(48 / (1 + len(list(result)))))
        self.resultLabel.show()

    @pyqtSlot(int, float)
    def pixelChanged(self, pos, val):
        self.pixelMap[pos] = val
        self.testPixels()
        #print ("Pixel: %s value: %s" % (str(pos), str(val)))
        #print (self.pixelMap)

    def addExample(self):
        number = int(self.addExText.toPlainText())
        self.xmlParser.addExample(number, self.pixelMap, self.isCurrExProper)

    def learnAdalines(self):
        self.learnLabel.setText(
            "<b><FONT SIZE = 4>Status uczenia: w toku...</b>")
        self.learnLabel.show()
        percPool = AdalinePool(self.adalines, self.examples)
        beforeTime = time.process_time()
        self.adalines = percPool.learnPerc()
        learnTime = elapsed_time = time.process_time() - beforeTime
        for perc in self.adalines:
            self.xmlParser.setWeights(perc.getMyDigit(), perc.getWeights())
        self.xmlParser.saveXml()
        #self.adalines[0].start()
        #self.adalines[0].join()
        self.learnLabel.setText(
            "<b><FONT SIZE = 4>Status uczenia: zakonczono (%s)</b>" %
            str(learnTime))
Ejemplo n.º 2
0
class MainWidget(QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)

        self.xmlParser = XMLParser()
        self.examples = self.xmlParser.getAllExamples()
        self.currentExampleIndex = 0
        self.currentExample = self.examples[self.currentExampleIndex]
        self.hopfield = HopfieldNet(WIDTH, HEIGHT)
        self.hopfield.setWeights(self.xmlParser.getWeights())

        self.setupUI()

    def setupUI(self):
        self.setMinimumSize(MAX_WINDOW * 2 + 200, MAX_WINDOW + 20)

        # user pixel matrix
        self.wid1 = UserPaint(self)
        self.wid1.setGeometry(10, 10, MAX_WINDOW, MAX_WINDOW)
        self.wid1.show()
        self.wid1.setAutoFillBackground(True)

        # net pixel matrix

        self.wid2 = NetPaint(self)
        self.wid2.setGeometry(MAX_WINDOW + 100, 10, MAX_WINDOW, MAX_WINDOW)
        self.wid2.show()
        self.wid2.setAutoFillBackground(True)
        # add example

        self.nextExample = QPushButton(">>", self)
        self.nextExample.setGeometry(MAX_WINDOW + 20, 210, 60, 30)
        self.nextExample.clicked.connect(self.next)

        self.prevExample = QPushButton("<<", self)
        self.prevExample.setGeometry(MAX_WINDOW + 20, 240, 60, 30)
        self.prevExample.clicked.connect(self.prev)

        self.check = QPushButton("CHECK", self)
        self.check.setGeometry(MAX_WINDOW + 20, 270, 60, 30)
        self.check.clicked.connect(self.test)

        self.saveExample = QPushButton("SAVE", self)
        self.saveExample.setGeometry(MAX_WINDOW + 20, 330, 60, 30)
        self.saveExample.clicked.connect(self.save)

        self.clearExample = QPushButton("CLEAR", self)
        self.clearExample.setGeometry(MAX_WINDOW + 20, 500, 60, 30)
        self.clearExample.clicked.connect(self.clear)

        # show test result
        #testLabel = QLabel("<b><FONT SIZE = 4>Rezultat klasyfikacji: </b>", self)
        #testLabel.setGeometry(MAX_WINDOW + 50, 100,250 , 30)

    def next(self):
        self.currentExampleIndex = (self.currentExampleIndex + 1) % len(
            self.examples)
        self.currentExample = self.examples[self.currentExampleIndex]
        self.wid1.setPixelMap(self.currentExample)

    def prev(self):
        self.currentExampleIndex = (self.currentExampleIndex + 1) % len(
            self.examples)
        self.currentExample = self.examples[self.currentExampleIndex]
        self.wid1.setPixelMap(self.currentExample)

    def test(self):
        pixelMap = self.wid1.getPixelMap()
        resultMap = self.hopfield.associate(pixelMap)
        self.wid2.setPixelMap(resultMap)

    def save(self):
        self.xmlParser.addExample(self.wid1.getPixelMap())

    def clear(self):
        self.wid1.clear()
Ejemplo n.º 3
0
class MainWidget(QWidget):
    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        
        self.xmlParser = XMLParser()
        self.examples = self.xmlParser.getAllExamples()
        self.currentExampleIndex = 0
        self.currentExample = self.examples[self.currentExampleIndex]
        self.percInfo = self.xmlParser.getAllPerceptrons()
        self.perceptrons = []
        for i in range(HEIGHT):
            row = []
            for j in range(WIDTH):
                perc = Perceptron(i,j, self.examples, ENTRANCES)
                perc.setWeights(newWeights = self.percInfo[i][j][1], newTheta = self.percInfo[i][j][0])
                row.append(perc)
            self.perceptrons.append(row)
        
        self.setupUI()
        
        
    def setupUI(self):                
        self.setMinimumSize(MAX_WINDOW * 2 + 200, MAX_WINDOW + 20)
        
        # user pixel matrix
        self.wid1 = UserPaint(self)
        self.wid1.setGeometry(10, 10, MAX_WINDOW, MAX_WINDOW)
        self.wid1.show()
        self.wid1.setAutoFillBackground(True)
        
        # net pixel matrix
        
        self.wid2 = NetPaint(self)
        self.wid2.setGeometry(MAX_WINDOW + 100, 10, MAX_WINDOW, MAX_WINDOW)
        self.wid2.show()
        self.wid2.setAutoFillBackground(True)
        # add example
        
        self.nextExample = QPushButton(">>", self)
        self.nextExample.setGeometry(MAX_WINDOW + 20, 210, 60, 30)
        self.nextExample.clicked.connect(self.next)
        
        self.prevExample = QPushButton("<<", self)
        self.prevExample.setGeometry(MAX_WINDOW + 20, 240, 60, 30)
        self.prevExample.clicked.connect(self.prev)

        self.check = QPushButton("CHECK", self)
        self.check.setGeometry(MAX_WINDOW + 20, 270, 60, 30)
        self.check.clicked.connect(self.test)

        self.recurse = QPushButton("RECUR", self)
        self.recurse.setGeometry(MAX_WINDOW + 20, 300, 60, 30)
        self.recurse.clicked.connect(self.recursive)
        
        self.saveExample = QPushButton("SAVE", self)
        self.saveExample.setGeometry(MAX_WINDOW + 20, 330, 60, 30)
        self.saveExample.clicked.connect(self.save)
        
        self.clearExample = QPushButton("CLEAR", self)
        self.clearExample.setGeometry(MAX_WINDOW + 20, 500, 60, 30)
        self.clearExample.clicked.connect(self.clear)
                
        # show test result
        #testLabel = QLabel("<b><FONT SIZE = 4>Rezultat klasyfikacji: </b>", self)
        #testLabel.setGeometry(MAX_WINDOW + 50, 100,250 , 30)
        

    def next(self):
        self.currentExampleIndex = (self.currentExampleIndex + 1) % len(self.examples)
        self.currentExample = self.examples[self.currentExampleIndex]
        self.wid1.setPixelMap(self.currentExample)
        
    def prev(self):
        self.currentExampleIndex = (self.currentExampleIndex + 1) % len(self.examples)
        self.currentExample = self.examples[self.currentExampleIndex]
        self.wid1.setPixelMap(self.currentExample)
            
    def test(self):
        pixelMap = self.wid1.getPixelMap()
        resultMap = []
        for i in range(len(self.perceptrons)):
            row = []
            for j in range(len(self.perceptrons[0])):
                row.append(self.perceptrons[i][j].classify(pixelMap))
            resultMap.append(np.array(row))
        self.wid2.setPixelMap(resultMap)
       
    def save(self): 
        self.xmlParser.addExample( self.wid1.getPixelMap())
        
    def recursive(self):
        self.wid1.setPixelMap(self.wid2.getPixelMap())
        self.test()
        
    def clear(self):
        self.wid1.clear()