"MaixCam"系列文章主要介绍一下本人在暑假期间使用该摄像头模组的心得。该摄像头模组相较于传统的K210、OpenMV有着很明显的优点:更清晰的LCD屏幕、更强大的支持yolo5的算力、更高清的摄像头。
我认为如果你电赛选择摄像头模组,想要低学习成本实现电赛题目的基本要求,不想使用树莓派、OpenCV等工具,强烈建议使用MaixCam来替代OpenMV或K210,MaixCam的封装的函数大部分与前两者相同,可以对网上OpenMV和K210的资源轻松进行移植,并且实现效果更好。
如果你想快速配置,直接跳转到总结部分即可。
MaixCAM 默认搭载了 GC4653 摄像头,该摄像头的配置已经很高,基本不需要对camera进行额外的配置。下面讲一讲camera具体的参数和配置:
#导入camera、image和display
from maix import camera, image, display
首先,你需要从maix函数库中导入camera、image和display。其中camera模块主要用于拍摄、调节摄像参数;image模块主要用于图像处理;display模块主要用于LCD显示。
#创建一个Camera类,命名为cam
cam = camera.Camera(
width: int = -1,
height: int = -1,
format: maix.image.Format = ...,
device: str = None,
fps: int = -1,
buff_num: int = 3,
open: bool = True)
width,height用于调节摄像头拍摄图片的大小,最高支持2560x1440
format是相机输出模式,常用的模式有FMT_RGB888、FMT_RGB565、FMT_GRAYSCALE
device是摄像头设备路径,默认为NULL表示第一个,一般场景不对其进行设置
fps是摄像头帧率,只支持30、60,60fps下最大支持分辨率1280x720,30fps下最大支持2560x1440
buff_num是摄像头缓冲区,一般场景不对其进行设置
open是摄像头开启标识,默认为True,一般场景不对其进行设置
#对摄像头进行简单配置 宽640 高480 彩图RGB888 60fps
cam = camera.Camera(640, 480, image.Format.FMT_RGB888, fps=60)
#跳过开头30fps,等待摄像头稳定
cam.skip_frames(30)
#从相机缓冲区获取一帧图像,返回image对象
img = cam.read()
这样我们就对摄像头进行简单的设置,如果你想要对摄像头进行更深入设置,可以接着阅读本章节,如果你需要快速上手可以直接看display部分。
接下来的部分,我将介绍一些常用的调整摄像头的函数,如果你需要了解更多,可以阅读Maixpy官网关于API中Camera部分的内容。
#设置相机水平翻转
cam.hmirror(True)
#设置相机垂直翻转
cam.vflip(True)
#设置相机曝光,摄像头会切换到手动曝光模式,该函数会影响isp从而影响摄像效果
#如果值 == -1 则返回曝光时间,如果值 != 0 则设置并返回曝光时间
cam.exposure(-1)
#切换回自动曝光模式,该参数值默认为1,即自动曝光
cam.exp_mode(0)
#设置相机增益,只有在手动曝光模式才能设置
#如果值 == -1,则返回相机增益,如果值 != 0,则设置并返回相机增益
cam.gain(-1)
#设置白平衡
#值 = 0 为自动模式,值 = 1为手动模式
cam.awb_mode(0)
#设置亮度,范围为[0,100]
#值 == -1 返回亮度值, 值 != 0,则设置并返回亮度值
cam.luma(-1)
#设置对比度,范围为[0,100]
#值 == -1 返回对比度, 值 != 0,则设置并返回对比度
cam.constrast(-1)
#设置相机饱和度,范围为 [0, 100]
#值 == -1 返回饱和度, 值 != 0,则设置并返回饱和度
cam.saturation(-1)
本章节将讲述如何使用display模块中的内容,使LCD屏幕上显示画面,并对屏幕显示内容进行操作。
disp = display.Display(
width: int = -1,
height: int = -1,
format: maix.image.Format = ...,
device: str = None,
open: bool = True)
width显示宽度,height显示高度,默认值为 -1 表示自动检测,如果宽度>最大设备支持宽度,则自动设置为最大设备支持宽度
format是显示屏输出模式,常用的模式有FMT_RGB888、FMT_RGB565、FMT_GRAYSCALE,一般场景不对其进行设置,显示摄像机拍摄画面
device是摄像头设备路径,默认为NULL表示第一个,一般场景不对其进行设置
open是开启标识,默认为True,一般场景不对其进行设置
#创建Display对象
disp = display.Display()
while True:
#获取摄像头缓冲图片
img = cam.read()
#LCD显示摄像头图片
disp.show(img)
这样我们就对LCD屏幕进行了简单的配置,让摄像机拍摄的画面显示到了LCD屏幕上。如果你想要对摄像头进行更深入设置,可以接着阅读本章节。
接下来的部分,我将介绍一些常用的调整屏幕的函数,如果你需要了解更多,可以阅读Maixpy官网关于API中Display部分的内容。
#关闭屏幕
disp.close()
#设置屏幕背光,范围为[0,100]
disp.set_backlight(100)
#设置屏幕镜像
disp.set_hmirror(True)
#设置屏幕翻转
disp.set_vflip(True)
#如果图片超出,或者小于LCD显示范围你可以改变fit
#fit为图像显示方式,默认为image.FIT_CONTAIN,即保持纵横比,用黑色填充空白
#其余还有以下函数,你可以选择自己想要的显示方式
#FIT_NONE:不匹配对象,保持原始
#FIT_FILL:宽度到新宽度,高度到新高度,可以拉伸
#FIT_COVER:保持纵横比,裁剪图像以适应新尺寸
disp.show(
img: maix.image.Image,
fit: maix.image.Fit = ...)
如果你想要快速配置摄像头内容,只需要使用以下代码就可以了
#导入camera、image和display
from maix import camera, image, display
#对摄像头进行简单配置 宽640 高480 彩图RGB888 60fps
cam = camera.Camera(640, 480, image.Format.FMT_RGB888, fps=60)
#创建Display对象
disp = display.Display()
#跳过开头30fps,等待摄像头稳定
cam.skip_frames(30)
while 1:
#从相机缓冲区获取一帧图像,返回image对象
img = cam.read()
#LCD显示摄像头图片
disp.show(img)