第6章 SWT概述



第1章 构建OpenCV

本章将快速讲解Android和OpenCV开发环境的构建方式。另外,还将考察OpenCV的示例程序、文档以及开发社区。

在本章结束时,开发环境将涵盖下列组件。

❑ Java开发工具包(JDK6):该工具包涵盖了Java编程工具。

❑ Cyrwin 1.7或后续版本(仅适用于Windows):可视为一个兼容层,并在Windows上提供了一个类UNIX编程工具。

❑ Android软件开发包(Android SDK)r21.0.1或后续版本:该开发包涵盖了Java中的Android应用程序开发工具。

❑ Android本地开发包(Android NDK)r8d或后续版本:该开发包包含了C++中Android应用程序的开发工具。虽然本书主要讲解Java编程机制,但OpenCV同样适用于C++示例程序,并可实现程序的编译和运行。

❑ Eclipse 4.2.1(Juno):该软件为一个集成开发环境(IDE)。

❑ Java开发工具(JDT):即基于Java应用程序设计的Eclipse插件(已经内嵌于大多数Eclipse版本中)。

❑ C/C++开发工具(CDT)8.1.1或后续版本:即C/C++应用程序设计的Eclipse 插件。

❑ Android开发工具(ADT)21.0.1或后续版本:即Android应用程序设计的Eclipse插件。

❑ OpenCV4Android 2.4.3.2或后续版本:包含了OpenCV的Android版本,以及Java和C++库。

上述组件存在多种安装和配置方式,本书将讨论几种较为常见的构建方案。另外,读者还可查看OpenCV的官方文档以获取更多内容,对应网址为 doc/tutorials/introduction/android_binary_package/O4A_SDK.html。

1.1 系 统 需 求

基于Android和OpenCV的开发工具均具有跨平台特征,并支持下列操作系统:

❑ Windows XP、Windows Vista、Windows 7或Windows 8。

❑ Mac OS 10.6(Snow Leopard)或后续版本。

❑ Ubuntu 10.10(Maverick)或后续版本。

❑ 其他类UNIX操作系统(本书并未涉及此类系统)。

为了运行OpenCV示例程序以及后续的应用程序,Android设备应具备下列规范:

❑ Android 2.2(Froyo)或后续版本(必需)。

❑ 相机设备(必需)或前、后置相机(推荐使用)。

❑ 自动聚焦功能(推荐使用)。

❑ Google Play Store(推荐使用)。

这里,并不推荐使用Android虚拟设备(AVD),OpenCV的某些部分取决于底层相机访问,且有可能无法使用虚拟相机。

1.2 构建开发环境

可从下列方案中选择开发环境:

(1)安装包含全部所需组件的预置开发环境。

(2)分别安装各种组件,经适当配置后使其可协同工作。当采用该方案时,可采用以下两种方式:

❑ 使用预置的OpenCV版本。

❑ 从资源中配置并构建OpenCV。

下面将对各种方案进行详细讲解。

1.3 获取现有的开发环境——Tegra Android开发包(TADP)

Tegra Android开发包(TADP)针对Android、OpenCV以及其他库包含了完整的预置开发环境。针对NVIDIATegra处理器,TADP采用优化方式构建应用程序。尽管如此,对应应用程序同样兼容于其他硬件。

提示:当从零开始搭建Android开发环境时,建议使用TADP,它包含了全部所需软件的最新版本,且构建过程相对简单。

除此之外,TADP还涵盖了某些附加内容。读者可查看官方文档以获取完整信息,对应网址为。

设置TADP时,读者需要从NVIDIA完整下载并安装开发包,步骤如下:

(1)加入NVIDIA Registered Developer Program,对应网址为. com/user/register(免费)。

(2)登录网址为。

(3)在 profile/rdp_profile处填写用户信息。

(4)应用并加入Registered Developer Program,对应网址为. com/rdp/applications/tegra-registered-developer-program(免费)。几分钟后,NVIDIA将会向用户发送一封确认电子邮件。

