邂逅SoC——在de1-soc开发板搭建Ubuntu图形操作系统

例程:用SimpleCV实现人脸捕获

本例程在DE1-SoC开发板上运行Ubuntu桌面操作系统并安装SimpleCV,通过编写简单的python代码,找到并圈出图像中含人脸特征的位置。

小序:

上周拿到了de1-soc的板子,跟着一篇用simplecv实现人脸捕获的帖子跑了一遍例程。然而帖子年代已久,按他的步骤走,已经有一些地方会出小问题。照着他的思路,我断断续续调了半个星期,终于呈现出结果。

在这里我把步骤详细地罗列出来,希望能对同样刚刚接触这块板子地新手有些帮助,同时给自己一个总结的机会。

废话少说,正文如下:

使用工具:

PuTTY

pscp

win32diskImager

一、准备工作

1. 下载ubuntu 16.04镜像

原帖使用的是3.12Linux kernel的ubuntu镜像。我把这个镜像烧到sd卡开机,在putty上无法正常显示。所以我选择了新的4.5kernel的ubuntu镜像。

下载地址

http://download.terasic.com/downloads/cd-rom/de1-soc/linux_BSP/de1soc_ubuntu_1604.zip

2. 向SD卡写入Ubuntu操作系统

打开win32diskImager,选择镜像和设备后,点击写入,等待烧写完成。

例程过程中可能会遇到意料之外的问题,如果无法配置会原来的状态,这时需要重新对SD卡烧写。win+R运行diskpart工具,先用disk list指令找到sd卡(例如编号是disk 1),用select disk 1指令选中,再用clean指令清空sd卡。打开设备管理器-->磁盘管理,选中sd卡,右键重新分区(使用FAT32格式)。完成后即可用win32diskImager工具重新烧写。

3. 下载安装usb-串口驱动

下载地址

http://www.usb-drivers.org/wp-content/uploads/2014/12/CDM-2.08.28-WHQL-Certified1.zip

打开资源管理器找到COM端口号,在putty中选择此对应端口,连接方式选择Serial并设置速率为115200,点击保存。我们使用type A to Mini-B usb数据线和PuTTY.exe进行PC和开发板的通信,具体步骤在后面会详细阐述。

4. 开机准备。

确保开发板在断电的状态下,插入SD卡。

查阅用户手册,我们得知:从sd卡启动linux系统时,启动开关0至4位拨至00000

接入type A to Mini-B usb数据线,打开putty.exe,选中之前配置好的参数,点击open,观察到putty窗口打开。这时候窗口没有内容,下一步我们准备上电开机。

二、进入Ubuntu操作系统并登陆远程桌面

1. 开发板上电,观察到系统开始启动

2. 提示登陆。使用默认的用户名和密码

用户名:root

密码:terasic

3. 进入图形界面

由于我身边没有VGA接口的显示器,这里我们用远程桌面登陆。

我们在ubuntu中安装xrdp,并使用windows自带的远程桌面连接。

首先输入指令,更新列表

apt-get update

更新完成。输入以下指令,安装xrdp

apt-get install xrdp

等待安装完毕,输入指令ifconfig,查看IP地址(eth0 inet addr后192.168.1.151是此时我的开发板的ip地址)

win+R运行mstsc,打开远程桌面连接。输入ubuntu系统的ip地址以进行连接

进入xrdp登陆界面,输入用户名root和密码terasic登陆

可以看到成功进入了Ubuntu系统桌面

关闭远程桌面连接。接下来我们开始搭建python开发环境。

三、安装SimpleCV,运行人脸捕获例程

1. 输入指令,等待下载和安装,可能需要20-30分钟

安装python支持包,这些程序具体每个有什么用,可以自己去了解,这里就不再赘述。

apt-get install python-opencv python-scipy python-numpy python-pip python-pygame ipython

2. 本地下载SimpleCV安装包

