最新消息:

物联网课程系列:OpenQCam树莓派迷你开源相机

Raspberry Pi 少儿编程 1840浏览 0评论

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

本项目利用树莓派 Pi Zero W500 万素相机模块、2.2 SPI 界面 QVGA 320*240 像素)分辨率 TFT LCDOpenCV C++版本),完成一台迷你可爱版数字相机【OpenQCam】,有两个按键及两个 LED,可按钮拍照、储存并同步显示在 TFT LCD 上。做为后续开发更进阶的小型嵌入式智能型摄影机、计算机(机器)视觉、人工智能影像分析应用的软硬件前置环境建立,大家可依此架构再扩展成自己想要的功能。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

开源迷你相机 OpenQCam 成品图

一、硬件需求:

在执行本项目前,先要备妥下列组件:

1.  树莓派 Pi Zero W一片(使用 Pi 1, 2,3, Zero 皆可,只是有些设定方式不同,后面会补充说明)

2.  树莓派 Pi Zero 专用 500 万画素相机(其它分辨率相机亦可,请注意非 PiZero 使用者必须使用 Pi 对应版本的相机)

3. 16GB 记忆卡一张(一般买树莓派餐附的都是 8GB 记忆卡,要跑 OpenCV议要升级)

4. SPI 接口 2.2 TFT LCDQVGA 320*240一片(一般市购 2~3.5 TFT LCD 多半是用 ILI9341 驱动,若非该驱动 IC 则需另外撰写驱动程序。另外此类模块常会自带记忆卡或触控模块,本项目暂未使用。)

5.  双面洞洞板一片(若不想自己焊板子,可直接用面包板插线完成,只是不方便拿在手上把玩)

6. 90 度按键两个(做为操作用按键,或当外部触发拍照,数量可自行增减)

7.红色、绿色 LED 各一个(颜色不拘,可当成闪光灯控制或指示灯用)

8. 10k 220 奥姆 1/4W 电阻各二个(提供按键及 LED 使用)

9. 40 20 pin 双排)pin 2.54 mm 间距公、母排针各一组(连接树莓派和洞洞板用)

10. 20 pin 单排)pin 2.54 mm 间距公、母排针各一组(拆成 9pin 4 pin,分别提供 LCD 模块上显示用及记忆卡用)

11. 5V变压器及Micro USB连接线一组(负责供电给Pi Zero,若使用计算机USB或行动电源供电亦可)

12. HDMI 显示屏及 Mini HDMI 转大头 HDMI 连接线一组(一开始设定 PiZero 使用,之后就完全用不到,可拿有 HDMI 功能的电视充当一下)

13.  无线键盘鼠标及 USBOTG 连接线一组(一开始设定 PiZero 使用,之后使用远程联机操作就用不到,亦可直接借用一下家中计算机的无线键鼠)

14.  可选购Pi ZeroCPU专用散热片一组(除非长时间CPU满载情况造成热当,原则不一定要装)

这些材料可以在淘宝或电子零件市场上购买到。一般上网购买树莓派 Pi Zero 餐(建议主板、相机及扁平电缆一起买,外壳依需求搭配)时会附4GB8GB记忆卡(记得要换购成16GB)、5V 变压器、Micro USB 充电线、USB OTG 连接线及 Mini HDMI 转大头 HDMI 连接线,有些还会附 CPU 散热片。根据不同采购管道及配大致上总体成本(不含第 1213 项)约在 500 ~ 700元左右。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

开源迷你相机硬件需求

另外,本项目对于新手而言,线路部分算有点小复杂,在制作或除错过程中,难免会遇到电气信号不良或信号被干扰等问题产生。一般家里可能没有高性能的仪表(如示波器、逻辑分析仪)可协助分析问题,但建议至少需要有一部数字三用电表。另外,可考虑选配(原则上用不到)一台简易型低速逻辑分析仪(100元左右)来协助。这台仅适合分析 2 MHz 以下信号,但对于重写 LCD SPI 驱动程序、抓问题来说已非常足够。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

简易型 24MHz, 8 port 逻辑分析仪

二、硬件线路图

