Last active
November 4, 2019 17:32
-
-
Save anoken/bce165055a5f189352b3c948bb9a0c58 to your computer and use it in GitHub Desktop.
mobilenet_kpu_size_detection_m5stickv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##(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