(5)访问,并找到TADP最新版本的下载链接。在本书编写时,最新版本为2.0r2,且分别支持Windows(32位或64位)、Mac以及Ubuntu(32位或64位)的安装。相应地,读者可选择并下载相应的安装包。

(6)当安装包显示这一步骤时,可输入任意目标并称作。默认条件下,表示为C:\NVPACK(Windows操作系统)或~/NVPACK(Mac或Ubuntu)。

(7)当安装包显示Installation Options这一步骤时,可从Complete、Express或Custom选项中进行选择。与Express安装方式相比,Complete或Custom安装则包含附加的Android SDK版本,以及Tegra Android OS二进制图像,这可是为NVIDIA的定制版本。若用户对此难以确定,则可直接选择Express选项。

(8)当安装包显示Proxy Configuration这一步骤时,若未使用代理,则可将全部字段留为空白。

(9)待结束全部安装配置步骤后,须等待TADP的下载和安装过程。

至此,安装过程暂告一段落,在执行后续处理之前,应了解TADP在相关位置安装了特定的组件。对于TADP 2.0r2版本中(在本书编写时为最新版本),对应安装位置如下所示:

❑ Android SDK位于/android-sdk-macosx,可将该位置称作。

❑ Android NDK位于/android-ndk-r8d,可将该位置称作。

❑ OpenCV4Android位于/OpenCV-2.4.3.2-android-sdk-tadp,可将该位置称作。

❑ Eclipse位于/eclipse,可将该位置称作。

技巧:TADP安装包自动编辑系统PATH,并包含/platform-tools和/tools。另外,TADP还将生成环境变量NDKROOT,其值为。

下面将讨论如何通过Eclipse构建OpenCV示例程序。

提示:下载示例代码。读者可在并通过购买账号下载PACKT出版社全部书籍的示例代码。另外,读者也可访问 support,经注册后可通过电子邮件方式获得相关文件。同时,本书的示例代码也可通过网址得到。

1.4 逐个整合安装环境

若不采用TADP作为既定方案,则可对开发环境进行适当“组装”。总体而言,该项任务包含如下两个步骤:

(1)构建多用途的Android开发环境。

(2)构建当前环境下的OpenCV应用。

下面考察基于多功能Android开发环境的构建步骤。此处并不打算详细讲解其过程,前述链接已给出了相关指示;另外,作为一名Android开发者,相信读者对此类构建步骤并不陌生。

提示:如Android开发环境构建完毕,且正想向其加入组件,则下列步骤可能并不适用。

对应操作步骤如下所示:

(1)若使用Windows或Linux操作系统,则需要人工获得JDK 6(在Mac机上,若JDK 6未予提供,则操作系统在必要时将会自动安装)。针对Windows和Linux大多数版本,网址 1902814.html提供了相应的安装包。另外,在Linux操作系统中,须检测JDK包的版本库,并安装JDK 6。

(2)下载Eclipse并将其解压至目标位置处,此处将其确定为。此处存在多种版本可供选择,Googles提供了称作Android Developer Tools(ADT)包的Eclipse版本,源自Android SDK以及预置ADT插件。其中,读者可访问. sdk/index.html下载ADT包。而则提供了最新版本的Eclipse软件。作为基本的Android开发环境,Eclipse软件可视为移动开发人员的较好选择。

(3)如果未得到ADT包,则需要安装Android SDK以及基于Eclipse软件的ADT插件。对此,读者可访问下载Android SDK Tools。随后,可安装或将其解压至任意位置,即。打开Eclipse并根据官方指示安装ADT插件,对应网址为 installing-adt.html。随后,将弹出一个名为Welcome to Android Development的窗口,单击Use Existing SDKs,浏览至并单击Next按钮,最后关闭Eclipse。

(4)若使用Windows操作系统,则可从下载并安装Cygwin。

(5)从下载Android NDK,可将其解压至任意位置,该位置称作。

