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))
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()
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()