Fix: 修复MicroPython MixGoAI和Microbit下一些py异常同时格式化代码
This commit is contained in:
@@ -1,16 +1,16 @@
|
||||
import KPU as kpu
|
||||
import gc,image,time
|
||||
import gc, image, time
|
||||
import board
|
||||
|
||||
try:
|
||||
|
||||
kpu.deinit(task_fe)
|
||||
kpu.deinit(task_ld)
|
||||
kpu.deinit(task_fd)
|
||||
del task_fe
|
||||
del task_ld
|
||||
del task_fd
|
||||
|
||||
kpu.deinit(task_fe)
|
||||
kpu.deinit(task_ld)
|
||||
kpu.deinit(task_fd)
|
||||
del task_fe
|
||||
del task_ld
|
||||
del task_fd
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@@ -20,114 +20,129 @@ record_ftr = []
|
||||
record_ftrs = []
|
||||
img_face = image.Image(size=(128, 128))
|
||||
a = img_face.pix_to_ai()
|
||||
dst_point = [(44, 59), (84, 59), (64, 82), (47, 105),(81, 105)]
|
||||
dst_point = [(44, 59), (84, 59), (64, 82), (47, 105), (81, 105)]
|
||||
|
||||
start_processing = False
|
||||
tim2 = time.ticks_ms()
|
||||
|
||||
task_fd=None
|
||||
task_ld=None
|
||||
task_fe=None
|
||||
info=None
|
||||
bb=1
|
||||
task_fd = None
|
||||
task_ld = None
|
||||
task_fe = None
|
||||
info = None
|
||||
bb = 1
|
||||
|
||||
|
||||
def set_key_state(*_):
|
||||
global start_processing
|
||||
global tim2
|
||||
if (time.ticks_ms() - tim2 )> 4000:
|
||||
start_processing = True
|
||||
tim2 = time.ticks_ms()
|
||||
global start_processing
|
||||
global tim2
|
||||
if (time.ticks_ms() - tim2) > 4000:
|
||||
start_processing = True
|
||||
tim2 = time.ticks_ms()
|
||||
|
||||
|
||||
def init(FD,LD,FE):
|
||||
global task_fd
|
||||
global task_ld
|
||||
global task_fe
|
||||
# task_fd = kpu.load(0x200000)
|
||||
# task_ld = kpu.load(0x300000)
|
||||
# task_fe = kpu.load(0x400000)
|
||||
|
||||
task_fd = kpu.load(FD)
|
||||
task_ld = kpu.load(LD)
|
||||
task_fe = kpu.load(FE)
|
||||
def init(FD, LD, FE):
|
||||
global task_fd
|
||||
global task_ld
|
||||
global task_fe
|
||||
# task_fd = kpu.load(0x200000)
|
||||
# task_ld = kpu.load(0x300000)
|
||||
# task_fe = kpu.load(0x400000)
|
||||
|
||||
task_fd = kpu.load(FD)
|
||||
task_ld = kpu.load(LD)
|
||||
task_fe = kpu.load(FE)
|
||||
|
||||
gc.collect()
|
||||
key_gpio = board.pin(9, board.GPIO.IN, board.GPIO.PULL_UP)
|
||||
key_gpio.irq(set_key_state, board.GPIO.IRQ_RISING, board.GPIO.WAKEUP_NOT_SUPPORT)
|
||||
|
||||
anchor = (
|
||||
1.889,
|
||||
2.5245,
|
||||
2.9465,
|
||||
3.94056,
|
||||
3.99987,
|
||||
5.3658,
|
||||
5.155437,
|
||||
6.92275,
|
||||
6.718375,
|
||||
9.01025,
|
||||
) # anchor for face detect
|
||||
kpu.init_yolo2(task_fd, 0.5, 0.3, 5, anchor)
|
||||
|
||||
|
||||
def train(img, names, threshold):
|
||||
global task_fd
|
||||
global task_ld
|
||||
global task_fe
|
||||
global start_processing
|
||||
global info
|
||||
global bb
|
||||
|
||||
code = kpu.run_yolo2(task_fd, img)
|
||||
if code:
|
||||
for i in code:
|
||||
face_cut = img.cut(i.x(), i.y(), i.w(), i.h())
|
||||
face_cut_128 = face_cut.resize(128, 128)
|
||||
a = face_cut_128.pix_to_ai()
|
||||
fmap = kpu.forward(task_ld, face_cut_128)
|
||||
plist = fmap[:]
|
||||
le = (i.x() + int(plist[0] * i.w() - 10), i.y() + int(plist[1] * i.h()))
|
||||
re = (i.x() + int(plist[2] * i.w()), i.y() + int(plist[3] * i.h()))
|
||||
nose = (i.x() + int(plist[4] * i.w()), i.y() + int(plist[5] * i.h()))
|
||||
lm = (i.x() + int(plist[6] * i.w()), i.y() + int(plist[7] * i.h()))
|
||||
rm = (i.x() + int(plist[8] * i.w()), i.y() + int(plist[9] * i.h()))
|
||||
lb = i.rect()
|
||||
src_point = [le, re, nose, lm, rm]
|
||||
T = image.get_affine_transform(src_point, dst_point)
|
||||
a = image.warp_affine_ai(img, img_face, T)
|
||||
a = img_face.ai_to_pix()
|
||||
del face_cut_128
|
||||
fmap = kpu.forward(task_fe, img_face)
|
||||
feature = kpu.face_encode(fmap[:])
|
||||
reg_flag = False
|
||||
scores = []
|
||||
for j in range(len(record_ftrs)):
|
||||
score = kpu.face_compare(record_ftrs[j], feature)
|
||||
scores.append(score)
|
||||
max_score = 0
|
||||
index = 0
|
||||
for k in range(len(scores)):
|
||||
if max_score < scores[k]:
|
||||
max_score = scores[k]
|
||||
index = k
|
||||
if start_processing:
|
||||
record_ftr = feature
|
||||
record_ftrs.append(record_ftr)
|
||||
start_processing = False
|
||||
if max_score > threshold:
|
||||
info = [names[index], max_score, lb, src_point]
|
||||
else:
|
||||
if bb == 1:
|
||||
print("Please press BOOT key to enter the face")
|
||||
bb = 0
|
||||
info = [None, max_score, lb, src_point]
|
||||
return True
|
||||
break
|
||||
else:
|
||||
info = None
|
||||
bb = 1
|
||||
return False
|
||||
gc.collect()
|
||||
|
||||
gc.collect()
|
||||
key_gpio = board.pin(9,board.GPIO.IN,board.GPIO.PULL_UP)
|
||||
key_gpio.irq(set_key_state,board.GPIO.IRQ_RISING, board.GPIO.WAKEUP_NOT_SUPPORT)
|
||||
|
||||
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437,6.92275, 6.718375, 9.01025) # anchor for face detect
|
||||
kpu.init_yolo2(task_fd, 0.5, 0.3, 5, anchor)
|
||||
|
||||
|
||||
def train(img,names,threshold):
|
||||
global task_fd
|
||||
global task_ld
|
||||
global task_fe
|
||||
global start_processing
|
||||
global info
|
||||
global bb
|
||||
|
||||
code = kpu.run_yolo2(task_fd, img)
|
||||
if code:
|
||||
for i in code:
|
||||
face_cut = img.cut(i.x(), i.y(), i.w(), i.h())
|
||||
face_cut_128 = face_cut.resize(128, 128)
|
||||
a = face_cut_128.pix_to_ai()
|
||||
fmap = kpu.forward(task_ld, face_cut_128)
|
||||
plist = fmap[:]
|
||||
le = (i.x()+int(plist[0]*i.w() - 10), i.y()+int(plist[1]*i.h()))
|
||||
re = (i.x()+int(plist[2]*i.w()), i.y()+int(plist[3]*i.h()))
|
||||
nose = (i.x()+int(plist[4]*i.w()), i.y()+int(plist[5]*i.h()))
|
||||
lm = (i.x()+int(plist[6]*i.w()), i.y()+int(plist[7]*i.h()))
|
||||
rm = (i.x()+int(plist[8]*i.w()), i.y()+int(plist[9]*i.h()))
|
||||
lb=i.rect()
|
||||
src_point = [le, re, nose, lm, rm]
|
||||
T = image.get_affine_transform(src_point, dst_point)
|
||||
a = image.warp_affine_ai(img, img_face, T)
|
||||
a = img_face.ai_to_pix()
|
||||
del(face_cut_128)
|
||||
fmap = kpu.forward(task_fe, img_face)
|
||||
feature = kpu.face_encode(fmap[:])
|
||||
reg_flag = False
|
||||
scores = []
|
||||
for j in range(len(record_ftrs)):
|
||||
score = kpu.face_compare(record_ftrs[j], feature)
|
||||
scores.append(score)
|
||||
max_score = 0
|
||||
index = 0
|
||||
for k in range(len(scores)):
|
||||
if max_score < scores[k]:
|
||||
max_score = scores[k]
|
||||
index = k
|
||||
if start_processing:
|
||||
record_ftr = feature
|
||||
record_ftrs.append(record_ftr)
|
||||
start_processing = False
|
||||
if max_score > threshold:
|
||||
info=[names[index],max_score,lb,src_point]
|
||||
else:
|
||||
if bb==1:
|
||||
print("Please press BOOT key to enter the face")
|
||||
bb=0
|
||||
info=[None,max_score,lb,src_point]
|
||||
return True
|
||||
break
|
||||
else:
|
||||
info=None
|
||||
bb=1
|
||||
return False
|
||||
gc.collect()
|
||||
|
||||
def info_name():
|
||||
gc.collect()
|
||||
return info[0]
|
||||
gc.collect()
|
||||
return info[0]
|
||||
|
||||
def info_score():
|
||||
return info[1]
|
||||
|
||||
def info_face():
|
||||
return info[2]
|
||||
|
||||
def info_organs():
|
||||
return info[3]
|
||||
|
||||
def info_score():
|
||||
return info[1]
|
||||
|
||||
|
||||
def info_face():
|
||||
return info[2]
|
||||
|
||||
|
||||
def info_organs():
|
||||
return info[3]
|
||||
|
||||
Reference in New Issue
Block a user