原帖用pip指令从github下载。大概是墙的原因,下载速度只有20k/s左右,而且在下载即将结束时大概率报错。

在最初进行到这里的时候我不知道是因为这个问题,而是纠结于修改source.list, dns和配置静态IP,所以走了很多弯路。

最后用梯子满带宽把.zip包下到PC机,再上传给开发板安装,完美解决问题。

zip包下载地址:

https://github.com/ingenuitas/SimpleCV/zipball/master

3. 将本地的simplecv安装包上传给开发板。

这一步首先是修改sshd_config文件,否则用root用户进行上传时,会报错access denied。

在putty中输入指令,打开配置文件

vi /etc/ssh/sshd_config

找到# Authentication:这段

将PermitRootLogin without passwd改为PermitRootLogin yes,保存并退出。输入指令reboot重启系统,以使更改生效。

4. PC机向开发板上传文件。

开机root登陆后,因为DHCP分配动态地址,所以我们再次输入指令ifconfig查看新IP地址。记住新ip地址后,首先在PC上将pscp.exe放在C:/user/system32/目录下。然后按下win+r,运行cmd。输入指令:

pscp想要上传的文件root@IP地址:/root/

5. 安装SimpleCV

传输完成后,返回putty可以看到simplecv已被上传到/root目录下

输入指令开始安装

pip install --cacahe-dir . 文件名

6. 安装完成,创建文件命名为lena.py,写入代码如下:

fromSimpleCVimportImage

lena_img = Image("lena.jpg")

faces = lena_img.findHaarFeatures('face')

iffaces:

forfaceinfaces:

print"Face at:"+str(face.coordinates())

face.draw()

else:

print"No faces detected."

lena_img.save("lena_face.jpg")

lena_img.show()

input(“Press Enter:”)

准备有清晰人脸图像的.jpg格式图片文件,把.py文件和.jpg图片从PC机上传至Ubuntu。

7. 登陆远程桌面,ctrl+alt+t打开终端

在lena.py和lena.jpg的目录下,输入命令

python lena.py

观察到结果如下:

小结:

上次用linux还是在大二用vcs、verdi跑verilog的时候。这次跑这个例程,时间基本上都花在捣鼓linux上了。

我用pip install simplecv装SimpleCV的正式版,结果卡在原帖子给的代码faces = lena_img.findHaarFeatures('face')上,好像是因为.findHaarFeatures()这里不被支持。而帖子给出的simplecv版本可以完美运行。

使用指令pip install https://github.com/ingenuitas/SimpleCV/zipball/master从GitHub下载时,只有20k/s的速度,而且极大几率在下载即将结束时报错。我用梯子把.zip下载到pc,上传到开发板安装,解决问题。

整个例程并没有用到FPGA相关的东西。在用DE1-SoC跑之前,我先在虚拟机里把例程跑通了一遍。相比之下,这块板子的ARM Cortex-A9要逊色很多。当然只跑linux不应是这块板子该做的事情,在接下来的学习中,将尝试带HPS的例程,并希望能有所收获。

最后补充点感想。断断续续学了Verilog一年半,在面对大型项目时深感无力。私以为,完全用verilog跑深度学习、卷积神经网络这些简直是妄想,而使用如CPU+FPGA+DSP类似的结构才是正道。

这块DE1-SoC开发板潜力巨大。这次虽然跟着跑完了这个例程,但深感如此仅仅是SoC的九牛一毛。未来类似CPU+FPGA+DSP这样的结构或许将成为主流,操作系统中,程序令控制变得简单,而fpga负责底层接口的配置和海量数据运算。

过去写底层Verilog把头低得太久,是时候抬起头看看了。

>>微信公众号:相相相同学

>>随心情更新 爱看不看

参考原帖地址

友晶给出的官方英文资料,包括一些说明文档和例程

http://www.terasic.com.cn/cgi-bin/page/archive.pl?Language=China&CategoryNo=182&No=870&PartNo=4

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315G1NCMF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券