(6)编辑系统的PATH,并包含/platform-tools和 /tools。除此之外,还应创建名为NDKROOT的环境变量,其值为。

技巧:在Windows操作系统上编辑环境变量

系统的Path变量以及其他变量可在Control Panel中的Environment Variables窗口中进行编辑。在Windows Vista/7/8操作系统中,打开Start菜单,运行Control Panel,进入System and Security | System | Advanced system settings,单击Environment Variables按钮。在Windows XP操作系统中,打开Start菜单并进入Control Panel | System,单击Advanced标签页,并单击Environment Variables按钮。当前,在System variables中可选取现有环境变量,例如Path,并单击Edit按钮。另外,还可通过单击New按钮创建新的环境变量,并在必要时编辑变量的名称和值。例如,若期望向当前Path中添加C:\android-sdk\platform-tools和C:\android-sdk\ tools,则可向现有Path值处追加“;C:\android-sdk\platform-tools; C:\android-sdk\ tools”。这里,读者应注意分隔符的用法。若期望应用修改结果,可单击OK按钮,返回至Control Panel的主窗口,注销并再次登录。

在Mac机上编辑环境变量

编辑~/.profile,并设置现有环境变量。例如可添加export PATH=$PATH:~/ android-sdk/platform-tools:~/android-sdk/tools,这将~/android-sdk/platform-tools和~/android-sdk/tools添加至当前PATH中。这里,应注意分隔符分号的用法。当创建新的环境变量时,则可添加export NDKROOT=~/android-ndk一行,保存变化结果,注销并再次登录。

在Ubuntu上编辑环境变量

编辑~/.pam_environment,在现有环境变量后添加PATH DEFAULT=${PATH}:~ /android-sdk/platform-tools:~/android-sdk/tools,这将~/android-sdk/ platform-tools和~/android-sdk/tools追加至当前PATH中。这里,需要注意分隔符分号的用法。当创建新环境变量时,可添加NDKROOT DEFAULT=~/android-ndk一行,保存修改结果,注销并再次登录。

至此,Android开发环境设置完毕,但仍需要确定OpenCV。对此,可选择下载OpenCV的预制版本,下面将对对应选项进行讨论。

提示:总体而言,Android应用程序应使用OpenCV的预制版本,其中较为重要的一点是,预制版本可作为共享库供Android用户使用,这将节省硬盘空间并简化更新操作。

本书并不打算构建源OpenCV。出于完整性,本章将对这一选项予以讨论,高级用户可据此对OpenCV进行调整。

1.5 获取预制版本的OpenCV4Android

读者可访问下载OpenCV4Android的预制版本。其中,可查看包含opencv-android名称的文件,例如OpenCV-2.4.5-android-sdk.zip(在本书编写时,该版本为最新版本)。随后,可选择最新版本的软件,可将其解压至任意位置,即。

1.6 构建源OpenCV

针对基于trunk版本(其源代码尚不稳定), wiki/Building_OpenCV4Android_from_trunk提供了OpenCV4Android的构建过程。如果读者对此版本并不感兴趣,则可直接阅读1.7节。

提示:由于trunk版本包含了尚不稳定的源代码,因而无法确保构建过程一定会成功,因而读者需要对相关问题亲自进行处理。

当构建源OpenCV时,需要使用到下列附加软件:

❑ Git软件。该软件是一类资源控制管理(SCM)工具,据此可获得OpenCV的源代码。在Windows或Mac机上,可从下载并安装Git。对于Linux操作系统,可使用包管理器进行安装。例如,在Ubuntu上,可打开Terminal并运行$ sudo apt-get install git-core。

❑ CMake。该软件可视为一类构建工具集。在Windows或Mac机上,可从下载并安装CMake。在Linux操作系统中,可通过包管理器安装Cmake。例如,在Ubuntu中,可打开Terminal并运行$ sudo apt-get install cmake。