本专案的线路基本上不难,如下图左边线路图所示。主要是连接树莓派Pi Zero GPIO LCD 模块、按键及 LED。另外,留有一组接头和 LCD 模块信号线并联,方便与逻辑分析仪连接,分析问题用。原则上可不必接,但为方便工作,可选择自行以双面洞板自行焊接,接线方式如下图右边线路图所示。

蓝色为实际焊在板上的裸铜线,红色线为跳线(有胶皮绝缘线),请注意勿和其它线短路,以免电路无法正常工作。若要全部用 OK 线(有胶皮镀银线)焊接亦可。实在不熟悉焊接工作,可使用杜邦端子线连接或用面包板依电路图联机亦可,只是无法像一台相机拿在手上操作。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

开源迷你相机 OpenQCam 电路图()及手焊转接板图()

三、操作系统安装

一般如果上网买树莓派 Pi Zero W 餐时,通常会附一片 4GB 8GB SD 卡,里面已安装好原厂操作系统,开机就能使用。为了后续系统扩充及安装更新版本的 OpenCV,强烈建议一开始就先换成 16GB 记忆卡,避免从 8GB 记忆卡搬到 16GB 时,产生许多设定工作。首先,到树莓派官网下载窗口版环境最新版本的操作系统 Raspbian Stretch with DESKTOP ZIP 文件,地址如下,

https://www.raspberrypi.org/downloads/raspbian/

解压缩后会得到操作系统图像文件Image File2017-11-29-raspbian-stretch.img

电路上的SW1 & SW2可直接按键操作或者以外部触发(Strob)信号连接亦可,但请注意系统目前以3.3V为主要控制电源。因此,当外部触发信号GPIO 21SW1)或 GPIO 26SW2))提供 3.3V 时,相当于按键被按下。另外, LED 1 & 2 可做为指示信号灯或推动闪光灯,不过由树莓派 GPIO 的输出电流很小(10~20mA),要推动大电流的灯具时,要额外接晶体管来放大驱动电流,避免把 GPIO 埠烧坏。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

树莓派官网下载画面

接着,利用Win32 Disk Imager将图像文件(Image File)烧写到记忆卡中。第一步先选择要烧写的档案路径及名称;再来,选择要写入的记忆卡驱动器号;最后按下【Write】就开始刻录工作,此过程大约要半小时左右。如果记忆卡没有刻录工具可以到Win32 Disk Imager进行下载,地址如下

https://sourceforge.net/projects/win32diskimager/

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

刻录图像文件步骤

记忆卡刻录完成后,放入 Pi Zero W 记忆卡槽就可准备送电启动。

第一次送电前注意事项

1.  HDMI连接线连接PiZeroWHDMI屏幕(可用有HDMI功能的电视取代),第一次启动无法以远程(无屏幕)方式进入。

2.  先不要将无线键盘鼠标的接收器插入USBOTG插孔中,启动后会进不了操作系统,导致反复的重新启动,估计是启动电流过大造成,等到进到桌面环境后再插入。

3.  接着就可送电,树莓派PiZeroW板子上有两个MicroUSB孔,靠外侧那个是+5V 电源。原则上, PiZero W 非常省电,一般 5V 1A 的变压器就足够所需电力,一般计算机的USB 2.0插孔(500mA)也能推动。靠板子中间那个是USB OTG,切记不要搞错,以免后续外接 USB 装置无法工作。

强烈建议使用树莓派Pi Zero W,有支持无线网络功能,后续就可直接远程联机操作,不必再连接屏幕及无线键盘鼠标。进入窗口作业环境桌面后,点选右上角网络符号,启动无线网络(WIFI ON),联机到自家的无线网络,输入账号密码。为确保无线网络工作正常,可点选画面左上方地球图案,启动浏览器进行测试,可试随便连到任意一个网址(如 GOOGLE)看看是否正常。接着,将鼠标移到画面右上角无线符号处,此时会出现目前 WIFI 动态配置 IP 位置(192.168.xxx.xxx),先记下来,等下会要用到。

系统默认是英文接口,其中有许多系统参数设定不符需求,加上特殊接口也未开启。因此,先点选画面左上角树莓图案进入主选单(/Preference/Raspberry Pi Configuration)。进入后共有四个子页面,树莓派原厂默认用户名称:pi ,密码为:raspberry,会自动登入(Auto Login)。

