从零开始搭建Raspberry Pi机器视觉编程环境

从零开始搭建Raspberry Pi机器视觉编程环境

本文主要包括如下内容:

  • 安装Raspbian系统
  • 连接和设置网络
  • 安装中文支持
  • 用电脑控制树莓派
    • 通过SSH远程登录树莓派命令行界面
    • 安装VNC远程登录树莓派图形桌面
    • 通过串口连接树莓派
  • 安装OpenCV及相关开发包
  • 一键备份树莓派SD卡

1 安装Raspbian系统

拿到树莓派后第一件事当然是装系统。安装树莓派系统所需配置:

  • 1个输出5V,>700mA(通常选择1A或2A)的USB电源适配器
  • 1根micro USB线(安卓线)
  • 1张拷贝好系统镜像与NOOBS的SD卡(>=8G)
  • 1个可以用于树莓派的显示器及相关视频转接线(如果需要)
  • 1个USB无线网卡或一根网线+网络

对于机器视觉应用,选择一张大于8G的卡,我的是32G,装完本文所有内容后约使用6G空间。如果费劲的装完所有软件后怕一朝回到解放前,则另外需要约7G空间用于备份。

1.1下载系统和安装工具

下载树莓派操作系统Raspbian,下载地址:

下载系统Raspbian系统和安装工具NOOBS (NewOut Of Box System)。

1.2 安装系统

将下载的系统文件解压后的镜像文件xxx-raspbian-jessie.img"拷贝进SD卡根目录。

将NOOBS 解压后的NOOBS_v1_9_1文件夹中的所有文件拷贝到SD卡根目录,注意要进入NOOBS_v1_9_1文件夹拷贝里面的所有文件,而不是直接拷贝文件夹。

拷贝完成后SD卡根目录应该是类似这个样子:

将SD卡装入树莓派。找个带HDMI接口的显示器,如果没有就买个HDMI转VGA的转接线使用常见VGA接口显示器作为树莓派的屏幕,连上USB鼠标键盘,一切就绪。连上电源线通电后树莓派将自动进入安装程序,稍等一会就系统就装好了,默认登录到图形界面。

2 安装和设置网络

2.1 连接网络

我使用的是USB无线wifi网卡,插好自动配置,找到wifi热点输入密码连接即可上网。我们可以在树莓派的LX终端命令行使用如下命令查看网络连接情况

ifconfig

etho的部分为有线网络连接情况,wlan0的部分为无线网络连接情况,inet addr: xxx.xxx.xxx.xxx 就是树莓派的IP地址。

2.2 设置静态IP

默认情况下树莓派的IP是DHCP动态配置的,为了下文使用VNC登录方便,通常做法是将IP改为静态地址。改 /etc/network/interfaces配置文件

sudo nano /etc/network/interfaces
  • sudo是Linux命令:使用超级用户运行的意思。
  • nano是树莓派自带的一个文本编辑器,很多配置文件都可以用它来打开修改。

将打开的配置文件wlan0的相应部分修改如下:

allow-hotplug wlan0
iface wlan0 inet static
wpa-conf/etc/wpa_supplicant/wpa_spplicant.conf
address 192.168.0.112
netmask 255.255.255.0
gateway 192.168.0.1
  • IP设置为静态:static
  • 此处固定树莓派的无线网络IP地址为:192.168.0.112
  • 子网掩码设置为:255.255.255.0
  • 网关为家里路由器的地址:192.168.0.1

修改后的配置文件类似下图:

Ctrl+O保存,Ctrl+X退出编辑。然后重启树莓派使配置生效

sudo reboot

网络配置方法还有许多,就不一一罗列了,可参考其他相关文章。

3 安装中文支持

3.1 安装中文字体

进入树莓派LX终端,在命令行输入:

sudo apt-get install ttf-wqy-zenhei

将安装文泉驿的开源中文字体,现在可以正常显示中文了。

3.2 安装中文输入法

安装Linux下的中文输入法SCIM(Smart Common Input Method),命令行输入

sudo apt-get install scim-pinyin

安装好拼音输入法后,可以直接命令行输入scim激活,下次启动是会自动启动的。快捷键是Ctrl+空格。或者直接点击屏幕右上角的输入法图标选择。

