K210
一、例程
1.人脸检测
模型地址:
https://cn.dl.sipeed.com/MAIX/MaixPy/model
程序:
import sensor,image,lcd
import KPU as kpu
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.set_vflip(1)
sensor.set_auto_gain(1,50)
sensor.run(1)
lcd.init(freq=15000000)
lcd.rotation(0)
task = kpu.load(0x300000) # 你需要把模型(face.kfpkg)在闪存地址0x300000
# task = kpu.load("/sd/face.kmodel")#将模型放在 SD 卡中。
#模型描参数
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
#初始化 yolo2 网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)#运行 yolo2 网络
if code:
for i in code:
print(i)
a = img.draw_rectangle(i.rect())
a = lcd.display(img)
a = kpu.deinit(task)#反初始化
2.串口例程
import time
from fpioa_manager import fm
from machine import UART
#*************************串口1参数*******************************
fm.register(32, fm.fpioa.UART1_TX, force=True)
fm.register(33, fm.fpioa.UART1_RX, force=True)
uart_1 = UART(UART.UART1, 115200, 8, 0, 0, timeout=1000, read_buf_len=4096)
####**********************串口2参数********************
fm.register(34, fm.fpioa.UART2_TX, force=True)
fm.register(35, fm.fpioa.UART2_RX, force=True)
uart_2 = UART(UART.UART2, 9600, 8, 0, 0, timeout=1000, read_buf_len=4096)
while(1):
#***********接收**********#
read_data1 =str(uart_1.read())
if read_data1!='None':
print(read_data1)
read_data2 =str(uart_2.read())
if read_data2!='None':
print(read_data2)
#*********发送***********#
uart_1.write("uart_1")
time.sleep_ms(1000)
uart_2.write("uart_2")
time.sleep_ms(1000)
可以适当注意一下串口发送时的停止位
3.python怎么写for循环?
for i in range(0,90):#循环90次
4.关于数组的知识
取数组的最小值并知道是第几个
#****计算最小距离****#
x=[a,b,c,d,f]
aa=[a,b,c,d,f]
#去0操作很傻,可以直接if x=0: pass
for z in x:
if 0 in x:
x.remove(0)
zz=int(min(x))
a6=aa.index(zz)
采集100次数据并且得到众数,非常实用推荐必看!!!
#先定义100个0,很傻,可以用for来写,我很懒。
e_1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
#用d_4这个变量自加从而赋值100次,整体写在if else循环里面,最后清零
if d_4<100:
e_1[d_4]=r[2]
d_4=d_4+1
else:
print(max(e_2, default='列表为空', key=lambda v: e_2.count(v))) #这一句是精华
e_1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
二、image
1.图像剪切
face_cut1 = img.cut(X, Y, W, H)#剪切区域
face_cuta = face_cut1.resize(224, 224)#变换图像大小
a=face_cuta.pix_to_ai()#转换成单片机可以接受的格式
lcd.display(face_cut1,oft=(0,0))#在LCD显示
del (face_cuta2)#释放
2.写汉字
官方显示连接
之后就是自己添加到程序里面去,快捷方法如下:
下面一条一条复制
三、LCD
lcd.init(type=1, freq=15000000, color=lcd.BLACK, invert = 0, lcd_type = 0)
invert: LCD 反色显示
lcd.rotation(dir);dir: 取值范围 [0,3], 从0到3依次顺时针旋转
lcd.display(img, oft=(x, y))
四、作品
识别一张图里面有多少人脸(最多10个)
import sensor,image,lcd
import KPU as kpu
#****************摄像头参数设置************#
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.set_vflip(0)
sensor.set_auto_gain(1,200)
sensor.run(1)
lcd.init(freq=15000000)
lcd.rotation(0)
#****************神经网络参数************#
task = kpu.load(0x300000) # 你需要把模型(face.kfpkg)在闪存地址0x300000
# task = kpu.load("/sd/face.kmodel")#将模型放在 SD 卡中。
#模型描参数
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
#初始化 yolo2 网络
a = kpu.init_yolo2(task, 0.3, 0.3, 5, anchor)
#****************定义变量****************#
e_1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
e_2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
z=z_1=z_2=0
d_1=d_2=0
b_1=b_2=0
#***************区域一图像剪切*************#
def quyu1():
global z_1
global d_1
global b_1
face_cut1 = img.cut(0, 0, 160, 120)#剪切区域
a = lcd.display(face_cut1,oft=(0,0))
face_cuta1 = face_cut1.resize(320, 240)#变换图像大小
face_cuta1.pix_to_ai()#转换成单片机可以接受的格式
code = kpu.run_yolo2(task, face_cuta1)#运行 yolo2 网络
if code:
for i in code:
#print("1区:",i.objnum())
if d_1<50:
e_1[d_1]=i.objnum()
d_1=d_1+1
else:
z_1=int(max(e_1))
print("1区:",z_1)
b_1=1
a = img.draw_rectangle(int(i.x()/2),int(i.y()/2),int(i.w()/2),int(i.h()/2))
del (face_cuta1)#释放
del (face_cut1)#释放
#***************区域二图像剪切*************#
def quyu2():
global z_2
global d_2
global b_2
face_cut2 = img.cut(160, 0, 160, 120)#剪切区域
a = lcd.display(face_cut2,oft=(160,0))
face_cuta2 = face_cut2.resize(320, 240)#变换图像大小
face_cuta2.pix_to_ai()#转换成单片机可以接受的格式
code = kpu.run_yolo2(task, face_cuta2)#运行 yolo2 网络
if code:
for i in code:
a = img.draw_rectangle(i.rect())
if d_2<50:
print("正在循环检测,第:",d_2,"次")
e_2[d_2]=i.objnum()
d_2=d_2+1
else:
z_2=int(max(e_2))
print("2区:",z_2)
b_2=1
del (face_cuta2)#释放
del (face_cut2)#释放
#***************主循环*******************#
while(True):
img = sensor.snapshot()
quyu1()
#*********dier****************
quyu2()
if b_1==1 and b_2==1:
z=z_1+z_2
print("总人数:",z)
z=z_1=z_2=0
d_1=d_2=0
b_1=b_2=0
e_1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
e_2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
a = kpu.deinit(task)#反初始化