openmv的帧率在运行过程中逐渐下降的原因

openmv在运行过程中帧率逐渐下降,原本应该46帧逐渐下降到25帧左右。附上代码:

# Single Color Code Tracking Example
#
# This example shows off single color code tracking using the OpenMV Cam.
#
# A color code is a blob composed of two or more colors. The example below will
# only track colored objects which have both the colors below in them.

import sensor, image, time, math , pyb, struct ,gc
from pyb import UART
import ulab as np
# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green things. You may wish to tune them...
thresholds = [(0, 34, -28, 5, 7, 30) # generic_red_thresholds -> index is 0 so code == (1 << 0)
              ] # generic_green_thresholds -> index is 1 so code == (1 << 1)
# Codes are or'ed together when "merge=True" for "find_blobs".
#(0, 13, -30, 5, -2, 16)
def get_speed(tl,tn,xl,xn,yl,yn):
    time_diff=tn-tl
    speed=[0,0]
    speed[0]=(xn-xl)*1000/time_diff
    speed[1]=(yn-yl)*1000/time_diff
    return speed

def get_acc(tl,tn,xsl,xsn,ysl,ysn):
    time_diff=tn-tl
    acc=[0,0]
    acc[0]=(xsn-xsl)*100/time_diff
    acc[1]=(ysn-ysl)*100/time_diff
    return acc

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
#设置图像大小
sensor.set_windowing((240,240))

sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False) # must be turned off for color tracking
clock = time.clock()

time_now=0;x_now=0;y_now=0;x_speed_now=0;y_speed_now=0;
time_last=0;x_last=0;y_last=0;x_speed_last=0;y_speed_last=0;
speed_now=[0,0]

# 数据传输协议
# 0x01 为坐标传输
# 0x02 为速度传输
# 0x03 为加速度传输
uart = UART(3, 115200)
zt=0x55
def tx_data(data,id):
    if(id==0x01 or id==0x04):
        tx=struct.pack("bbbii",zt,zt,id,data[0],data[1])
    else:
        tx=struct.pack("bbbff",zt,zt,id,data[0],data[1])
    uart.write(tx)
    return tx

roi0=(0,0,240,240)
while(True):
    clock.tick()
    time_last=time_now
    time_now=pyb.millis()
    img = sensor.snapshot().lens_corr(strength = 1.8, zoom = 1.0)
    img.draw_rectangle(roi0, color=(0,255,0))
    x_last=x_now;y_last=y_now;
    x_speed_last=speed_now[0];y_speed_last=speed_now[1];
    blobs= img.find_blobs(thresholds,roi=roi0, pixels_threshold=10, area_threshold=10, merge=True)
    if(len(blobs)!=0):
        # 选择最大的像素块作为对象
        max_index0 = blobs.index(max(blobs, key=lambda x: x[4]))
        img.draw_cross(blobs[max_index0].cx(),blobs[max_index0].cy(), size=5, color=(255,0,0))
        img.draw_rectangle((blobs[max_index0][0],blobs[max_index0][1],blobs[max_index0][2],blobs[max_index0][3]), color=(0,255,0))
        #x y坐标赋值
        x_now=240-blobs[max_index0].cx();y_now=240-blobs[max_index0].cy();
        #计算速度
        speed_now=get_speed(time_last,time_now,x_last,x_now,y_last,y_now)
        #计算加速度
        #acc_now=get_acc(time_last,time_now,x_speed_last,x_speed_now,y_speed_last,y_speed_now)
        print("x=",x_now,"speed=",speed_now)
        tx_data([x_now,y_now],0x01)
        tx_data(speed_now,0x02)
        #tx_data(acc_now,0x03)
    else:
        print("error")
        tx_data((1,1),0x04)
    print(clock.fps())

代码的作用是板球的识别。
原本以为是因为没有及时释放变量,使得内存满了导致的卡顿。
但是经过排查发现是因为串口波特率设置问题,将串口波特率从9600改成115200即可恢复46的帧率。
在这里插入图片描述
(运行效果图)

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值