3.3 配置中文操作系统

命令行运行:

sudo raspi-config

进行系统设置。选择Internationalisation Options-->Change Locale-->zh_CN.UTF-8-->OK,然后重启系统,设置为中文操作系统。

4 用电脑控制树莓派

4.1 SSH

Secure Shell(SSH)是Linux的一个功能可以使你从主机电脑上快速打开一个树莓派的终端会话。要使用SSH,首先需要打开它。最简单的方式是使用Raspi Config,目前的Raspbian系统已经默认打开SSH功能。

有网络连接的情况下,SSH是一个远程连接电脑的常用方式;可以在Secure Shell中使用可以在树莓派上执行的任何命令。同时,基于它的通信都是加密的。

该方式的缺陷是基于命令行而非图形界面。如果想要远程访问图形桌面环境,请参考下一节使用VNC。

windows系统使用SSH需要安装Putty以建立SSH会话。

putty下载地址:

解压缩后运行putty.exe

putty基本设置里“连接类型”选择SSH,主机名称或IP地址填写树莓派的IP地址,点击“打开”。弹出命令行提示输入登录用户名,输入:pi,稍等提示输入密码,输入raspberry即可实现命令行远程控制树莓派。

4.2 VNC

通过SSH只能使用命令行控制树莓派,而VNC可远程登录树莓派图形界面系统。VNC包括服务端(VNC server)和客户端(VNC viewer)

(1)安装服务端:tightvncserver

首先给树莓派安装VNC服务端,通过LX终端命令行安装tightvncserver:

sudo apt-get intsall tightvncserver

(2)树莓派启动服务端:tightvncserver

安装好tightvncserver服务端后,命令行启动服务端

sudo tightvncserver

启动服务端,第一次启动需要输入两次秘码,并确认是否使用只观察模式登录,可选择否。

启动后可以看到 服务端已启动:New ‘X‘ desktop is raspberrypi: 1,1为电脑登录时的端口号。也可以同时启动多个服务端,以不同编号区分。

(3)获取树莓派IP地址

获取树莓派的IP地址,在LX终端输入:

ifconfig

显示结果为192.168.0.112,就是我们之前设置的静态IP。如果没有设置静态IP,需要通过此步骤获取树莓派的IP用于客户端登录。

(4)电脑上安装客户端:VNC Viewer

在电脑上安装VNC客户端,有很多可选的软件,推荐RealVNC,连接稳定,下载地址:

安装VNC Viewer后打开弹出如下对话框:

VNC Sever栏输入192.168.0.112:1(1为vnc服务端的端口号),点击连接,然后输入树莓派VNC服务端第一次启动时设置的登录密码完成登录。

(5)让树莓派开机启动VNCserver

以下是一个简单易行的开机启动VNCserver的方法。创建开机启动文件

cd /home/pi
cd .config
mkdir autostart
cd autostart
nano tightvnc.desktop

打开的文件中输入如下代码:

[Desktop Entry]
Type=Application
Name=tightVNC
Exec=vncserver :1
StartupNotify=false

重启树莓派

sudo reboot

这样每次通电开机,我们不需要外接屏幕也可以用电脑使用树莓派的静态IP和VNCserver端口1远程登录树莓派的图形界面系统了。

4.3 使用串口连接树莓派

如果没有网络环境又想使用电脑控制树莓派,可以通过串口线实现。

使用UBS转TTL线连接树莓派,连接图如下图所示:右下角GPIO接口倒数第5~第3个引脚,依次连接绿色、白色、黑色USB接线,红色为电源供电线,理论上可以接外侧倒数第1个引脚给树莓派供电,我测试了一下因功率不够导致树莓派无法启动。

打开putty,选择“串口”连接,端口为计算机分配给USB转TTL线的端口号,通过:计算机--右键--设备管理器--端口,查看串口号,本机为COM5,波特率填115200,点击putty对话框下方的“打开”按钮进行连接。

弹出的命令行连接窗口中输入pi,然后输入密码:raspberry,即可通过串口连接树莓派。

5 安装OpenCV及相关开发包

