import sensor,lcd,image
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224)) #set to 224x224 input
sensor.set_hmirror(0) #flip camera
task = kpu.load(0x200000) #load model from flash address 0x200000
sensor.run(1)
img_lcd=image.Image()
while True:
img = sensor.snapshot()
#lcd.display(img,oft=(0,0)) #display large picture
img1=img.to_grayscale(1) #convert to gray
img2=img1.resize(28,28) #resize to mnist input 28x28
a=img2.invert() #invert picture as mnist need
a=img2.strech_char(1) #preprocessing pictures, eliminate dark corner
img2x2=img2.resize(28*2,28*2) #scale to display
a=img_lcd.draw_image(img2x2,0,0)#display small 28x28 picture
a=img2.pix_to_ai(); #generate data for ai
#watch conv0
a=kpu.set_layers(task, 1)
fmap=kpu.forward(task,img2) #run neural network model
for i in range(0,16):
tmp=kpu.fmap(fmap,i)
tmpx2=tmp.resize(14*2,14*2) #scale to display
a=img_lcd.draw_image(tmpx2,(i%8)*14*2,28*2+14*2*int(i/8))
#watch conv1
a=kpu.set_layers(task, 2)
fmap=kpu.forward(task,img2) #run neural network model
for i in range(0,32):
tmp=kpu.fmap(fmap,i)
tmpx2=tmp.resize(7*2,7*2) #scale to display
a=img_lcd.draw_image(tmpx2,(i%16)*7*2,28*2+14*2*2+7*2*int(i/16))
#watch conv2
a=kpu.set_layers(task, 8)
fmap=kpu.forward(task,img2) #run neural network model
for i in range(0,10):
tmp=kpu.fmap(fmap,i)
tmpx2=tmp.resize(4*2,4*2) #scale to display
a=img_lcd.draw_image(tmpx2,i*4*2,28*2+14*2*2+7*2*2)
#watch softmax
a=kpu.set_layers(task, 11)
fmap=kpu.forward(task,img2)
plist=fmap[:]
for i in range(0,10):
cc = int(plist[i]*256)
a=img_lcd.draw_rectangle(i*16, 28*2+14*2*2+7*2*2+4*2+10, 16, 16, color = (cc, cc, cc), thickness = 1, fill = True)
a=img_lcd.draw_string(i*16+5, 28*2+14*2*2+7*2*2+4*2+10+16, str(i), color = (255, 255, 255), scale = 2, mono_space = False)
#show result
lcd.display(img_lcd,oft=(0,0))