Routine explanation 99-Tests->selftest
# 自检例程
#
# 这个例子展示了OpenMV Cam在被允许出厂之前如何测试自己。每个OpenMV Cam都应该通过这个测试。
import sensor, time, pyb
def test_int_adc():
adc = pyb.ADCAll(12)
# VBAT测试
vbat = adc.read_core_vbat()
vbat_diff = abs(vbat-3.3)
if (vbat_diff > 0.1):
raise Exception('INTERNAL ADC TEST FAILED VBAT=%fv'%vbat)
# 测试VREF
vref = adc.read_core_vref()
vref_diff = abs(vref-1.2)
if (vref_diff > 0.1):
raise Exception('INTERNAL ADC TEST FAILED VREF=%fv'%vref)
adc = None
print('INTERNAL ADC TEST PASSED...')
def test_color_bars():
sensor.reset()
# 设置传感器
sensor.set_brightness(0)
sensor.set_saturation(3)
sensor.set_gainceiling(8)
sensor.set_contrast(2)
# 设置传感器像素格式
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
# 启用颜色条测试模式
sensor.set_colorbar(True)
# 跳过几帧,让传感器稳定下来
for i in range(0, 100):
image = sensor.snapshot()
# 颜色条阈值
t = [lambda r, g, b: r < 70 and g < 70 and b < 70, # Black
lambda r, g, b: r < 70 and g < 70 and b > 200, # Blue
lambda r, g, b: r > 200 and g < 70 and b < 70, # Red
lambda r, g, b: r > 200 and g < 70 and b > 200, # Purple
lambda r, g, b: r < 70 and g > 200 and b < 70, # Green
lambda r, g, b: r < 70 and g > 200 and b > 200, # Aqua
lambda r, g, b: r > 200 and g > 200 and b < 70, # Yellow
lambda r, g, b: r > 200 and g > 200 and b > 200] # White
# 颜色条在OV7725中是反向的
if (sensor.get_id() == sensor.OV7725):
t = t[::-1]
#320x240图像有8个颜色条,每个大约是40像素。
#我们从帧缓冲区的中心开始,并从每个颜色条的中心平均取10个采样像素的值。
for i in range(0, 8):
avg = (0, 0, 0)
idx = 40*i+20 #色条中心
for off in range(0, 10): #avg 10 pixels
rgb = image.get_pixel(idx+off, 120)
avg = tuple(map(sum, zip(avg, rgb)))
if not t[i](avg[0]/10, avg[1]/10, avg[2]/10):
raise Exception('COLOR BARS TEST FAILED.'
'BAR#(%d): RGB(%d,%d,%d)'%(i+1, avg[0]/10, avg[1]/10, avg[2]/10))
print('COLOR BARS TEST PASSED...')
if __name__ == '__main__':
print('')
test_int_adc()
test_color_bars()
Singtown Technology OpenMV official Chinese document function explanation: