ESP32人脸识别(九)--摄像头相干官方问答

打印 上一主题 下一主题

主题 655|帖子 655|积分 1965

摄像头应用方案

[English]

ESP32 系列芯片支持哪种范例的摄像头?

   请参考 ESP32 系列支持的摄像头型号。
  
摄像头输出图像都有什么格式?

   图像格式主要由摄像头决定,如果某个摄像头支持多个图像格式,如 RGB565、RGB888、YUV422、JPEG 等,须要通过设置摄像头的寄存器来选择输出格式。
  
摄像头支持哪些参数调整?

   图像数据传输速度 (PCLK)、摄像头输出格式、分辨率、输出图像大小、白平衡、GAMMA 校正等摄像头自带的图像模式参数调整。
  
摄像头中 MCLK 和 PCLK 的关系是什么,两者有何区别?

   

  • MCLK 是整个摄像头系统的主时钟,控制着整个系统的同步和频率。在摄像头芯片内部,MCLK 用于控制各个模块的时序,比方预处置惩罚器、数字信号处置惩罚器、像素数组和数据输出接口等。通常情况下,MCLK 的频率由主控芯片的系统时钟和摄像头内部的分频器共同决定,常见的频率有 6 MHz、12 MHz、24 MHz、48 MHz 等。
  • PCLK 是用来控制像素输出的时钟信号。在摄像头输出图像时,每个像素的输出都须要一个时序信号,PCLK 就是用来控制这个时序的信号。详细来说,PCLK 的上升沿表示一个像素的数据已经输出,下降沿表示下一个像素的数据即将输出,这样就形成了一个像素数据的序列。
  • MCLK 在摄像头内颠末倍频/分频(根据摄像头设置决定)后得到 PCLK。通常情况下,PCLK 的频率是 MCLK 的一半或一半的整数倍,比方在 24 MHz 的 MCLK 下,PCLK 的频率可以为 12 MHz、6 MHz 等。
  
摄像头的 PCLK 是不是越高越好?

   

  • 理论上,PCLK 速度越高,数据传输越快,但实际使用中,PCLK 越高也意味着对芯片的处置惩罚速度要求越高。
  • 当前 ESP32 和 ESP32-S2 芯片并口通信是通过 I2S 接口实现的,过高的 PCLK 会导致并口数据无法同步,出现图像抖动乃至花屏的现象。
  • ESP32-S3 使用独立的 LCD—CAM 接口,可以支持更高的 PCLK 频率。
     

  • ESP32 的 PCLK 上限为 8 MHz。
  • ESP32-S2 的 PCLK 上限为 32 MHz。
  • ESP32-S3 的 PCLK 上限为 40 MHz。
   
ESP32 系列芯片支持 MIPI 接口吗?

   

  • ESP32、ESP32-S2 和 ESP32-S3 均不支持,后续的芯片会支持。
  • 当前 ESP32 系列的芯片支持的摄像头接口有 DVP、SPI、USB。
  
ESP32 系列芯片支持 USB2.0 接口吗?

   

  • ESP32 和 ESP32-S2 均不支持,后续的芯片会支持。
  
摄像头中 YUV/RGB 的传输速度为何会比 JPEG 慢?

   

  • 因为 YUV/RGB 数据量比 JPEG 的数据量大。
  • 比方:对于 320 × 240 的屏幕尺寸,YUV422 的输出为 153.6 K,而 JPEG 压缩后仅需约 10 K。
  
摄像头应用中,有哪些影响帧率的因素?

   在摄像头应用中,影响帧率的因素主要包罗:
  

  • 分辨率:分辨率越高,每帧须要采集和传输的像素数据就越多,因此帧率就会下降。
  • 图像格式:常见的图像格式包罗 RGB565、RGB888、YUV422、JPEG 等,不同的图像格式在图像质量和数据压缩方面存在差异,这些差异会直接影响帧率。
  • 图像处置惩罚:如果须要对每帧图像进行处置惩罚,如降噪、增强、压缩等操作,会占用更多的处置惩罚时间,降低帧率。
  • 传输带宽:传输带宽越窄,每帧须要传输的数据就越少,因此帧率就会下降。
  • 处置惩罚器性能:处置惩罚器性能越低,每帧须要处置惩罚的数据量就越难以蒙受,因此帧率就会下降。
  因此,在摄像头应用中,须要根据详细的应用场景和需求,权衡这些因素,以达到最佳的帧率和图像质量。
  
摄像头运行失败怎样排查?

   

  • 无法识别摄像头型号:
     

  • 查抄管脚是否对应精确,重点关注 XCLK、SIOC、SIOD。
  • XCLK 输入的时钟频率太低或摄像头供电不正常,导致摄像头无法正常运行。
  • SIOC 和 SIOD 上挂载太多设备,导致轮询读到率先返回的地址 ID 不是摄像头而是其他设备。此情况建议固定摄像头 ID,以去除轮询步骤。
   

  • 摄像头识别到了型号,没有图像显示:
     

  • 查抄摄像头数据管脚是否有信号,MCLK 是否正常输入。
  • 摄像头寄存器参数设置精确。
   

  • 摄像头图像显示不正常:
     

  • 查抄代码,查看输出格式是 RGB、YUV 还是 JPEG,是否符合吸收端须要的格式。
  • 尝试降低 PCLK 频率。
   