❑ Apache Ant 1.8.0或后续版本。该软件可视为基于Java的构建软件工具集。在Linux操作系统上,可通过包管理器安装Ant。例如,在Ubuntu上,可打开Terminal并运行run $ sudo apt-get install ant。在Windows或Mac机上,可从下载Ant,并将其解压至任意位置,即。同时,可通过下列方法调整环境变量:

➢ 向PATH中添加/bin。

➢ 利用值创建变量ANT_HOME。

❑ Python 2.6或后续版本(但不包括Python 3.0及其后续版本)。Python为一类脚本语言,并用于OpenCV构建脚本中。Python的相关版本预安装于Mac机和大多数Linux操作系统中,包括Ubuntu。在Windows操作系统中,可在下载并安装Python。若读者在系统中安装了多个版本的Python,应确保Path(Windows操作系统)和PATH(Mac、Linux或其他类UNIX操作系统)中仅包含Python 2.6或后续版本(但不包含Python 3.0和后续版本)。OpenCV构建脚本不支持Python 3.0及其后续版本。

当上述需求设置完毕后,可将OpenCV源代码下载至任意位置,对应位置称作。随后,可通过包含的脚本进行构建,对应步骤与具体平台相关,如下所示:

在Windows操作系统中,可将\android\scripts\wincfg.cmd.tmpl复制至\ android\scripts\wincfg.cmd中,并编辑\ android\scripts\wincfg.cmd。该文件中声明了多个预置条件的具体位置。读者可尝试对其进行调整,以确保当前系统的正确性。保存变化结果,并于随后打开Git Bash(Git的命令提示符),且运行下列命令:

$ git clone git://code.opencv.git

$ cd /android

$ scripts/cmake_android.cmd

$ cd build

$ make -j8

在Mac、Ubuntu或其他类UNIX系统中,打开Terminal(或另一个命令行shell),并运行下列命令:

$ git clone git://code.opencv.git

$ cd /android

$ sh ./scripts/cmake_android.sh

$ cd build

$ make -j8

如果全部步骤运行顺利,则可在/android/build中获取OpenCV4Android,必要时,可将其移至其他位置。相应地,最终位置称作。

1.7 基于Eclipse构建OpenCV示例

创建并运行示例应用程序可视为测试OpenCV的较好方式,同时,还可通过Eclipse软件参与实践。

Eclipse启动程序分别位于/eclipse.exe(Windows操作系统)、/ Eclipse.app(Mac机)或者/eclipse(Linux操作系统)中,此处运行对应程序。

读者可以查看到一个名为Workspace Launcher的窗口,并请求选择一个工作区(workspace),如图1-1所示。针对相关的Eclipse项目集,工作区可视为根目录。若使用TADP,则可进入/nvsample_workspace,在该工作区中,OpenCV4Android库、示例程序以及自学教程均已作为项目予以构建;否则,经选择后,还可进入其他位置。

[pic]

图1-1

提示:可通过File | Switch Workspace | Other命令于任意时刻返回Workspace Launcher窗口。

若显示Welcome to Eclipse界面,可单击Workbench按钮,如图1-2所示。

[pic]

图1-2

当前,读者可看到包含多个面板的窗口,其中包括Package Explorer。若未使用TAPD,则需要向新工作区中导入OpenCV示例项目。这里,可右击Package Explorer并在弹出的快捷菜单中选择Import命令,如图1-3所示。

[pic]

图1-3

弹出Import窗口,选择General | Existing Projects into Workspace节点,并单击Next按钮,如图1-4所示。

进入Select root directory中的:field。在Projects: label下,可显示已检测到的项目表(否则,可单击Refresh按钮)。该表包含了OpenCV库、示例程序以及自学教程。这里,应确保全部项目均已被检测到,随后可单击Finish按钮并将其导出,如图1-5所示。

待项目导出后,还需要进一步对某些配置问题进行调整。与示例程序默认的配置相比,当前开发环境可能会包含不同的路径和Android SDK版本,如图1-6所示。

[pic] [pic]

图1-4   图1-5

[pic]

图1-6

需要说明的是,任何返回错误均报告于Problems标签页中。

提示:由于示例程序和自学教程中的内容与当前库关系紧密,因而读者可开始尝试处理OpenCV Library项目中的错误。

较为常见的配置问题、症状以及解决方案罗列如下:

❑ 目标Android版本可能未被正确定义,其症状表示为:从Java和Android包中导入失败,且会显示对应错误消息,例如“The project was not built since its build path is incomplete”。对此,可在Package Explorer中右击当前项目,并根据菜单选取Properties以及其中的Android部分,进而选中某一现有Android版本,如图1-7所示。针对全部项目,上述步骤可重复执行。在编译期,OpenCV及其示例程序须规定为Android 3.0或其后续版本,尽管在运行期内二者同样支持Android或后续版本。

[pic]

图1-7

❑ 若读者工作于Mac或Linux操作系统中,则C++示例程序可能会被错误地配置,通常会显示诸如“"{ndk}/ndk-build.cmd" not found in PATH”等错误消息。对此,可右击Package Explorer中的当前项目,并在弹出的快捷菜单中选择Properties命令。随后,选择C/C++ Build并编辑Build command: field,进而移除.cmd扩展,如图1-8所示。针对全部本地C++项目,可重复使用上述步骤,这将包含OpenCV示例-界面-检测以及OpenCV Tutorial 2混合处理机制。

[pic]

图1-8

提示:若在TADP的/nvsample_workspace中使用上述项目,则仅需要检测起始名称为OpenCV的项目。对于本书,其他TADP示例程序可予以忽略。

当OpenCV项目不再显示任何错误消息时,则可着手准备在Android设备上对其进行测试。回忆一下,设备应包含Android 2.2(Froyo)或后续版本以及相机。为了保持Eclipse与设备间的通信,须按照下列步骤开启设备USB的调试选项:

(1)打开Settings app。

(2)在Android 4.2及其后续版本中,进入About phone或About tablet部分,单击Build number 7次,将开启Developer options。

(3)进入Developer options(Android 4.0及其后续版本)或Applications | Development(Android 3.2以及之前的版本),开启USB debugging选项,如图1-9所示。

[pic]

图1-9

打开Play Store,查看并安装OpenCV Manager(Play Store对应页面类似于图1-9)。当运行OpenCV应用程序时,OpenCV Manager将对OpenCV库更新进行检测。

提示:若设备上未安装Play Store,则需要安装OpenCV Manager,读者可访问. android/service/ doc/UseCases.html查看相关信息。

当前,可着手准备计算机与当前Android设备之间的通信。取决于当前操作系统,所需步骤可能会发生变化。

在Windows参照系中,需要针对Android设备安装相应的USB驱动程序,不同的厂商和设备包含不同的驱动程序。对此, oem-usb.html#Drivers提供了不同厂商驱动程序的链接。

在Linux操作系统中,在通过USB连接某一Android设备之前,需要在许可文件中确定设备的厂商。官方Android文档中罗列了各厂商的唯一ID,对应网址为。相应地,可将该ID号记为。当创建许可文件时,可打开命令提示符程序(例如Terminal),并运行下列命令:

$ cd /etc/udev/rules.d/

$ sudo touch 51-android.rules

$ sudo chmod a+r 51-android-rules

需要注意的是,许可文件须包含根所有权,因而创建和修改该文件时可使用sudo命令。当前,可在编辑器中打开相关文件(例如gedit),如下所示:

$ sudo gedit 51-android-rules

对于各厂商,可向文件中添加一行,对应描述格式如下所示:

SUBSYSTEM=="usb", ATTR{idVendor}=="", MODE="0666", GROUP= "plugdev"

最后,保存许可文件并退出编辑器。

需要说明的是,Mac机不需要相应的驱动程序和许可文件。

这里,可向计算机的USB接口中插入Android设备,在OpenCV示例项目中,可在Package Explorer中选择某一OpenCV示例项目。随后,根据菜单系统,可选择Run | Run as | Android Application选项,如图1-10所示。

此时会出现Android Device Chooser窗口,当前Android设备应列于Choose a running Android device下方(否则,可尝试重新插拔Android设备。若仍无济于事,还可禁用并重新开启设备的USB debugging选项,相关步骤如下所示)。

选择相应的设备并单击OK按钮,如图1-11所示。

[pic]

图1-10

[pic]

图1-11

若显示Auto Monitor Logcat窗口,则选中Yes单选按钮并选择verbose下拉菜单选项,单击OK按钮,如图1-12所示。该现象确保源自应用程序的日志输出内容在Eclipse中可见。

[pic]

图1-12

Android设备可能显示“OpenCV library package was not found! Try to install it?”这一消息,对此,应确保该设备与Internet连接,并于随后单击设备上的Yes按钮。此时,Play Store将打开,并显示一个OpenCV包。安装该软件包并单击硬件的回退按钮,进而返回至示例应用程序,并显示为当前可用。

针对OpenCV 2.4.3.2,示例和自学教程包含了下列功能:

❑ Sample - 15 puzzle将相机画面划分后形成一个滑块拼图,用户可操作滑块进行移动。

❑ Sample - color-blob-detection检测相机画面的颜色区域,用户可触摸以查看颜色区域的轮廓线。

❑ Sample - face-detection在相机画面中围绕脸部绘制绿色矩形。

❑ Sample - image-manipulations将滤波器应用于相机画面中,用户可单击Android菜单按钮,并从滤波器列表中进行选择。

❑ Tutorial 1 - Add OpenCV显示相机画面。用户可单击“…”菜单以选取不同的相机实现画面(包括Java或C++)。

❑ Tutorial 2 - Use OpenCV Camera向相机画面应用滤波器,用户可单击“…”菜单并从滤波器列表中进行选择。

❑ Tutorial 3 - Add Native OpenCV在相机画面中围绕目标点或其他特征绘制红色圆形。一般情况下,目标点或某些特征往往位于图像中的高对比度边附近,这在图像识别以及跟踪应用程序中通常较为有用。

❑ Tutorial 4 - Mix Java+Native OpenCV将对Tutorial 2和Tutorial 3加以整合,用户可单击“…”菜单,以根据滤波器列表以及目标点预览进行选择。

❑ Tutorial 5 - Camera Control将滤波器应用于相机画面中,并包含了可定制的分辨率。用户可单击“…”菜单,以根据滤波器列表以及分辨率列表进行选择。

读者可在自己的Android设备上尝试运行上述应用程序。当运行应用程序时,对应的日志输出内容将显示于Eclipse中的LogCat标签页中,如图1-13所示。

[pic]

图1-13

这里,可通过Package Explorer浏览项目的源代码,进而查看其编写方式。另外,待读者自己的项目完成后,还可再次考察官方示例和自学教程。

1.8 查看文档和帮助文件

OpneCV Java API和C++ API皆与Android关系紧密。其中,读者可访问. java/获取在线Java API文档,或者访问获取在线C++ API文档。除此之外,下列文档(多采用C++代码)也包含于下载后的PDF文件中。

❑ API参考:。

❑ 自学教程:。

❑ 用户指南(不完全:)。

如果上述文档不足以解决所面临的问题,则用户可尝试访问OpenCV社区,相关网址如下所示。

❑ 官方OpenCV论坛:。

❑ Jay Rambhia所发布的博客:。

❑ OpenCV书籍的辅助网站:。

同时,读者还可向提交bug报告。最后,读者还可向android@发送邮件,以使问题得到足够的重视。

1.9 本 章 小 结

本章讨论了Android和OpenCV开发环境,并可在项目中实现相关任务。取决于所选用的方案,可针对后续需求条件选取适当的工具集,进而重新配置和构建OpenCV开发环境。

另外,本章还介绍了Eclipse中的OpenCV Android示例程序,并涉及了不同的功能范畴,以供其他辅助学习使用。最后,本章还讲解了文档和帮助文件的查看方式。

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download