前面是关于USB转TTL连接,后面是一些影像系统的事情:
做实验的是树莓派2B+(其实就是树莓派2B,他们就出了一个型号)
正面是这样的
这是他的基本配置:
一个 900MHz 四核 ARM Cortex-A7 CPU
1GB 内存
100 基以太网
4 个 USB 端口
40 个 GPIO 引脚
全HDMI端口
结合 3.5 毫米音频插孔和复合视频
相机接口 (CSI)
显示接口 (DSI)
微型 SD 卡插槽
VideoCore IV 3D 图形核心
26年才会不卖?而且写的是至少,博通真会玩
接口的图,感觉很漂亮
横放着的引脚图
其它类型的引脚图
左实际映射,右是芯片的引脚映射
通过GPIO,利用杜邦线连接树莓派的TX与RX【即图中GPIO14与15】
最边的两个脚,连着都是5V,然后是GND
也就是说 5V,5V,GND,TX,RX。
全网高清大图
TX连接树莓派的RX,RX连接树莓派的TX,VCC与GND正常连接,否则数据无法正常通讯。
这个如果看不懂,就自己了断吧
然后串口登录
树莓派默认账号:pi
树莓派默认密码:raspberry
这是我们的登录密码和账户。。。emmmm,我以为是自己的。
这就登录上来了
如果这里出现这个,是电压不够,因为我上面是USB转TTL上面的5V直接PI,后面就报错了。
Micro USB接电源,串口通信,USB接我的手机,USB网卡的作用
如果你接了电源就接三个就行,GND TX RX GND是基准电压
这是USB的网卡连接上了
我能被这帮人笑死
https://elinux.org/RPi_Serial_Connectio
这个是一个树莓派的WIKI,写的真好。
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
各个版本的原理图什么的,高清PDF,emmmmm,大家这个获取消息的方式,元谋人一样。。。
看看我们的主角
电源的原理图
看看引脚的电源和串口啥的,还有3V3
这是芯片的引脚吗?
这是HDMI的脚
文档的图绘制的真好
这里开始讲影像系统了,我其实很麻烦这个事情,其实计算机之初是算东西的,是真真正正的计算机,不知道为什么最近几年计算机视觉这股歪风这么强,忘了计算机本来的路。
虽然图形学也是计算,但是这种计算不会帮助我们的科技有着本质的发展。我们应该研究算法,高效的存储结构,强大的微分求解系统等。
这次新系统的更新,就是把ISP这块换成了开源的实现。
V2的相机
Raspberry Pi Camera Module 2 于 2016 年 4 月取代了原来的 Camera Module。
v2 Camera Module 有一个 Sony IMX219 8 兆像素传感器(与原始相机的 5 兆像素 OmniVision OV5647 传感器相比)。
还有个更贵的。。。买不起?
黑,粗,硬!
安装的装配图
这是几个相机得模组得比较,其实20快得500w摄像头性价比高
这个是以前的处理相机这块的应用包
这是新的
libcamera
是一个新的软件库,旨在直接从 Linux 操作系统支持复杂的相机系统。就 Raspberry Pi 而言,它使我们能够直接从运行在 ARM 处理器上的开源代码驱动相机系统。在 Broadcom GPU 上运行且用户根本无法访问的专有代码几乎完全被绕过。拍手手,你不给我看,我就不用你的,嘤嘤嘤!
超大声:
你听见我嘤嘤嘤没有!!!死聋子!!!
libcamera
向应用程序提供 C++ API,并在配置相机的级别工作,然后允许应用程序请求图像帧。这些图像缓冲区驻留在系统内存中,可以直接传递给静态图像编码器(例如 JPEG)或视频编码器(例如 h.264),尽管诸如编码图像或显示图像之类的辅助功能严格超出其libcamera
自身的范围.
为此,Raspberry Pi 提供了一小部分示例libcamera-apps
。这些是简单的应用程序,构建在之上libcamera
,主要旨在模拟构建在 Broadcom 专有 GPU 代码上的遗留堆栈的功能(一些用户会将这些遗留应用程序识别为raspstill
和raspivid
)。提供的应用程序是:
libcamera-hello一个简单的“hello world”应用程序,它启动相机预览流并将其显示在屏幕上。
libcamera-jpeg一个简单的应用程序,用于运行预览窗口然后捕获高分辨率静止图像。
libcamera-still一个更复杂的静态图像捕捉应用程序,它模拟了raspistill
.
libcamera-vid一个视频捕捉应用程序。
libcamera-raw直接从传感器捕获原始(未处理的拜耳)帧的基本应用程序。
libcamera-detect这个应用程序不是默认构建的,但如果用户在他们的 Pi 上安装了 TensorFlow Lite,就可以构建它。当检测到某些对象时,它会捕获 JPEG 图像。
Raspberry Pilibcamera-apps
不仅是命令行应用程序,可以轻松地从相机捕获图像和视频,它们也是用户如何创建自己的基于 libcamera 的应用程序的示例,该应用程序具有自定义功能以满足自己的要求。
一个识别的例子
https://github.com/raspberrypi/libcamera-apps
demo的位置
https://libcamera.org/
官网
libcamera 是适用于许多平台的开源相机堆栈,具有核心用户空间库,并支持 Linux 内核 API 和已经到位的驱动程序。
它旨在通过提供直观的 API 和将不受信任的供应商代码与开源核心分离的方法来控制嵌入式相机硬件的复杂性。
libcamera 旨在通过限制开发人员必须处理的复杂性来鼓励开发新的嵌入式相机应用程序。该界面是围绕现代嵌入式相机硬件的工作方式设计的。
这个框架现在来说只是支持这些平台
咸鱼150,啥板子啊,性价比还挺高
git clone https://git.libcamera.org/libcamera/libcamera.git
cd libcamera
meson build
ninja -C build install
ninja的构建
缺东西了
编译的话,哪有这么容易,找个黄道吉日,老夫沐浴焚香再来安装。(PS:众所周知,配置环境最难)
我今年要申请一下
这是其中的一个任务
又一个
https://libcamera.org/docs.html
libcamera 相机的文档
目前我的一堆做实验的东西
在libcamera
内核之下,Raspberry Pi 提供了一个自定义管道处理程序,该层libcamera
用于驱动 Raspberry Pi 本身上的传感器和 ISP(图像信号处理器)。其中的一部分是众所周知的控制算法的集合,或者说是IPA(图像处理算法)libcamera
,例如 AEC/AGC(自动曝光/增益控制)、AWB(自动白平衡)、ALSC(自动镜头阴影校正) ) 等等。
所有这些代码都是开源的,现在可以在 Pi 的 ARM 内核上运行。GPU 上只有一层非常薄的代码,用于将 Raspberry Pi 自己的控制参数转换为 Broadcom ISP 的寄存器写入。
Raspberry Pi 的实现libcamera
不仅支持三种标准的 Raspberry Pi 摄像头(OV5647 或 V1 摄像头、IMX219 或 V2 摄像头以及 IMX477 或 HQ 摄像头),还支持 IMX290、IMX327、OV9281、IMX378 等第三方传感器。Raspberry Pi 热衷于与希望看到其传感器由libcamera
.
帅啊,我的V1摄像头也支持了。
此外,Raspberry Pi为这些传感器中的每一个都提供了一个调整文件,可以对其进行编辑以更改 Pi 硬件对从图像传感器接收到的原始图像执行的处理,包括颜色处理、噪声抑制量或控制算法的行为。
关于这个适配层的说明:
https://datasheets.raspberrypi.com/camera/raspberry-pi-camera-guide.pdf
有专门一个文档说这个
这是我们的处理框图
算法使用的框架图
看文档啊,一开始是闭源的一些驱动:
https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2021-05-28/
这些是以前版本的ZIP文件
https://www.raspberrypi.com/news/raspberry-pi-os-debian-bullseye/
这个全新的影像系统是2021年11月8日发布的,Bullseye
是玩具总动员伍迪的马,真难看啊
文章里面也重点的说了这个问题
https://www.raspberrypi.com/software/operating-systems/
在这里下载
全线更新了
https://forums.raspberrypi.com/viewtopic.php?f=43&t=322076
这是关于这个影像系统的更改
我们鼓励用户转向 Bullseye,因为libcamera-apps带来了许多好处:
它们提供了改进的图像质量,此外,用户可以根据自己的喜好进行调整。
我们可以修复错误并开发新功能——所有这些在专有的 Broadcom 堆栈中都是非常困难的。例如,我们很高兴在不久的将来计划自动对焦功能。
因为它是开源的,第三方也可以修复问题并添加新功能——我们很高兴在Github 存储库中考虑拉取请求。(对内核或libcamera本身的贡献需要以通常的方式上传。)
https://github.com/raspberrypi/libcamera-apps
添加对新相机和第三方相机的支持要容易得多 - 已经支持了一些(包括 Sony imx290、imx327和imx378以及 Omnivision ov9281)。
我们热衷于与供应商合作,更多供应商已经在筹备中。
这些应用程序的设计易于理解,以便用户可以自定义它们以满足自己的要求。
我们展示了如何使用强大的第三方图像处理库来增强相机应用程序,例如OpenCV和TensorFlow Lite。
我们提供了一个图像后处理框架,其中包括运动检测、HDR(高动态范围)成像、面部和物体检测、姿势估计和图像分割的示例。如果用户愿意贡献更多,我们会很高兴!
64 位版本的 Raspberry Pi OS 完全支持它。
尽管如此,libcamera和 Raspberry Pi 的libcamera-apps 仍在开发中。继续使用较旧的操作系统版本并继续使用旧版相机系统的原因包括:
目前还没有 Python 接口。旧的Picamera的替代品,富有想象力地命名为Picamera2,正在开发中。这也将更直接地与已建立的 Python 库集成,以访问诸如窗口和图形功能之类的东西。Picamera2将由 Raspberry Pi 开发(与Picamera本身不同,它实际上是第三方代码),这将有助于支持和持续的未来开发。
目前在libcamera 中不支持立体成像,但它在我们未来的开发计划中。
希望同时使用 X Windows 的低功耗 Raspberry Pis(例如 Zero)用户可能会通过传统堆栈获得更好的相机性能,因为这在 GPU 上做的工作更多,而在 ARM 内核上做的工作更少(这可能会很困难)在任何情况下都使用 X Windows)。请注意,当 X Windows 未运行或不需要实时视频窗口时,libcamera-apps在这些系统上仍能正常工作。
看大家都在吐槽,没有Python的接口,这,看来C++/C这个东西确实是一种过滤器。
picamera源码阅读.1(安装文件详解),我也写过哦~
我们看看树莓派给的demo,写了啥,夸了这么久。
第一个我就不认识了,说实话,这个C++真的很叼,值得花时间去学。
如果,我说如果,C++能这么骚,我也会不舍昼夜的学
但是大多数的时候,我看C++都是这个心情,真的是太形象了
chrono是C++11新加入的方便时间日期操作的标准库,它既是相应的头文件名称,也是std命名空间下的一个子命名空间,所有时间日期相关定义均在std::chrono命名空间下。通过这个新的标准库,可以非常方便进行时间日期相关操作。
chrono库主要包含了三种类型:duration, time_point 和 clock。
看了一圈,感觉先看看API是个正经活:
https://libcamera.org/api-html/index.html#api
libcamera 充当应用程序和相机硬件之间的中间件。它为一个无法解决的问题提供了解决方案:协调需要在不同系统上运行而无需处理特定于设备的细节的应用程序,以及具有多种功能、局限性和架构变化的相机硬件。
为此,它创建了一个抽象的相机模型,对应用程序隐藏了相机硬件。该模型旨在在通用性、取悦通用应用程序和灵活性之间取得适当的平衡,以将最具体的硬件功能暴露给最苛刻的应用程序。
在 libcamera 中,相机被定义为可以从相机传感器连续捕获帧并将它们存储在内存中的设备。如果设备支持并且应用程序需要,相机可以将每个捕获的帧存储在多个副本中,可能以不同的格式和大小。相机的这些内存输出中的每一个都称为流。
一个相机包含单个图像源,而单独的相机实例与不同的图像源相关。例如,一部包含前后图像传感器的手机将使用两个摄像头建模,每个传感器一个。当可以从同一个图像源产生多个流时,所有这些流都保证是同一台相机的一部分。
虽然不共享图像源,但单独的摄像机可以共享其他系统资源,例如 ISP。由于这个原因,相机实例可能不是完全独立的,在这种情况下可能会应用使用限制。例如,带有前置和后置摄像头的手机可能不允许同时使用两个摄像头。
相机模型定义了一个隐式管道,其输入是相机传感器,其输出是流。沿着管道,由相机传感器生成的帧由相机转换为适合应用程序的格式,图像处理可提高捕获帧的质量。相机公开了一组控件,应用程序可以使用这些控件来手动控制处理步骤。这种高级相机模型是所有相机必须符合的最低基线。
其实哇,这个东西有点像一个开源的ISP,这个东西小米,OPPO啥的在做芯片,其实和这个东西差不多。
等等,等等,靓仔等等:
你不对这;
感兴趣?
但凡一个C++的库,到处都是这东西。
https://www.doxygen.nl/index.html
追求?能有啥追求,毕竟连个mian入口都找不到,我的人生还有什么乐趣
对于程序,你先关注,实现和接口;
.h文件代表模块对外的接口最小信息,面向模块使用者
.c文件代表模块的实现代码,面向的是开发者
捕捉这块,使用的是V4L2,至于42是啥,你换成英文就知道了,for,to。
https://work-blog.readthedocs.io/en/latest/v4l2%20intro.html
抱歉,写到自己不想写了,源码这段明天读。
联系客服