ESP32 支持传输视频流吗?

   

  • 视频流的传输操作分为二进制传输和视频流编解码。
     

  • 二进制传输:ESP32 支持二进制传输,此处是否支持取决于传输的网络带宽。现在 ESP32 TCP 的带宽为 20 MB/s,请参考 Wi-Fi 测试数据。
  • 视频流编解码:ESP32 暂不支持视频流编解码。
   
ESP-EYE 的出厂固件在那边?

   请参考 ESP-EYE 的出厂固件。
  
Camera 方案相干的示例存放在那边?

   

  • 请参考 ESP-WHO。
  • 请参考 esp-iot-solution。
  • 请参考 esp-dev-kits。
  
ESP32 支持 12 位 DVP 接口的摄像头吗?

   不支持,现在驱动只支持 8 位的 DVP 接口。
  
ESP32 是否支持使用不带 JEPG 编码的摄像头来获取 JPEG 图像?

   如果摄像头本身不支持 JPEG 编码,可以参考我们提供的 esp-iot-solution/examples/camera/pic_server 例程,在 ESP32 设备上实现软件 JPEG 编码。该方法通过软件对 YUV422 或 RGB565 数据进行编码,得到 JPEG 图像。
  
ESP-EYE 上的 200 万像素的 OV2640 摄像头是否可以改成只输出 30 万像素的图片?

   可以, 在初始化时通过设置 frame_size 的值来指定摄像头要输出的分辨率大小。
  
ESP32 支持全局快门的摄像头吗?

   支持,现在支持的摄像头型号为 SC031GS、SC132GS,其他摄像头须要额外增加驱动支持。
  
ESP32 使用 DVP 摄像头通过 RTSP 传输 1080P 的视频可以达到多少帧?

   暂未测试 1080P 的情况。现在 720P 可以达到 20 FPS.
  
ESP32-S3 只支持 MJPEG 编码,但在实现 rtsp/rtmp 推流的时候须要支持 H264/H265 格式的编码,请问是否有支持 H264/H265 格式的编码?

   现在 ESP32-S3 不支持硬件加速的 H.264/H.265 编码。但是,可以使用软件编码器,比方 FFmpeg 库和 x264/x265 库,将从 OV2640 采集到的 MJPEG 帧转换为 H.264/H.265 编码帧。转换的性能取决于处置惩罚器性能,可能会影响帧率。
  
ESP32/ESP32-S3 是否有适配支持广角的摄像头?

   有适配,可以参考 BF3005、OV5640 这两款摄像头。
  
ESP32-S2 从上电到显示摄像头图像须要 5 秒,是否有改善的空间?

   有改善的空间,参考如下:
  

  • 尝试去掉 esp_camera_init() 里的一些延时函数。
  • 更改 menuconfig > component config > camera configuration 里的 sccb 的时钟频率为 400000。
  
ESP32 可以直接给 GC0308 摄像头提供 24 MHz 频率吗?

   恐怕不行。经测试,ESP32 提供给 GC0308 的 XCLK 最大的稳定测试值为 20 MHz。
  
ESP32/ESP32-S3 是否支持 MMS 串流协议?

   ESP32 和 ESP32-S3 本身并不直接支持 MMS 协议。MMS (Microsoft Media Server) 是一种由微软开发的流媒体传输协议,主要用于 Windows Media Player 的网络流媒体播放。ESP32 和 ESP32-S3 支持的流媒体协议有 RTSP 和 SIP。如果须要将 ESP32 或 ESP32-S3 用于支持 MMS 协议的场景,可以思量使用支持 MMS 协议的中心件或转换器。
  
使用 ESP32-S3 调试 GC2145 摄像头时,发现支持的最大分辨率为 1024x768,若是调至更大的分辨率,如 1280x720,会提示 cam_hal: EV-EOF-OVF 错误,有什么办理方法?

   这种情况下,须要降低 GC2145 的 PCLK。可以尝试设置更小的 XCLK,以及调试该摄像头的 PLL 时钟系数。
  
ESP32-S3 是否支持 GB28181 协议?

   ESP32-S3 本身不直接支持 GB28181 协议,但可以通过将 ESP32-S3 与外部电路和软件结合来实现该协议的支持。因为 GB28181 是一种视频监控设备之间的通信协议,可以使用 ESP32-S3 的网络功能和外部电路,比方视频编码器、音频编解码器和传感器,来实现 GB28181 的功能。同时须要进行相干的软件开发,以实现 GB28181 协议的解析和数据传输。
  
ESP32/ESP32-S2/ESP32-S3 是否有通过摄像头识别二维码的参考?

   有,可以参考 ESP-WHO 里的 code recognition。
  