OpenCV的安装费了很大劲。网上有许多指南,尝试安装成功后,但树莓派中的Python2无法导入cv2库,也尝试了配置环境变量等方式仍然无法调用。后来按照书上方法一个个包安装才能与Pyhton配合使用。这里提供3个安装方法:官方安装指南,网上教程连接,以及我自己安装成功的方法。

5.1 OpenCV官方Linux系统安装指南

官方指南地址:

  • http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html

(1)需要安装的包:Required Packages 

  • GCC 4.4.x or later
  • CMake 2.6 or higher
  • Git
  • GTK+2.x or higher, including headers(libgtk2.0-dev)
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 orlater with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages:libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev,libtiff-dev, libjasper-dev, libdc1394-22-dev

(2)安装方法

安装编译器:

sudoapt-get install build-essential

安装支持包:

sudoapt-get install cmake git libgtk2.0-dev pkg-config libavcodec-devlibavformat-dev libswscale-dev

安装可选包:

sudo apt-get install python-devpython-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-devlibjasper-dev libdc1394-22-dev

(3)获取OpenCV源代码:Getting OpenCV Source Code

OpenCV下载地址:

方法1:

  • 从上述地址下载OpenCV安装包(for Linux),这里下载的是opencv-2.4.13.zip,通过U盘拷贝到raspberry pi的home/pi/文件夹,然后解压缩生成一个opencv-2.4.13文件夹。

方法2:

  • 可以从树莓派直接用命令行下载,然后解压安装包
wget -O opencv-2.4.13.zip http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.13/opencv-2.4.13.zip/download
unzip opencv-2.4.13.zip

总之,获取最新的稳定版OpenCV安装文件,并解压该安装文件。我下载的是opencv-2.4.13.zip,因为Python2

(4)命令行使用CMake编译OpenCV源文件

创建一个存放Makefiles、工程文件、目标文件和输出二进制文件的临时文件夹,这里用<cmake_binary_dir>表示,例如在解压后的opencv-2.4.13/文件夹中创建release文件夹,则<cmake_binary_dir>= opencv-2.4.13/release,例如命令行代码如下:

cd ~/opencv
mkdir release
cd release

命令行进入cd opencv-2.4.13/release文件夹,输入:

cmake [<some optional parameters>] <path to the OpenCV source directory>

例如:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

命令行进入文件夹opencv-2.4.13/release文件夹,输入

<pre name="code" class="plain">make
sudo make install

完成编译和安装,此步骤耗时约6小时。

更新搜索动态链接库

sudo ldconfig

(5)测试安装

  • 查看安装版本
pkg-config --modversion opencv

显示版本为我们下载安装的2.4.13版。

  • 执行测试确认套件是否可运行

命令行进入/opencv-2.4.13/release/bin目录,输入

cd ~/opencv-2.4.13/release/bin
./opencv_test_core

显示测试安装的结果:

参考文章:

  • http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html
  • http://www.raspberries.tw/post/49782936305/raspberrypi-build-opencv-with-xwindow#_=_
  • http://blog.csdn.net/xukai871105/article/details/40988101
  • https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=80601

5.2 源码包方式安装OpenCV

通过上一节的方法安装的OpenCV不能被Python调用,按网上的方法定义了环境变量还是不行。于是找到了一本老外的书上介绍的方法,比较简洁,装好后终于可以正常被python调用了。这里将此提供给大家,供参考:

(1)更新Advanced Package Tool (apt)

apt是一个在Debian系统中用于安装和卸载软件的工具,我们用它来更新Pi上的软件

sudoapt-get update

(2)更新已安装软件

sudo apt-get upgrade

(3)更新固件

sudo rpi-update

(4) 安装OpenCV必要的包和依赖项

sudo apt-get install <package-name>

<package-name>如下表所示


libopencv-dev


libpng3


libdc1394-22-dev


build-essential


libpnglite-dev


libdc1394-22


libavformat-dev


zlib1g-dbg


libdc1394-utils


x264


zlib1g


libv4l-0


v4l-utils


zlib1g-dev


libv4l-dev


ffmpeg


pngtools


libpython2.6


libcv2.4


libtiff4-dev


python-dev


libcvaux2.3


libtiff4


python2.6-dev


libhighgui2.4


libtiffxx0c2


libgtk2.0-dev


