def testAllNetworks(): fileHandle = open(RESULT_FILE, 'w', 0) appendHtmlHeader(fileHandle) path = 'signs/' images = [path+f for f in listdir(path)] print images netHebb = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) netPseudoInv = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) netDelta = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) for image in images: print "Learning image " + image imageName = image imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127) image = imgProc.getImageForHopfield().copy() cv2.imshow('test',imgProc.getImage()) ImageSaver(imageName.replace('signs','results'), imgProc.getImage(),SIDE_OF_ARRAY) netHebb.trainHebb(image) netDelta.trainDelta(image) netPseudoInv.appendTrainingVectorForPseudoInversion(image) netPseudoInv.trainPseudoInversion() print "Learning done" #noise processing for image in images: tmpImage = image for noiseFactor in [0.05, 0.10, 0.15]: image = tmpImage fileHandle.write('<tr>\n') start = time.time() print "Noise factor: " + str(int(noiseFactor*100)) + "%" print "Processing image " + image imageName = image fileHandle.write('<td>\n') fileHandle.write(imageName.replace('signs/','').replace('.png','') +' '+ '<img src=' + imageName.replace('signs','results') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('Szum: ' + str(int(noiseFactor*100)) +'%') fileHandle.write('\n') fileHandle.write('</td>\n') imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127) image = imgProc.getImageForHopfield().copy() image = ImageNoise(image, noiseFactor).get() ImageSaver(imageName.replace('signs/','results/rec_noise_' + str(int(noiseFactor*100)) + '_'), image,SIDE_OF_ARRAY) fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/rec_noise_' + str(int(noiseFactor*100)) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') netPseudoInv.initNeurons(image) netDelta.initNeurons(image) netHebb.initNeurons(image) netHebb.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/hebb_noise_' + str(int(noiseFactor*100)) + '_'), netHebb.getNeuronsMatrix(),SIDE_OF_ARRAY) netDelta.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/delta_noise_' + str(int(noiseFactor*100)) + '_'), netDelta.getNeuronsMatrix(),SIDE_OF_ARRAY) netPseudoInv.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/pinv_noise_' + str(int(noiseFactor*100)) + '_'), netPseudoInv.getNeuronsMatrix(),SIDE_OF_ARRAY) end = time.time() fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/hebb_noise_' + str(int(noiseFactor*100)) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/delta_noise_' + str(int(noiseFactor*100)) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/pinv_noise_' + str(int(noiseFactor*100)) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') print "Time elapsed " + str(int(end-start)) + " [s]" fileHandle.write('</tr>\n') #lines processing for image in images: tmpImage = image for linesEvery in [16,8]: image = tmpImage fileHandle.write('<tr>\n') start = time.time() print "Lines every: " + str(int(linesEvery)) print "Processing image " + image imageName = image fileHandle.write('<td>\n') fileHandle.write(imageName.replace('signs/','').replace('.png','') +' '+ '<img src=' + imageName.replace('signs','results') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('Linie co: ' + str(int(linesEvery))) fileHandle.write('\n') fileHandle.write('</td>\n') imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127) image = imgProc.getImageForHopfield().copy() image = ImageLines(image, linesEvery).get() ImageSaver(imageName.replace('signs/','results/rec_lines_' + str(linesEvery) + '_'), image,SIDE_OF_ARRAY) fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/rec_lines_' + str(linesEvery) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') netPseudoInv.initNeurons(image) netDelta.initNeurons(image) netHebb.initNeurons(image) netHebb.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/hebb_lines_' + str(linesEvery) + '_'), netHebb.getNeuronsMatrix(),SIDE_OF_ARRAY) netDelta.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/delta_lines_' + str(linesEvery) + '_'), netDelta.getNeuronsMatrix(),SIDE_OF_ARRAY) netPseudoInv.updateUntilSatisfied() ImageSaver(imageName.replace('signs/','results/pinv_lines_' + str(linesEvery) + '_'), netPseudoInv.getNeuronsMatrix(),SIDE_OF_ARRAY) end = time.time() fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/hebb_lines_' + str(linesEvery) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/delta_lines_' + str(linesEvery) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') fileHandle.write('<td>\n') fileHandle.write('<img src=' + imageName.replace('signs/','results/pinv_lines_' + str(linesEvery) + '_') + '>') fileHandle.write('\n') fileHandle.write('</td>\n') print "Time elapsed " + str(int(end-start)) + " [s]" fileHandle.write('</tr>\n') appendHtmlFooter(fileHandle) fileHandle.close()
def main(self): SIDE_OF_ARRAY = 32 F = npyscreen.Form(name = "Road signs recognition via Hopfield Network",) F.add(npyscreen.TitleFixedText, name = "Using dimensions: " + str(SIDE_OF_ARRAY) + "x" + str(SIDE_OF_ARRAY),) netHebb = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) netPseudoInv = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) netDelta = HopfieldNetwork(SIDE_OF_ARRAY*SIDE_OF_ARRAY) F.add(npyscreen.TitleFixedText, name = "Network instances initialized",) F.display() signsList, imgToRecogn = self.loadParameters(sys.argv) F.add(npyscreen.TitleFixedText, name = "Image to recognize: " + imgToRecogn,) images = list() for image in signsList: imageName = image imgProc = ImgPreprocessor(image,SIDE_OF_ARRAY,127) image = imgProc.getImageForHopfield().copy() #print image F.add(npyscreen.TitleFixedText, name = "Image to learn: " + imageName,) F.display() images.append(image) netHebb.trainHebb(image) netDelta.trainDelta(image) netPseudoInv.appendTrainingVectorForPseudoInversion(image) netPseudoInv.trainPseudoInversion() F.add(npyscreen.TitleFixedText, name = "Networks teached by above images",) F.display() imgProc = ImgPreprocessor(imgToRecogn,SIDE_OF_ARRAY,127) imageRec = imgProc.getImageForHopfield() netHebb.initNeurons(imageRec) netDelta.initNeurons(imageRec) netPseudoInv.initNeurons(imageRec) hebbProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name = "Hebb") F.add(npyscreen.TitleFixedText, name = " ",) deltaProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name = "Delta") F.add(npyscreen.TitleFixedText, name = " ",) pInvProgressWidget = F.add(npyscreen.TitleSlider, out_of=100, name = "PInv") for i in range(50): netHebb.update(100) hebbProgressWidget.value = 2 + i*2 F.display() for i in range(50): netDelta.update(100) deltaProgressWidget.value = 2 + i*2 F.display() for i in range(50): netPseudoInv.update(100) pInvProgressWidget.value = 2 + i*2 F.display() networkResultHebb = netHebb.getNeuronsMatrix().copy() networkResultDelta = netDelta.getNeuronsMatrix().copy() networkResultPseudoInv = netPseudoInv.getNeuronsMatrix().copy() #netHebb.saveNetworkConfigToFile('networkConfig.txt'); """ #print "================================" matchFound = False for idx, image in enumerate(images): if np.array_equiv(networkResultHebb, image): #print "Found matching image as sample " + str(idx) matchFound = True break elif np.array_equiv(self.invertMatrix(networkResultHebb), image): #print "Found inverse matching image as sample" + str(idx) matchFound = True break if(not matchFound): pass #print "Unfortunately no match!" #print "================================" """ subplotIndex = 201 subplotIndex += 10 * (len(images)+1) for idx, image in enumerate(images): plt.subplot(subplotIndex+idx) image2d = np.reshape(image, (SIDE_OF_ARRAY,SIDE_OF_ARRAY)) plt.imshow(image2d, cmap='gray', interpolation = 'nearest') plt.xticks([]), plt.yticks([]), plt.title("Sample %d" % idx) newLineSubplotIndex = subplotIndex + len(images) plt.subplot(newLineSubplotIndex) image2d = np.reshape(imageRec, (SIDE_OF_ARRAY,SIDE_OF_ARRAY)) plt.imshow(image2d, cmap='gray', interpolation = 'nearest') plt.xticks([]), plt.yticks([]), plt.title("To recognize") plt.subplot(newLineSubplotIndex+1) image2dResult = np.reshape(networkResultHebb , (SIDE_OF_ARRAY,SIDE_OF_ARRAY)) plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest') plt.xticks([]), plt.yticks([]), plt.title("Returned by net (HEBB)") plt.subplot(newLineSubplotIndex+2) image2dResult = np.reshape(networkResultDelta, (SIDE_OF_ARRAY,SIDE_OF_ARRAY)) plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest') plt.xticks([]), plt.yticks([]), plt.title("Returned by net (DELTA)") plt.subplot(newLineSubplotIndex+3) image2dResult = np.reshape(networkResultPseudoInv, (SIDE_OF_ARRAY,SIDE_OF_ARRAY)) plt.imshow(image2dResult, cmap='gray', interpolation = 'nearest') plt.xticks([]), plt.yticks([]), plt.title("Returned by net (PINVERSE)") plt.show()