想为 OV5640 传感器添加 SD 卡接口和摄像头接口,但发现 ESP32 中不同外设的一些管脚存在辩论,请提供摄像头接口和 SD 卡接口的管脚。

   ESP-WROVER-KIT 开发板 中有 Camera 和 SD 卡电路,可以参考 ESP-WROVER-KIT V3 入门指南的管脚设置。
  
当前适配的摄像头传感器没有适合我的需求的,能否增加一个指定型号的摄像头驱动?

   可以。请先通过 技术支持 渠道与乐鑫的工程师确认需求,选定摄像头传感器的型号后,我们将为您提供对应的摄像头传感器的驱动程序。
  
怎样增加一个自定义的分辨率?

   假设您须要的分辨率为 640x240,可以通过下述两种方法使用自定义分辨率: - 设置 sensor 工作在典范的分辨率 640x480 上,然后只使用其中的上半部门数据 (640x240)。 - 在 esp32-camera/driver/include/sensor.h 中增加标识 FRAMESIZE_640*240,然后在 esp32-camera/driver/sensor.c 中增加该分辨率的长度与宽度的定义 {640, 240,ASPECT_RATIO_16X9}。这种方式须要 sensor 的驱动支持自定义分辨率才能正常工作。
  
怎样修改摄像头传感器的寄存器设置?

   假设您须要更改 OV5640 传感器的寄存器设置,可以通过下述两种方法实现: - 直接在 esp32-camera/sensors/ov5640.c 的 reset() 函数中使用 write_reg() 设置相干的寄存器。 - 在应用层通过 set_reg() 函数设置相干的寄存器:
  1. //初始化摄像头
  2. esp_err_t ret = esp_camera_init(&camera_config);
  3. sensor_t *s = esp_camera_sensor_get();
  4. s->set_reg(s, 0xFFFA, 0xFF, 0xA1);
复制代码

esp32-camera 中触发 “cam_hal: EV-VSYNC-OVF” 是什么原因?

   这是传感器触发的帧同步信号过快导致的题目。可以按照下面的步骤进行排查: - 运行 esp-iot-solution/examples/camera/pic_server 示例。如果该示例可以或许正常运行,则阐明该题目不是硬件题目。 - 查抄初始化传感器时指定的 XCLK 和分辨率的大小。分辨率变小或是 XCLK 变大,均可能导致传感器触发的帧同步信号过快。请注意,传感器使用的 XCLK 应该和当前指定的分辨率大小匹配。
  
基于 ESP32-S3 的 Camera 应用出现如下警告日记,是什么原因?

  
  1. W (7232) cam_haL:FB-OVF
  2. W (7242) cam_haL:FB-OVF
  3. W (7492) cam_haL:FB-OVF
  4. W (7512) cam_haL:FB-OVF
  5. W (7762) cam_haL:FB-OVF
  6. W (7772) cam_haL:FB-OVF
  7. W (8022) cam_haL:FB-OVF
  8. W (8042) cam_haL:FB-OVF
复制代码
如上警告日记代表帧 buffer 溢出,可能是由于帧率太快导致,可以尝试降低 XCLK(注意 ESP32S3 的 XCLK 默认从 80 MHz 的时钟上分频得到,因此 XCLK 的大小必须可以被 80 MHz 整除)。 特殊地,如果 sensor 在 JPEG 模式工作,可以尝试在 menuconfig 中增大 Custom JPEG mode frame size (bytes) 选项的值来增大 jpeg recv buffer 的大小。
  
ESP32-Camera 的两种 capture 模式的区别是什么?

   Camera sensor 在初始化后将图像数据推送到 ESP32 的吸收器上。
  

  • 当设置的吸收模式为 CAMERA_GRAB_WHEN_EMPTY 时,只要有空闲的 frame_buffer,背景的驱动程序就将图像数据写入到 frame_buffer 中。当所有的 frame_buffer 用尽时,Camera sensor 推送的新的图像数据将因为没有可用的 frame_buffer 而被迫地抛弃。
  • 当设置的吸收模式为 CAMERA_GRAB_LATEST 时,应用层能获取的 frame_buffer 的个数是 fb_count - 1,这是因为背景的驱动程序会占用一个 frame_buffer,而且尝试革新最新的数据到这个 frame_buffer 中。
  注意,拍摄的行为并不是发生在调用 “esp_camera_fb_get” 时。拍摄的动作是一连进行的,我们只能控制背景使用的 frame_buffer 来获取新的数据,因此如果想要立即获取一个新的图像,可以尝试实行下面的代码:
  1. //向后台驱动程序返回一个 frame_buffer
  2. esp_err_t ret = esp_camera_fb_return(esp_camera_fb_get());
  3. //后台程序自动将新的图像数据刷新到 frame_buffer,然后应用层可以获取到 frame_buffer 中的数据
  4. fb = esp_camera_fb_get();
复制代码

基于 esp32-camera SDK 怎样实现跳帧?

   可使用 esp_camera_fb_return(esp_camera_fb_get()); 舍弃当前帧,即跳过当前获取的旧帧。
  
摄像头应用方案 - - — ESP-FAQ latest 文档

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表