<font style="line-height: 40px;" color="red"><strong>概述</strong></font>
此项目解释了如何在FPGA上使用resizer IP来调整图像的大小。其中对比了两种图像大小调整的解决方案的运算速度,其中之一为使用Python Image Library通过软件算法实现图像大小调整,另一种使用Xilinx xfopencv library实现了在FPGA上硬件加速的图像大小调整。
<font style="line-height: 40px;" color="red"><strong>初始化</strong></font>
1. 首先在SD卡内配置Pynq-Z2最新镜像PYNQ image v2.5并烧录在其中
2. 根据pynq.io上的官方指南配置环境
(https://pynq.readthedocs.io/en/latest/getting_started/pynq_z2_setup.html)
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85607-1.jp…; alt=""></center><br>
根据数字编号依次连接并点亮板卡,最后在板卡出现BTN0~BTN3同时点亮闪烁一次后为开机完成状态。
3. 在笔记本电脑上配置网络,使得无线网卡的上网功能与Pynq-Z2连接的以太网网口共享,以做到Pynq-Z2同时能够上网。
4. 借用Xshell或者开源软件PuTTY对于Pynq-Z2端口进行SSH获得其新ip口,此时其一般会被重定向至192.168.137.X。此时在浏览器内登录此ip即可通过Jupyter Notebook与Pynq-Z2板卡通信。
5. 在Jupyter Notebook中新建terminal并ping 182.61.200.6验证与百度的连接是否正常上述验证完成后即为Pynq-Z2板卡与网络的基础通信功能与配置完成。
<font style="line-height: 40px;" color="red"><strong>快速开始</strong></font>
在Jupyter Notebook的Terminal中输入以下指令:
sudo pip3 install --upgrade git+
https://github.com/xilinx/pynq-helloworld.git
更新在Pynq-Z2内所有Packages并从github下载本次项目的代码。
(更新需要耐心等待一定时间。)
(项目Github文件及其详细代码请点击查看原文)
<font style="line-height: 40px;" color="red"><strong>案例测试</strong></font>
1. 最终会在Files文件夹下生成名为helloworld/的文件夹,点开此文件夹可以看到两个Jupyter Notebook文件(.ipynb)。
2. 其中resizer_PS.ipynb的软件方案采用了Python内建的Python Imaging Library通过软件上的算法实现完成对于一张640*360的sample图像压缩为原图像的四分之一大小(320*180)。此软件方案通过PIL库加载与重置图像的大小,用numpy库存储图像的像素矩阵,用IPython.display在Jupyter notebook中显示图像。
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85608-2.jp…; alt=""></center><br>
3. 而resizer_PL.ipynb的FPGA硬件方案并没有直接在ARM核中单纯采用算法借用Python本地的内存进行运算后直接返回。而是先将图片数据通过ARM核从SD卡中读入,再以数据流的形式通过Python的本地内存的DRAM形式传入共享的物理内存中。
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85609-3.pn…; alt=""></center>
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85610-4.pn…; alt=""></center><br>
接下来通过AXI的内部连接将PS层面的数据传入PL层的可编辑逻辑单元,通过 Xilinx xfopencv library在DMA与Resize IP之间的运算最后将数据传回ARM核至SD卡。
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85611-5.pn…; alt=""></center>
<center><img width="600" src="http://xilinx.eetrend.com/files/2019-12/wen_zhang_/100046325-85612-6.jp…; alt=""></center><br>
最后,在缩小图片的演示最后我们可以看到PS方案得到的最快单次图像处理为24.1ms,而在PL方案中最快单次图像处理仅仅为8.95ms,在此实际图像案例上处理图像的时间效率上缩小了接近2.7倍。如果放至更多张更高像素的图片,相信此图像处理方案会有着较大优势。
本文转自:<a href="https://mp.weixin.qq.com/s/VMb_WVgih-zLGmP0_es0Ew">PYNQ开源社区</a>