如果你想进行人脸识别首先要进行对K210的模型以及固件的配置,在你去Maix官网去下载模型以及固件。
目录
一、如何申请机械码???
1.前往这个网站,也就是Maix的官网(需要提前申请账号)
2.要进入maixhub去获得获取key_gen机器码
?3.下载获得机械码的固件?
?4.复位获取机械码
二、下载人脸识别的模型
1.注册账号
?2.下载模型
3,将模型下载到K210中
?三,找到我们所需要的源码
1.复制代码,嘿嘿嘿!!!
一、如何申请机械码???
1.前往这个网站,也就是Maix的官网
https://wiki.sipeed.com/
2.要进入maixhub去获得获取key_gen机器码
?
?
?
?需要使用
?3.下载获得机械码的固件
?使用kflash_gui将key_gen_v1.2.bin这个固件下载我们使用的K210中
?
?4.复位获取机械码
接下来就是将你的K210连接到出口助手上就行,我使用的是XCOM,串口选择我们的K210,波特率选择115200,按下复位后,你就会看到你的机械码了。
一定要把你的机械吗保存好。
二、下载人脸识别的模型
1.注册账号
在点击网站之后,需要线注册账号,登录后才可进行下载,网站链接也放在后面了
Sipeed MaixHub – sipeed AI 模型平台(下载模型的网站)
?2.下载模型
点击Download后,直接下载就可以。(当你下载的时候会让你输入机械码)
?这个时候你就需要去申请机械码,每个硬件都会有一个专属的机械码的。上面已经说过怎么获取机械码了。
下载完成后,也就是有三个模型。(建议直接用谷歌浏览器去操作,因为我个人使用的浏览器是搜狗浏览器,下载后就有一个模型)
?
?就是这三个模型,其中名子里面有你的机械码。
3,将模型下载到K210中
接下来把你的模型下载到你的K210中
?
?把这些模型下载到你的K210以后就需要下载我们人脸识别的固件
这个固件我是Maix按照官网教程的思路下载的,但是发现将官网推荐的固件下载到我的K210中发现我的K210硬件连接不到我Maix IDE上,所以大家有兴趣的可以去看看,我就直接吧固件放在下面了,大家自行取用吧!!
?https://pan.baidu.com/s/1b3cam7wqqvoaPlePFpjOnQ? ? ? 提取码:e9gj
然后将这个固件使用kflash_gui下载到我们的K210开发板上就已经成功一半多了。
加油!!!!!
加油!!!!!?
加油!!!!!
?三,找到我们所需要的源码
1.复制代码,嘿嘿嘿!!!
我还是直接给大家我已经测试好的代码!!!
import sensor
import image
import lcd
import KPU as kpu
import time
from Maix import FPIOA, GPIO
import gc
from fpioa_manager import fm
from board import board_info
import utime
task_fd = kpu.load(0x300000)
task_ld = kpu.load(0x400000)
task_fe = kpu.load(0x500000)
clock = time.clock()
fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS0)
key_gpio = GPIO(GPIO.GPIOHS0, GPIO.IN)
start_processing = False
BOUNCE_PROTECTION = 50
def set_key_state(*_):
global start_processing
start_processing = True
utime.sleep_ms(BOUNCE_PROTECTION)
key_gpio.irq(set_key_state, GPIO.IRQ_RISING, GPIO.WAKEUP_NOT_SUPPORT)
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(1)
sensor.set_vflip(1)
sensor.run(1)
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
dst_point = [(44, 59), (84, 59), (64, 82), (47, 105),
(81, 105)] # standard face key point position
a = kpu.init_yolo2(task_fd, 0.5, 0.3, 5, anchor)
img_lcd = image.Image()
img_face = image.Image(size=(128, 128))
a = img_face.pix_to_ai()
record_ftr = []
record_ftrs = []
names = ['Mr.1', 'Mr.2', 'Mr.3', 'Mr.4', 'Mr.5',
'Mr.6', 'Mr.7', 'Mr.8', 'Mr.9', 'Mr.10']
ACCURACY = 85
while (1):
img = sensor.snapshot()
clock.tick()
code = kpu.run_yolo2(task_fd, img)
if code:
for i in code:
# Cut face and resize to 128x128
a = img.draw_rectangle(i.rect())
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()
# a = img.draw_image(face_cut_128, (0,0))
# Landmark for face 5 points
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()))
a = img.draw_circle(le[0], le[1], 4)
a = img.draw_circle(re[0], re[1], 4)
a = img.draw_circle(nose[0], nose[1], 4)
a = img.draw_circle(lm[0], lm[1], 4)
a = img.draw_circle(rm[0], rm[1], 4)
# align face to standard position
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()
# a = img.draw_image(img_face, (128,0))
del (face_cut_128)
# calculate face feature vector
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 max_score > ACCURACY:
a = img.draw_string(i.x(), i.y(), ("%s :%2.1f" % (
names[index], max_score)), color=(0, 255, 0), scale=2)
else:
a = img.draw_string(i.x(), i.y(), ("X :%2.1f" % (
max_score)), color=(255, 0, 0), scale=2)
if start_processing:
record_ftr = feature
record_ftrs.append(record_ftr)
start_processing = False
break
fps = clock.fps()
print("%2.1f fps" % fps)
a = lcd.display(img)
gc.collect()
# kpu.memtest()
# a = kpu.deinit(task_fe)
# a = kpu.deinit(task_ld)
# a = kpu.deinit(task_fd)
?将上面代码直接复制,粘贴到Maix IDE中,连接我们的开发板然后就直接开始运行就可以了!!
终于写完了!!!好累!!希望对大家有帮助!!!
?下面是我进行的测试,
然后输出串口能让STM32读取,接下来就是你们发挥能力的时刻了
?我也就到此为止了。
这是我进行的串口测试!!!
?
我会把我现在所有的资料的都发过来,如果上面没跟上的小伙伴,我把东西都整理好了,直接使用flash_gui下载就行了!!!还有就是带有详细注释的代码,以及我现在正在调试的代码都在里面。
https://pan.baidu.com/s/1L8PWCPRpZ7DTfNEKsPOfFw? ?提取码:c6cj
最后祝大家学有所成!
加油!!!
加油!!!
加油!!!
重要的事情要说三遍!!!
|