:mod:`sensor` --- 感光元件 =============================== .. module:: sensor :synopsis: 感光元件 ``sensor`` 模块用于拍摄照片。 用法示例:: import sensor # Setup camera. 设置相机 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames() # Take pictures. 拍照。 while(True): sensor.snapshot() 函数 --------- .. function:: sensor.reset() 初始化相机传感器。 .. function:: sensor_sleep(enable) 如果enable为True,则将相机置于睡眠状态。 否则,将其唤醒。 .. function:: sensor.flush() 将帧缓冲区中的内容复制到IDE中。若其未运行无限循环的脚本,您应调用该方法来显示您的OpenMV Cam拍摄的最后一张照片。 请注意,脚本完成后,您需要在延迟时间约一秒后让IDE从相机中抓取图像。 否则,此方法将不起作用。 .. function:: sensor.snapshot() 使用相机拍摄一张照片,并返回 ``image`` 对象。 OpenMV有两个图像存储区。用于正常MicroPython处理的经典堆栈/堆区可以将小图像存储在堆中。 但是,MicroPython堆只有大约100KB,这不足以存储更大的图像。因此,您的OpenMV Cam有一个辅助帧缓冲存储区, 用于存储 `sensor.snapshot()` 所拍摄的图像。 图像存储在该存储区域的底部。 剩下的任何内存都可供帧缓冲区堆栈使用,OpenMV Cam的固件使用它来保存用于图像处理算法的大型临时数据结构。 如果你需要空间来容纳多个帧,你可以通过调用 `sensor.alloc_extra_fb()` 来“偷走”帧缓冲区空间。 .. function:: sensor.skip_frames([n, time]) 使用 ``n`` 个快照,让相机图像在改变相机设置后稳定下来。 ``n`` 作为普通参数传输, 例如: ``skip_frames(10)`` 跳过 ``10`` 帧。您应在改变相机设置后调用该函数。 或者,您可通过关键字参数 ``time`` 来跳过几毫秒的帧数,例如: ``kip_frames(time = 2000)`` ,跳过2000毫秒的帧。 若 ``n`` 和 ``time`` 皆未指定,该方法跳过300毫秒的帧。 若二者皆指定,该方法会跳过 ``n`` 数量的帧,但将在 ``time`` 毫秒后超时。 .. function:: sensor.width() 返回传感器的分辨率宽度。 .. function:: sensor.height() 返回传感器的分辨率高度。 .. function:: sensor.get_fb() (获取帧缓冲区)返回由先前调用的 `sensor.snapshot()` 所返回的图像对象。 若此前未调用过 `sensor.snapshot()` ,则返回 ``None`` 。 .. function:: sensor.get_id() 返回相机模块ID。 * `sensor.OV9650`: 第一代OpenMV Cam的感光元件 - 不再发布. * `sensor.OV2640`: 第二代OpenMV Cam的感光元件 - 不再发布. * `sensor.OV7725`: 卷帘快门. * `sensor.MT9V034`: 全局快门. * `sensor.LEPTON`: Lepton1/2/3 感光元件. .. function:: sensor.alloc_extra_fb(width, height, pixformat) 为帧缓冲区堆栈中的图像存储分配另一个帧缓冲区, 并返回一个 ``width``, ``height``, ``pixformat`` 图像对象。 只要有可用内存分配任意数量的额外帧缓冲区,您可以随意调用此函数。 .. note:: 创建辅助图像通常需要在具有有限数量的RAM的堆上创建它们。 但是,也会被分割,使得难以抓取大型连续存储器阵列来存储图像。使用此方法,您可以分配 非常大的存储器阵列, 通过从我们用于计算机视觉算法的帧缓冲区堆栈存储器中获取空间而立即获得图像。 也就是说, 这也意味着如果您尝试执行更多内存密集型机器视觉算法(如 `image.find_apriltags` ),则会更容易耗尽内存。 .. function:: sensor.dealloc_extra_db() 取消分配先前分配的最后一个帧缓冲区。额外的帧缓冲区以结构形式存储在堆栈中。 .. note:: 您的OpenMV有两个内存区域。 首先,你有你的经典 .data/.bss/heap/stack存储区。 .data/.bss/heap堆区域由固件修复。堆栈然后增长下来,直到它碰到堆。 接下来,帧缓冲区被存储在辅助存储区域中。内存与底部的主要帧缓冲区和顶部的帧缓冲区堆栈有关。 当调用snapshot()时,它会从底部填充帧缓冲区。帧缓冲区堆栈可以使用剩下的任何东西。这种内存分配方法对微控制器上的计算机视觉非常有效。 .. function:: sensor.set_pixformat(pixformat) 设置相机模块的像素模式。 * `sensor.GRAYSCALE`: 8-bits per pixel. * `sensor.RGB565`: 16-bits per pixel. * `sensor.BAYER`: 8-bits per pixel bayer pattern. .. function:: sensor.set_framesize(framesize) 设置相机模块的帧大小。 * `sensor.QQCIF`: 88x72 * `sensor.QCIF`: 176x144 * `sensor.CIF`: 352x288 * `sensor.QQSIF`: 88x60 * `sensor.QSIF`: 176x120 * `sensor.SIF`: 352x240 * `sensor.QQQQVGA`: 40x30 * `sensor.QQQVGA`: 80x60 * `sensor.QQVGA`: 160x120 * `sensor.QVGA`: 320x240 * `sensor.VGA`: 640x480 * `sensor.HQQQVGA`: 80x40 * `sensor.HQQVGA`: 160x80 * `sensor.HQVGA`: 240x160 * `sensor.B64X32`: 64x32 (for use with `image.find_displacement()`) * `sensor.B64X64`: 64x64 (for use with `image.find_displacement()`) * `sensor.B128X64`: 128x64 (for use with `image.find_displacement()`) * `sensor.B128X128`: 128x128 (for use with `image.find_displacement()`) * `sensor.LCD`: 128x160 (for use with the lcd shield) * `sensor.QQVGA2`: 128x160 (for use with the lcd shield) * `sensor.WVGA`: 720x480 * `sensor.WVGA2`:752x480 * `sensor.SVGA`: 800x600 (only in JPEG mode for the OV2640 sensor) * `sensor.SXGA`: 1280x1024 (only in JPEG mode for the OV2640 sensor) * `sensor.UXGA`: 1600x1200 (only in JPEG mode for the OV2640 sensor) .. function:: sensor.set_windowing(roi) 将相机的分辨率设置为当前分辨率的子分辨率。例如:将分辨率设置为 `sensor.VGA` ,然后将windowing设置为(120, 140, 200, 200), 设置 `sensor.snapshot()` 以捕捉由相机传感器输出的VGA分辨率的200x200中心像素。您可使用窗口来获得定制的分辨率。另外, 当你在更大分辨率下使用窗口时,实际上是进行数字缩放。 ``roi`` 是矩形区域元组 (x, y, w, h). 然而,你可以只传递 (w,h),而 ``roi`` 将会在图像中居中。 .. function:: sensor.set_gainceiling(gainceiling) 设置相机图像增益上限。2, 4, 8, 16, 32, 64, 128。 .. function:: sensor.set_contrast(constrast) 设置相机图像对比度。-3至+3。 .. function:: sensor.set_brightness(brightness) 设置相机图像亮度。-3至+3。 .. function:: sensor.set_saturation(saturation) 设置相机图像饱和度。-3至+3。 .. function:: sensor.set_quality(quality) 设置相机图像JPEG压缩质量。0-100。 .. note:: 是用于OV2640相机。 .. function:: sensor.set_colorbar(enable) 打开(True)或关闭(False)彩色模式。默认关闭。 .. function:: sensor.set_auto_gain(enable, [gain_db=-1, [gain_db_ceiling]]) ``enable`` 打开(True)或关闭(False)自动增益。默认打开。 ``value`` 强迫增益值。更多细节请参见摄像头数据表。 如果 ``enable`` 为False,则可以使用 ``gain_db`` 设置固定增益,单位为分贝。 如果 ``enable`` 为True,您可以使用``gain_db_ceiling``设置自动增益控制算法的最大增益上限,以分贝为单位。 .. note:: 若您想追踪颜色,则需关闭白平衡。 .. function:: sensor.get_gain_db() 以分贝(浮点数)返回当前摄像机增益值。 .. function:: sensor.set_auto_exposure(enable, [exposure_us]) ``enable`` 打开(True)或关闭(False)自动曝光。默认打开。 如果 ``enable`` 为False, 则可以用 ``exposure_us`` 设置一个固定的曝光时间(以微秒为单位)。 .. note:: 相机自动曝光算法对于调整曝光值的次数非常保守,通常会避免更改曝光值。 相反,他们改变增益值与改变照明有很大关系。 .. function:: sensor.get_exposure_us() 以微秒(int)返回当前相机的曝光值。 .. function:: sensor.set_auto_whitebal(enale, [rgb_gain_db]) ``enable`` 打开(True)或关闭(False)自动白平衡。默认打开。 如果 ``enable`` 为False,则可以用 ``rgb_gain_db`` 分别设置红色,绿色和蓝色通道的固定增益分贝。 .. note:: 若您想追踪颜色,则需关闭白平衡。 .. function:: sensor.get_rgb_gain_db() 返回当前摄像机红色,绿色和蓝色增益值以分贝((浮点型,浮点型,浮点型))表示的元组。 .. function:: sensor.set_hmirror(enable) 打开(True)或关闭(False)水平镜像模式。默认关闭。 .. function:: sensor.set_vflip(enable) 打开(True)或关闭(False)垂直翻转模式。默认关闭。 .. function:: sensor.set_lens_correction(enable, radi, coef) ``enable`` True为启用,False为禁用(布尔值)。 ``radi`` 像素的整数半径调整(int)。 ``coef`` 功率校正(int)。 .. function:: sensor.set_vsync_output(pin_object) 用 `pyb.Pin()` 创建 ``pin_object`` 。相机上的VSYNC信号将会在此引脚上生成,从而在另一个OpenMV Cam上实现FSIN, 从而同步相机图像流,以用于立体视觉应用。 .. function:: sensor.__write_reg(address, value) 在 ``address(int)`` 向相机寄存器中写入 ``value (int)`` 。 .. note:: 请参阅摄像头数据表以获得注册信息。 .. function:: sensor.__read_reg(address) 在 ``address`` (int)上读取摄像头数据表。 .. note:: 请参阅摄像头数据表以获得注册信息。 常量 --------- .. data:: sensor.BAYER RAW BAYER图象像素格式。 如果您尝试将帧大小设置得太大以至于无法放入帧缓冲区,则OpenMV Cam会将像素格式设置为BAYER, 以便您可以捕捉图像,但是不会有图像处理方法可用。 .. data:: sensor.GRAYSCALE GRAYSCALE像素模式(Y from YUV422)。每像素为8位、1字节。 我们所有的计算机视觉算法在灰度图像上比在RGB565图像上运行更快。 .. data:: sensor.RGB565 RGB565像素模式。每像素为16位、2字节。5位用于红色,6位用于绿色,5位用于蓝色。 我们所有的计算机视觉算法在RGB565图像上比在灰度图像上运行更慢。 .. data:: sensor.JPEG JPEG模式。只适用于OV2640相机。 .. data:: sensor.OV9650 `sensor.get_id()` 返回此以适用于OV9650 相机。 .. data:: sensor.OV2640 `sensor.get_id()` 返回此以适用于OV2640相机。 .. data:: sensor.OV7725 `sensor.get_id()` 返回此以适用于OV7725相机。 .. data:: sensor.MT9V034 `sensor.get_id()` 返回此适用于MT9V034相机。 .. data:: sensor.LEPTON `sensor.get_id()` 返回此适用于LEPTON1/2/3相机。 .. data:: sensor.QQCIF 88x72 分辨率的相机传感器。 .. data:: sensor.QCIF 176x144 分辨率的相机传感器。 .. data:: sensor.CIF 352x288 分辨率的相机传感器。 .. data:: sensor.QQSIF 88x60 分辨率的相机传感器。 .. data:: sensor.QSIF 176x120 分辨率的相机传感器。 .. data:: sensor.SIF 352x240 分辨率的相机传感器。 .. data:: sensor.QQQQVGA 40x30 分辨率的相机传感器。 .. data:: sensor.QQQVGA 80x60 分辨率的相机传感器。 .. data:: sensor.QQVGA 160x120 分辨率的相机传感器。 .. data:: sensor.QVGA 320x240 分辨率的相机传感器。 .. data:: sensor.VGA 640x480 分辨率的相机传感器。 只适用于OV2640相机或OpenMV Cam M7。 .. data:: sensor.HQQQVGA 60x40 分辨率的相机传感器。 .. data:: sensor.HQQVGA 120x80 分辨率的相机传感器。 .. data:: sensor.HQVGA 240x160 分辨率的相机传感器。 .. data:: sensor.B64x32 64x32 分辨率的相机传感器 (与 `image.find_displacement` 结合使用)。 用于 `image.find_displacement()` 和任何其他基于FFT的算法。 .. data:: sensor.B64x64 64x64 分辨率的相机传感器。 用于 ``image.find_displacement()`` 和任何其他基于FFT的算法。 .. data:: sensor.B128x64 128X64 分辨率的相机传感器。 用于 `image.find_displacement()` 和任何其他基于FFT的算法。 .. data:: sensor.B128x128 128X128 分辨率的相机传感器。 用于 `image.find_displacement()` 和任何其他基于FFT的算法。 .. data:: sensor.LCD 128x160 分辨率的相机传感器(用于lcd扩展板)。 .. data:: sensor.QQVGA2 128x160 分辨率的相机传感器(用于lcd扩展板)。 .. data:: sensor.WVGA 720x480 分辨率的相机传感器。 只适用于MT9V034相机。 .. data:: sensor.WVGA2 752x480 分辨率的相机传感器。 只适用于MT9V034相机。 .. data:: sensor.SVGA 800x600 分辨率的相机传感器。 只适用于OV2640相机。 .. data:: sensor.SXGA 1280x1024 分辨率的相机传感器。 只适用于OV2640相机。 .. data:: sensor.UXGA 1600x1200 分辨率的相机传感器。 只适用于OV2640相机。