用PYNQ做一个hdmi采集卡(一) 读取HDMI信号

  • Post author:
  • Post category:其他


switch底座的hdmi接口不能直接插电脑,有点头秃,然后发现PYNQ有能读HDMI的口,特想有么的可能把switch的图像读出来,慢慢写慢慢写。



简单的HDMI读取

首先来看看PYNQ-Z2对HDMI的支持功能吧



官方网站


视频子包包含了从HDMI-In端口读取、写入到HDMI-Out端口、传输数据、设置中断和操作视频帧的驱动程序的集合。

视频硬件子系统由一个HDMI-In块、一个HDMI-Out块和一个视频DMA组成。HDMI-In和HDMI-Out块也支持颜色空间转换,例如从YCrCb到RGB和返回,并改变每个像素的通道数量。

视频数据可以从HDMI-In捕获,并使用视频DMA来stream到DRAM,或从DRAM stream到HDMI-Out。


HDMI-IN


在这里插入图片描述


HDMI-OUT


在这里插入图片描述

对于我目前而言,如何读入HDMI 是需要关心的



例程

看一下例程吧

from pynq import Overlay
from pynq.lib.video import *

base = Overlay('base.bit')
### 初始化一个hdmi的实例
hdmi_in = base.video.hdmi_in
### hdmi_out = base.video.hdmi_out

# 进行配置,默认是24bit的BGR
hdmi_in.configure()

# 执行
hdmi_in.start()

# 读取输入的视频流
frame = hdmi_in.readframe()

把它放进jupyter notebook看一眼吧

在这里插入图片描述

emmm看来必须插着设备才能进行配置(好像就应该是这样喂!!!)

我把手机接了一根HDMI线输出了出来(SWITCH那个大盒子太麻烦了,等弄好了再试SWITCH)

ok!

在这里插入图片描述

现在我们来读一下输入的视频流

在这里插入图片描述

并用PIL来显示它出来看看

from PIL import Image
Image.fromarray((frame))

在这里插入图片描述

emmm好像有点问题哈,我手机的颜色明明是

在这里插入图片描述

看了一下粉色的RGB是ffd6da,也就是[255,214,218]

那个香草色的则是dad6ff,也就是

[218,214,255]

联想一下刚才说的输出是

24bit的BGR

果然是蓝色和红色通道弄反了么?

在这里插入图片描述

从维度的len我们可以看出来,frame的第一个维度是height,第二个维度是width,第三个维度则是RGB顺序,如此这般我们只需要让他的第三个维度逆序一下就可以了嘛

我们可以看到例程里面给了bgr2rgb的示例

colorspace_in = base.video.hdmi_in.color_convert
colorspace_out = base.video.hdmi_out.color_convert

bgr2rgb = [0, 0, 1,
           0, 1, 0, 
           1, 0, 0,
           0, 0, 0]

colorspace_in.colorspace = bgr2rgb
colorspace_out.colorspace = bgr2rgb

colorspace_in.colorspace

ok可以了

在这里插入图片描述



hdmi 相关函数的分析

还是

官方网站


前面实例化之后,第一步是配置configure

hdmi_in.configure()

而且我们发现输出的图像是720p的,有没有可能从这里考虑一下嘞?

在这里插入图片描述

好像不太一样,又找了找发现应该是Mode这个参数。
在这里插入图片描述

为了配合switch,我们给它改成1920×1080和30fps

hdmi_in.mode.width = 1920
hdmi_in.mode.height = 1080
hdmi_in.mode.fps = 30



未完待续预告

传递视频的思路是在pynq上运行一个服务器端,然后PC上运行一个客户端,从服务器端获取图像。

下一篇应该是如何搭建服务端了


广告时间



FPGA入门



FPGA实战训练精粹



Xilinx FPGA权威设计指南:基于Vivado 2018集成开发环境



Xilinx Zynq7020



FPGA设计技巧与案例开发详解(第2版)



版权声明:本文为kzz6991原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。