若不喜欢默认值,可于 System 页面下修改。后续要远程登录操作,所以屏幕分辨率可依自己需求,按下[Resolution]键进行修改。再来,切到 Interfaces 页面,将预设全改为Disable,为了让项目能顺利完成,必须将CameraVNCSPI致能(Enable))起来。而 Performance 页面预设拨给 GPU 128MB,这个部份可暂时不动。最后,切到 Localisation 页面,设定参数

参数设定

1.  按下[Set Local]键,将 Language设为 Zh Chinese)或 lzh Literay Chinese);Country 设为 CNChina);Character Set 设为 UTF-8

2.  按下[SetTimeZone]键,将Area设为AsiaLocation设为Taipei

3.  按下[Keyboard]键,系统默认为英国键盘,这会导致有些符号打不出来(如@)。因此,选择左边 United States,选择右边 EnglishUS),键盘才能正常工作。

4.  按下[Set WiFiCountry],将设定改为TW Taiwan),如此系统时间才会和网络同步。

最后按下[OK]键,系统会询问是否重新启动(Reboot),选择 YES 后,马上拔掉 USB OTG 上的接收器,让系统重新启动。接下来只须利用 VNC 软件远程联机操作即可。

 

物联网课程系列:OpenQCam树莓派迷你开源相机

 

树莓派系统参数设定

根据实测,强烈建议不要直接用 apt-get 安装 tightvncserver 到树莓派上,有部份软件(如 QT)在远程联机时会造成键盘无法正确输入文问题,建议依上一步骤说明将系统参数 VNC 设定为 Enable 即可。接下来要在桌机或笔电上安装 RealVNC 才能远程操控 Pi Zero W ,相关软件可至RealVNC网站下载,

(https://www.realvnc.com/en/connect/download/vnc/ )。

 

启动 RealVNC 后,输入刚才记下的 IP192.168.xxx.xxx),账号:pi  密码 raspberry,即可远程登录,进行所有操作。如果有习惯常的VNC 软件亦可。

四、工作环境设置

接下来可依需求安装相关软件,大部份安装都在命令模式下进行,点击画面上左上方,黑色[ >_ ]的图案,就会开启一黑色窗口,进入命令(CMD)模式。请注意大部份的命令英文母大小写是被认为不同文,所以不要打错。

4.1  更新系统

虽然树莓派的操作系统可能已是最新的,但其它依赖包(函式库)就不一定,因此首先要更新树莓派,输入以下指令。

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update (更新树莓派韧体,可忽略)

sudo reboot (重新启动)

4.2  测试相机

输入下列指令,测试相机是否可正常拍照,执行后应会在同一目录下产生test.jpg 的图像文件。若无法取像,则需检查相机的软扁平电缆是否正确的插在连接座上没有松脱。

raspistill -o test.jpg

4.3  安装中文输入法(选配,可不装)

这里推荐 SCIM,因为它支持的输入法包括两岸三地常见中文输入法。当然如你有习惯的其它输入法亦可安装。

sudo apt-get install scim scim-tables-zh scim-chewing

4.4  安装影音播放软件 (本项目用不到,但建议安装)

由于之后可能会透过摄像头录制影片,为方便观看影片建议可安装名开源影音播放软件 VLC

sudo apt-get install vlc

4.5  安装 OpenCV 及编译程序必要依赖包

OpenCV 是网络上最多人使用的开源计算机视觉、图像处理工具,功能与时俱进,内容包山包海,连最新的深度学习都有,目前(Dec. 2017)已到了 3.3 版,想多了解一下可参阅官网 https://opencv.org/ 。为了方便大家工作,建议大家直接用编译好的 OpenCV 2.4.9 版就非常够用了,安装后包含 C, C++ Python 都可使用。为加快各位上线时间请依序执行下面指令安装 OpenCV 2.4.9 版即可,安装时间颇长,请多一些耐性。

sudo apt-get -y install build-essential cmake cmake-curses-guipkg-config

sudo apt-get -y install libgtkglext1-dev

sudo apt-get -y install libv4l-dev v4l-utils

sudo apt-get -y install libopencv-dev python-opencv

4.6 安装树莓派 GPIO 及接口驱动库

一般驱动树莓派的GPIO(包括SPI, I2C, PWM…)有很多方式,网络上提供很多免费工具包可驱动,亦可直接对位置写入,由于本项目是用 C++语言完成,所以推荐采用BCM2835(树莓派Pi Zero W的主芯片名称为BCM2835)件包来驱动即可,可免去很多设定及变量使用问题。更进一步信息可参考官网

http://www.airspayce.com/mikem/bcm2835/index.html 。

 

目前(Dec. 2017)最新版本为 1.52。请依以下步骤下载、解压及安装。另外,要注意的一点,这里用的 40pin GPIO,所以用程控时要选用 RPI_V2_GPIO_P1_X X 表示第几脚,而非 GPIO 编号)。

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.52.tar.gz

tar zxvf bcm2835-1.52.tar.gz

cd bcm2835-1.52

./configure

make

sudo make check

sudo make install

为使一开机相机就能启用且可让 OpenCV 直接驱动相机不必透过其它工具,所以要修改系统档案,其步骤如下:

cd /etc/modules-load.d/

sudo nano modules.conf (这里使用内建文本编辑器 nano 进行编辑,亦可用其它文本编辑器)

进入后在最后一行按下 ENTER,新增一空白行,加入bcm2835-v4l2。按下[Ctrl + W](两键同时按)存档,再按[Ctrl + X]离开,完成编辑工作,再输入reboot 重新启动完成所有系统环境设定。

4.7 系统备份(选配,可自由决定)

作到这里已大致完成系统环境建置,建议可再利用Win32 Disk Imager将系统备份。首先将 Pi Zero W 关机,抽出目前已正常工作的记忆卡,放入桌机或笔记本电脑记忆卡槽,启动 Win32 Disk Imager,指定存盘之路径及文件名,选择欲备份的记忆卡驱动器号,按下[Read],耐心等待进度条到 100%,就完成备份。

五、开源迷你相机 OpenQCam 系统开发

接下来要开始说明如何进行程序开发。本项目是采 C++语言,原则上只须文本编辑器(可用内建 nano 或其它习惯编辑器)即可,不需窗口也不需要 IDE 环境就可独立完成。若不习惯传统文本编辑器的人,亦可在窗口环境点选文件名,按鼠标右键,启用 Text Editor(类似 Windows 上的工具软件-[笔记本]),即可进行编辑。另外,在Linux上知名的窗口开发整合环境软件QT,经测试在Pi Zero W上执行非常卡,且和 OpenCV 有些许不兼容,若想使用其它 IDE 亦可。

本项目目前仅支持 TFT LCD 320*240 像素(一般正常是直式显示,目前默认用程序转成横式显示),ILI9341 驱动 IC SPI 接口,此类 LCD 在网络上为主流产品很容易买到。程序中有提供显示直式接口的函式,可自行修改。有其它显示规格需求请上网查阅驱动 IC 数据手册自行修改,但请注意改错参数有可能造成 LCD 损坏。

工作前,建议先建立一个 Project 目录,再将本项目所有档案下载该目录下。接着,执行本项目已预建编译指令批处理文件 go.sh 进行编译,等待约 30 秒后即可完成,产生执行档 camera,由于 BCM2835 须要较高权限,所以执行时要加上 sudo完整操作如下所示。

sudo ./go.sh (编译程序)

sudo ./camera (执行程序)

执行后,摄像头会自动取像并降低影像分辨率,从五百万像素降至QVGA 320* 240 像素),LCD 上会同步显示取像内容,在 LCD 左上角会显示目前速度(取像加显示),单位是 FPS(每秒帧数),正常状况约有 15 ~ 18 FPS。当按下 SW1 时红灯会亮,模拟快门按下后闪光灯会亮,画面涷结 1 秒并自动存档。按下 SW2 时绿灯会亮,并结束程序。

本项目是做为后续利用 OpenCV 进行影像辨识的很好入门平台,程序的相关批注详见各程序原始码。

您必须 登录 才能发表评论!