沉舟侧畔千帆过,病树前头万木春

一、例程

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次数据并且得到众数,非常实用推荐必看!!!

#先定义1000,很傻,可以用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], 从03依次顺时针旋转
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)#反初始化

猜你喜欢

转载自blog.csdn.net/Mrli0530/article/details/120090633