python-opencv


libtiff-tools


libpngwriter0-dev


opencv-doc


libjpeg8


libpngwriter0c2


libcv-dev


libjpeg8-dev


libswscale-dev


libcvaux-dev


libjpeg8-dbg


libjpeg-dev


libhighgui-dev


libavcodec-dev


libwebp-dev


python-numpy


libavcodec53


libpng-dev


python-scipy


libavformat53


libtiff5-dev


python-matplotlib


libgstreamer0.10-0-dbg


libjasper-dev


python-pandas


libgstreamer0.10-0


libopenexr-dev


python-nose


libgstreamer0.10-dev


libgdal-dev


libeigen3-dev


libxine1-ffmpeg


python-tk


libgtkglext1-dev


libxine-dev


python3-dev


libpng12-0


libxine1-bin


python3-tk


libpng12-dev


libunicap2


python3-numpy


libpng++-dev


libunicap2-dev

是的,就这么多 -_-

(5)安装OpenCV

上述步骤安装好所有包后,安装OpenCV

sudo apt-get install python-opencv

注意这是给Pyhton安装opencv最简单的方法,但缺点是不一定是最新的OpenCV版本。写本文时,用此方法安装的是2.4.9版。

现在终于可以在树莓派上的Python中使用OpenCV了,打开Pyhton测试一下安装版本:

<pre name="code" class="python"><<<import cv2
<<<cv2.__version__
<<<'2.4.9.1'

6 备份SD卡

如果经过半天折腾完成了Pi的机器视觉编程环境搭建,担心出问题要重装的话,可以选择使用以下方法备份SD卡,它只备份SD卡使用到的空间,而非整个SD卡。

此方法参考文章

  • http://www.fendou.info/raspberry-pi-sd-card-backup-and-recovery/comment-page-1/
  • http://www.littledai.com/20140527/000753/3196

6.1 安装需要的软件

  • dosfstools:fat32分区格式化工具
  • dump:dump& restore 备份工具
  • parted & kpartx:虚拟磁盘工具
sudo apt-get install dosfstools
sudo apt-get install dump
sudo apt-get install parted
sudo apt-get install kpartx

6.2 生成新的img文件

先使用df-h命令查看下树莓派实际使用空间然后在决定生成文件大小,只需看root后占用的空间,这里已经使用6.7G。

下面命令生成块大小为1MB,总大小为7500MB的镜像文件

sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=7500

6.3 分割虚拟磁盘

利用parted将刚才生成的虚拟盘分割成两个分区

  • 第一个分割区采用FAT32格式,由sector 8192开始到sector
    12879,约62.9MB
  • 第二个分割区采用EXT4,由sector 122880开始到结束。
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1

6.4 挂载虚拟磁盘并格式化

loopdevice:执行 losetup连接 img文件的
loop device

device:执行完 kpartx后,虚拟磁盘代号。

partBoot:由 device加上 p1组合而成的
FAT32虚拟磁盘分区。

partRoot:由 device加上 p2组合而成的
EXT4 虚拟磁盘分区。

loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"

格式化虚拟磁盘分区

sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot

6.5 开始备份

fat32虚拟磁盘分区建立好后直接用cp命令备份文件

sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media

ext4linux虚拟磁盘分区用dump & restore备份

sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / |  sudo restore -rf -
cd
sudo umount /media

6.5 卸载虚拟磁盘

sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

经过以上六步树莓派中的数据文件就全部备份到raspberrypi.img中了,你既可以在Windows中用Win32DiskImager将镜像恢复到SD卡,也可以在Linux用dd还原到SD卡,而且不要求恢复SD卡的大小跟原来的一样,这样就可以很方便的更换SD卡。在home/pi目录下生成了一个raspberrypi.img的备份文件如下:

6.6 一键备份设置

创建一个脚本文件,保存在任意位置(如home/pi/backup),任意文件名(如backup.sh)

cd backup
sudo nano backup.sh

向打开的文件中拷贝内容如下:

#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=7500
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1

loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

按Ctrl+O保存文件,Ctrl+x退出,需要备份时可执行:

sudo sh backup.sh

执行完成后可以看到生成的备份文件

现在可以放手折腾啦!

