Skip to content

Instantly share code, notes, and snippets.

@anoken
Last active November 4, 2019 17:32
Show Gist options
  • Save anoken/bce165055a5f189352b3c948bb9a0c58 to your computer and use it in GitHub Desktop.
Save anoken/bce165055a5f189352b3c948bb9a0c58 to your computer and use it in GitHub Desktop.
mobilenet_kpu_size_detection_m5stickv
##(C)2019 aNoken
## button a is learning
## button b is switch 0 or 1
## 0 is small size position
## 1 is large size position
import image, lcd, sensor,gc
import KPU as kpu
from fpioa_manager import fm,board_info
from Maix import GPIO
from machine import UART
def m5stickv_init():
lcd.init()
lcd.rotation(2)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) #QVGA=320x240
sensor.set_windowing((224, 224))
sensor.run(1)
m5stickv_init()
fm.register(board_info.BUTTON_A, fm.fpioa.GPIO1)
but_a=GPIO(GPIO.GPIO1, GPIO.IN, GPIO.PULL_UP)
fm.register(board_info.BUTTON_B, fm.fpioa.GPIO2)
but_b = GPIO(GPIO.GPIO2, GPIO.IN, GPIO.PULL_UP)
#print("gc",gc.mem_alloc())
task = kpu.load("mbnet751.kmodel")
set=kpu.set_layers(task,29)
#print("gc",gc.mem_alloc())
but_a_pressed = 0
but_b_pressed = 0
master_data_a = []
master_data_b = []
for i in range(768):
master_data_a.append(0)
master_data_b.append(1)
w_data=0.99
cap_data = []
for i in range(768):
cap_data.append(0)
cap_w_data=0.5
dummyImage = image.Image()
dummyImage = dummyImage.resize(32, 24)
kpu_dat = dummyImage.to_grayscale(1)
set_mode=0
img = sensor.snapshot()
fmap = kpu.forward(task, img)
plist=fmap[:]
for i in range(768):
master_data_a[i] =plist[i]
while(True):
img = sensor.snapshot()
fmap = kpu.forward(task, img)
plist=fmap[:]
##low_pass_fiiter
for i in range(768):
cap_data[i] =cap_w_data*cap_data[i]+ (1.0-cap_w_data)*plist[i]
for row in range(32):
for col in range(24):
kpu_dat[24*row+col] = int(cap_data[row*24+col]*100)
a1=0
a2=0
for i in range(768):
a1=a1+(master_data_b[i]-master_data_a[i])*(cap_data[i]-master_data_a[i])
a2=a2+(master_data_b[i]-master_data_a[i])*(master_data_b[i]-master_data_a[i])
dist =a1/a2*100
dist1 = 0
dist2 = 0
for i in range(768):
dist1 = dist1 + (cap_data[i]-master_data_a[i])**2
dist2 = dist2 + (cap_data[i]-master_data_b[i])**2
if but_a.value() == 0 and but_a_pressed == 0:
for i in range(768):
if set_mode==0:
# master_data_a[i] =cap_data[i]
master_data_a[i] =cap_w_data*master_data_a[i]+ (1.0-cap_w_data)*cap_data[i]
elif set_mode==1:
# master_data_b[i] =cap_data[i]
master_data_b[i] =cap_w_data*master_data_b[i]+ (1.0-cap_w_data)*cap_data[i]
but_a_pressed=1
if but_a.value() == 1 and but_a_pressed == 1:
but_a_pressed=0
if but_b.value() == 0 and but_b_pressed == 0:
but_b_pressed=1
if set_mode==0:
set_mode=1
elif set_mode==1:
set_mode=0
if but_b.value() == 1 and but_b_pressed == 1:
but_b_pressed=0
data_str=str(int(dist))
dist1_str=str(int(dist1))
dist2_str=str(int(dist2))
set_mode_str=str("set")+str(set_mode)
img.draw_string(30, 50, data_str, (255,255,0),scale=2)
img.draw_string(30,80,set_mode_str, (255,255,0),scale=2)
# img.draw_string(30, 80,dist1_str, (0,0,255),scale=2)
# img.draw_string(30, 110, dist2_str, (0,0,255),scale=2)
# img2=img.resize(110,110)
# img3=kpu_dat.resize(110,110)
# lcd.display(img,oft=(0,16))
# lcd.display(img3,oft=(130,16))
lcd.display(img)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment