Exemple #1
0
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()
Exemple #2
0
	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()