【智能网络台灯】11. MaixBit使用摄像头检测环境光强度
[复制链接]
过往分享
【2022得捷电子创新设计大赛】最晚开箱帖
【2022得捷电子创新设计大赛】1. ESP32-S2环境搭建及点灯
【智能网络台灯】2. 设置系统时间以及打印
【智能网络台灯】3. ESP32-S2 + lvgl使用
【智能网络台灯】4. ESP32-S2 板载按键使用
【智能网络台灯】5. ESP32-S2 使用sntp进行网络校时
【智能网络台灯】6. ESP32-S2解决RAM空间开销过大的问题
【智能网络台灯】7. 获取实时天气信息并解析
【智能网络台灯】8. Maix bit驱动RGB
【智能网络台灯】9. Maix bit驱动串口
【智能网络台灯】10. Esp32-S2驱动UART
前言
我的项目中需要根据环境光强度来自动调节台灯的亮度,就需要用到光线传感器,但是手头没有光线传感器,就想到了使用摄像头来检测环境光强度,通过资料了解到可以将RGB的图片转换成YUV的图片,其中的Y就是亮度,这是一个方式。但是经过对maixpy的学习,发现还有一个格式,就是LAB,其中L也图片的亮度,使用L也可以用来标记环境光强度,通过学习MaixPy,最后实现了对环境光检测,经过测试,基本可以满足要求。
资料:https://wiki.sipeed.com/soft/maixpy/zh/api_reference/machine_vision/image/image.html
使用maixpy对图像处理很简单。
下面简述我的方式。
实现过程
MaixPy的image的类image.get_statistics() 提供了对像素点的统计数据的获取,可以通过方法statistics.l_mean()获取到LAB格式中的L平均值,使用该平均值作为我们的当前光照强度。
单纯使用摄像头精度还是有限,但是对于我的项目来说已经够用了。
还可以对多张图片进行采样取平均值提高精确度或者对各个像素点进行分析,去掉亮度最低的像素点和最高的像素点再取平均值进行计算提高精确度等等。
下面是代码实现:
import sensor, lcd
import utime
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
# 垂直反转相机
sensor.set_vflip(1)
# 设置相机亮度为0
sensor.set_brightness(0)
# 开始撞去图像
sensor.run(1)
# 跳过不稳定帧
sensor.skip_frames()
lcd.init(freq=15000000)
while(True):
img = sensor.snapshot()
lcd.display(img)
# 获取lab统计结果
lab_color = img.get_statistics()
# 获取图片亮度平均值,作为光照亮度
l_avg = lab_color[0]
print ("光照强度为:"+str(l_avg))
utime.sleep_ms(1000)
测试效果
|