H7 固定曝光时间等参数后,调用 snapshot 耗时不稳定,请问如何改善?
-
这两天实测了一下,使用全局快门 sensor,连续 snapshot (每次调用 snapshot 几乎没有间隔) 情况下,每次 snapshot 耗时非常接近,约 2.6ms。
但如果间歇性调用 snapshot (间隔5~1000ms),每次调用 snapshot 的耗时则不稳定,最大达到 2-3 倍时间。
测试过程禁用 ide 图像缓冲区,代码如下
sensor.reset() # Reset and initialize the sensor. sensor.set_pixformat(sensor.GRAYSCALE) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.QQQVGA) # Set frame size to QVGA (320x240) sensor.ioctl(sensor.IOCTL_SET_TRIGGERED_MODE, True) sensor.set_auto_gain(False) sensor.set_auto_whitebal(False) sensor.set_auto_exposure(False, exposure_us = int(20)) sensor.set_auto_gain(False, 18) sensor.skip_frames(time = 500) # 连续调用 snapshot,基本没有间隔,每次调用约 2.6 ms while(True): start = pyb.micros() img = sensor.snapshot() end = pyb.micros() print("%d" % (end-start)) # 连续调用 snapshot,存在间隔,每次调用约 5-6 ms while(True): start = pyb.micros() img = sensor.snapshot() end = pyb.micros() print("A:%d" % (end-start)) pyb.delay(1) # 延迟 1ms start = pyb.micros() img = sensor.snapshot() end = pyb.micros() print("B:%d" % (end-start)) pyb.delay(1000) # 延迟 1000ms
请问如何改善?谢谢
-
按照最长时间来计算就行。
https://github.com/openmv/openmv/blob/master/src/omv/sensor.c#L864
snapshot是用的DMA,我猜有其他的代码可能让管道不通畅。(个人猜测)最长时间大概5ms,这个问题很重要吗?如果很重要可以让他们改代码,但是很难改善了。
-
@kidswong999
您好,产品应用需要通过 1 组 2 个外部 IO 信号触发拍照正在运动的物体,2 个信号的间隔最小在 3-4ms,(触发信号每组间隔 > 200ms)目前由于 snapshot 时间不稳定,导致第 2 个信号到来时,程序仍然在处理上 1 张 snapshot 的拍摄,
待程序完成并执行第 2 次拍照,运动物体已经移出了拍摄区
这个问题希望得到解决,我们想在产品上保持使用 OpenMV ,前期开发做了很多努力。
谢谢
-
@ugai 看一下io响应部分的代码?看看延时是不是稳定
-
我没看懂什么意思。
什么叫第二次拍照?