下图是使用VNC登录树莓派使用Geany IDE编写Python机器视觉程序的一个例子:

遗憾的是如果使用RealVNC远程调试机器视觉程序,因为RealVNC不支持OpenGL,所以无法调用cv2模块里的imshow()函数显示图像,上面的例子中我改成了使用matplotlib库中的函数显示。

转载请注明出处(本文更新链接):http://blog.csdn.net/iracer/article/details/51620051

时间: 2024-10-07 16:42:15

从零开始搭建Raspberry Pi机器视觉编程环境的相关文章

Python机器视觉编程环境搭建方法

Python机器视觉编程环境搭建方法 1. Why Python C/C++ 早期的计算机视觉领域大多数程序都是用C/C++编写.随着计算机硬件速度越来越快,开源平台越来越多,开发者选择计算机视觉算法的实现语言变得更加灵活,代码编写的效率和易用性成为选择编写语言时的考虑因素,而不再仅仅只考虑执行效率. Python Python的跨平台.开放性.易用性,加之丰富的资源使其成为近年来越来越多开发者的选择.国外出版了大量的Python编程.学习书籍,亚马逊搜索Python图书,结果列表长达100页共

视障者如何搭建自己的python编程环境

大部分视障者程序员的编码工作都是在windows下进行的,今天我们就来说说如何在windows下搭建一个视障者可以用的python编程环境.为啥要自己搭建呢?因为自带的python编辑器IDLE (Python GUI)读屏根本就读不了啊,我用阳光读屏,nvda读屏,争渡读屏都试过了.后来就自己搞了一个,觉得使用还是比较方便的把经验分享给各位需要的朋友.    我们用的编辑器是EditPlus,python的版本是2.7.8.首先下载安EditPlus和python.具体这些咱们就不在废话了.我

Raspberry pi设置自动拨号,搭建无线路由环境

Raspberry pi设置自动拨号,搭建无线路由环境 前言 raspberry pi(树莓派), 是一款针对电脑业余爱好者.教师.小学生以及小型企业等用户的迷你电脑,由于可以烧录Linux操作系统,因此可以衍生出各种各样的使用途径,诸如控制版,爬虫机器,个人vps,门禁系统-..本文主要介绍如何在raspberry pi上面完成pppoe拨号上网功能,以及如何利用raspberry pi完成路由转发功能,进而将其作为一个家用无线路由器来使用. 准备环境 raspberry pi 三代 b+版

Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要配置Qt库和编译器.编译器只能使用苹果公司自主研发的Clang.1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Qt并默认安装 http://down

Qt在Mac OS X下的编程环境搭建

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要配置Qt库和编译器.编译器只能使用苹果公司自主研发的Clang.1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Qt并默认安装 http://down

unix网络编程环境搭建

unix网络编程环境搭建 新建 模板 小书匠 1.点击下载源代码 可以通过下列官网中的源代码目录下载最新代码: http://www.unpbook.com/src.html 2.解压文件 tar -xzvf upv13e.tar.gz 3.上传至阿里云 本人本地已经配置好,这次实验是将环境搭建至云服务器中. scp -r unpv13e [email protected]120.76.140.119:/root/program/unp // -r 上传文件夹  4.编译文件 cd unpv13

Qt在Windows下的三种编程环境搭建(图文并茂,非常清楚)good

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器和调试器的信息如图所示: http://qt-project.org/doc/qtcreator-3.0/creator-debugger-engines.html (Home | Docs | Qt Creator 3.0 | Debuggingand Analyzing | Setting Up

Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)

此配置实例亲测成功,共勉,有问题大家留言. 环境:VMware 10 + unbuntu 14.04 为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和apue.h差不多,不过这里需要编译源代码,为了以后方便,现在整理如下: 主要有两点一是生成libunp.a这个库,二是得到unp.h.config.h这两个个头文件. 1,安装编译器,为了齐全还是安装一下build-essential sudo apt-get install build-essen

Qt在Windows下的三种编程环境搭建

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器和调试器的信息如图所示: http://qt-project.org/doc/qtcreator-3.0/creator-debugger-engines.html (Home | Docs | Qt Creator 3.0 | Debuggingand Analyzing | Setting Up