1、智能移动终端应用开发设计报告(2013/2014 学年第 2 学期)题 目 : 安卓照相机软件 学 院 : 信息与电气工程学院 专 业 : 通信工程 姓 名 : 刘鹏晨 学 号 : 110312217 设计成绩 : 2014 年 5 月 15 日1目录一、 软件需求分析 1二、 软件总体设计 1三、 关键技术分析 3四、 软件详细设计 3五、 软件测试方案 5驱动测试 7HAL 层测试 .9拍摄测试 10硬件测试 11六、 实验总结 11七、 参考文献 122安卓照相机软件设计方案一、 软件需求分析我们再拍照的时候总是会遇到这些情况,在拍照的时候时不时地有人闯入你的镜头,影响照相效果;有一张很
2、美的照片但是因为某些背景的原因,导致照片拍出来的效果不怎么好。所以有一款可以直接忽略那些不和谐的因素是多么美好的一件事啊!不仅如此,由于现在手机普遍性和其不安全性,我们手机的数据泄露额越来越严重了,而且也有一部分人可以通过照片来窥探我们的某些隐私,让我们感觉自己很不安全。这是安卓智能手机的开源特性所致。尤其是今年央视 315晚会曝光手机隐私泄露之后。人们越发迫切地想要保护自己的隐私不被侵害,越发迫切地保护好自己的隐私,越发迫切地不允许别人通过其他方法来窥探我们的隐私,更不能通过手机照片的某些背景泄露了我们的隐私!在这种情况下,手机马赛克照相机应运产生,它可以在拍照的时候屏蔽一些突然闯入你镜头的
3、那些人,可以选择屏蔽背景,也可以屏蔽一些不想要出现的画面,这样不仅大大的方便了用户,也可以保护客户的隐私不被收到侵害,保护客户的隐私。让用户免于通过别的软件(Photoshop ,美图秀秀等)来后期制作,来去除这些东西.这个软件对用户来说很方便! 二、 软件总体设计本软件主要是实现安卓手机的照相功能,不涉及摄像功能。本软件图标采用彩色马赛克加上一个 m 字母组合成一个图片,图片简洁大方,让用户可以对照相机的图片耳目一新,新颖。本软件没有采用抽屉式的设计,而是采用嵌套式设计,这样可以使得手机界面看起来更加简洁,没有那么多的冗余,让用户更好的体验这款相机所带来的强大功能。本软件和其他相机功能差不多
4、,具体设置参数如下。本软件相机的一般参数设置包括对焦方式、取景模式、色彩效果、选择IS0、防抖设置、照片大小、照片质量及还原设置等选项【对焦方式】:有连续、自动、微距、无限远四 种模式。选择连续对焦模式后当相机对准物体后则 自动对焦,转移到另外一个物体时则重新对焦,对 3相机使用不熟练的用户推荐使用这种对焦模式。自 动模式只有用户点击或者按快门时才会对焦;微距 模式用于拍摄近处物体时使用;无限远模式适合拍 摄远 处物体或者风景时使用。 【取景模式】:有自动、横向、纵向、夜景、海滩、雪景、日落、烟火 8种模式。 自动、横向、纵向是手机拍出照片的显示模式。 夜景模式,适合在夜间光线相对较弱的环境下
5、使用,此时 150 较高,快门 较慢,拍照时要尽可能的保持手机稳定,快门完成后可保持一段时间再移开手 机。海滩模式适合在海滩拍照时使用。雪景模式,白雪皑皑的环境下如果使用 自动取景模式相机可能会因为无法找到参照点而出现无法对焦现象,选择该模 式可解决这一问题。日落、烟火模式分别适用于拍摄日落和烟花场景。 【色彩模式】:选择“无”为自动模式,真实还原物体颜色。 “单色”模式 拍出来的为黑白相片:“棕褐色” 、 “浅绿色”模式拍出的照片颜色偏重棕褐色 及浅绿色;“负片”模式,即为底片模式。【选择 150】:150 即感光度,即相机对光线的敏感程度,相当于感光的速 度,数字越大,感光越快。150 并
6、非越大越好。对于胶片,高感光度的清晰度 会稍差些,颗粒也比较粗;对于数码相机,高 150 会带来较多的噪点,画质较 差。正常环境下 150100 是比较适合的,画质较好。有“自动” “150100”、“150200”、 “150400”、 “150800” 几种模式选择,一般选择自动模式,光线较暗时根据情况选择其他数值。【防抖设置】:打开此项后可以减少因手抖动带来的画面模糊情况。有“关 闭” 、 “1/2 秒” 、 “1 秒” 、 “2 秒”四个选项。这里的时间是指使用者手稳定的时 间,比如选择“1 秒” ,当按下快门时相机会检测枓动时间,如果在一秒内相 机不抖动则自动释放快门拍照,如果一直抖
7、动则手机继续检测。三、 关键技术分析相机应用程序拍摄的步骤相机类提供图像的捕捉启动预览停止预览拍摄照片 检索视频编码。采用 open()方法获得相机实例。获取与 getParameters()相关的配置项目如果有必要的话,可以重新配置相机特性参数,修改返回的4Camera.Parameters 对象,并调用 setParameters(Camera.Parameters).如果要改回显示方向的话,则调用 setDisplayOrentation(int)传递完全初始化的 SurfaceHoloer 给 setPreviewDisplay(SurfaceHolder)。如果没有一个表面景象 su
8、rface 的话,相机将无法启动预览。调用 startPreview()来开始更新预览表面景象 surface。在可以拍摄一张照片之前,就必须是已经可以开始预览。当你决定要拍摄这一张照片时,调用 takePicture(Camera.ShutterCallback shutter,Camera.PictureCallback raw,Camera.PictureCallback postview, Camera.PictureCallback jpeg)。捕获一张照片,然后等待处理的回调,取得实际图像数据。拍摄一张照片后,预览显示就已经停止了。需要拍摄更多张照片时,再次调用 startPrev
9、iew().调用 stopPreview()来停止更新预览表面景象 surface调用 release()来释放相机,应用程序应立即在 oPause()阶段释放相机,如果想要重新获取相机的实例,要做 onResume()中调用 reaOpen()方法。四、 软件详细设计Android 中专门 提供了 Camera 来处理相机相关的事件, Camera 是一个专门用来连接和断开相机服务的类,Camera 下面包括如下几个事件: Camera.AutoFocusCallback: 自动调焦功能; Camera.ErrorCallback:错误信息捕捉; Camera.Parameters :相机的
10、属性参数 Camera.PictureCallback:拍照、产生图片时触发; Camera.PreviewCallback:相机预览设置; Camera.ShutterCallback:快门设置; Camera.Size:图片尺寸; 要在 Android 中使用相机服务很简单,Camera 没有构造方法,我们要使用它直接通过 open()方法来打开相机设备,然后通过 Camera.Parameters 对相机的一些属性进行设置,比如输出图片的格式、大小等等。下面是 Camera 类5一些常用的方法介绍。 Camera 类的方法 方法 说明 autoFocus 设置自动对焦 getParame
11、ters 得到相机的参数 open 启动相机服务 release 释放 Camera 服务 setPreviewDisplay 设置预览 setParameters 设置预览参数 startPreview 开始预览 stopPreview 停止预览 takePicture 拍照 这里重点说明一下拍照的方法和使用, takePicture 方法要实现 3 个回调函数,分别是: Camera.ShutterCallback (快门) 和 两个Camera.PictureCallback(图像数据)。这里我们在拍照之后要取得图像数据就需要实现 Camera.PictureCallback 的 onP
12、ictureTaken 方法。onPictureTaken 中第一个参数就是图像数据, 第二个参数则是相机。 马赛克相机,这是一款既可以搞笑,娱乐,又可以修改,美观的软件。它可以让我们再拍照的时候享受一点乐趣,也可以让我们消除那些不想出现的东西。具体操作:当我们打开照相机的时候我们可以选择普通照相机,马赛克相机。可以供用户更方便的选择。当进入马赛克相机界面时,可以选择对现有照片马赛克处理,也可以对正在进行的照相机照的照片进行马赛克处理,用户先选中所需要处理的区域(考虑到现在大多数的手机是智能手机,且是触屏操作,因此本软件全部采用触屏处理,不考虑按键操作) ,双击选中,弹出一个界面供用户选择,界
13、面显示图片,马赛克。用户点击选择图片,则会有很多图片可以让用户选择,用来遮挡那些不想出现的人或物,或者背景,这种效果比较正式,使得用户处理后的照片不至于太娱乐化。用户点击选择马赛克,则会出现马赛克,来遮挡所选区域,这样处理出来的效果会让用户觉得很搞笑,并且在用户选择马赛克时可以选择颜色,这样处理的效果可以更加娱乐。6软件图片五、 软件测试方案根据实验需求运行已编译好的程序,看是否能运行,是否能够按照预期达到想要的效果,需要以下调试工作:测试,英文是 Beta testing。又称 Beta 测试,用户验收测试(UAT) 。来测试设计的软件是否正常运行。用户界面测试是指测试用户界面的风格是否满足
14、客户要求,文字是否正确,页面是否美观,文字,图片组合是否完美,操作是否友好等等。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。用户界面测试用户分析软件用户界面的设计是否合乎用户期望或要求。它常常包括菜单,对话框及对话框上所有按钮,文字,出错提示,帮助信息 (Menu 和 Help content)等方面的测试。比如,测试 Microsoft Excel 中插入符号功能所用的对话框的大小,所有按钮是否对齐,字符串字体大小,出错信息内容和字体大小,工具栏位置/图标等等冒烟测试的对象是新编译
15、的每一个需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。本地化测试是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。7本地化能力测试是指不需要重新设计或修改代码,将程序的用户界面翻译成任何目标语言的能力。为了降低本地化能力测试的成本,提高测试效率,本地化能力测试通常在软件的伪本地化版本上进行。本地化能力测试中发现的典型错误包括:字符的硬编码(即软件
16、中需要本地化的字符写在了代码内部) ,对需要本地化的字符长度设置了固定值,在软件运行时以控件位置定位,图标和位图中包含了需要本地化的文本,软件的用户界面与文档术语不一致等。安装测试是确保软件在正常情况和异常情况下,例如,进行首次安装、升级、完整的或自定义的安装都能进行安装的测试。异常情况包括磁盘空间不足、缺少目录创建权限等场景。核实软件在安装后可立即正常运行。安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。 卸载测试,英文是 Uninstall Testing。卸载测试是对软件的全部、部分或升级卸载处理过程的测试。主要是测试软件能否卸
17、载,卸载是否干净,对系统有无更改,在系统中的残留与后来的生成文件如何处理等。还有原来更改的系统值是否修改回去。安全测试,英文是 Security Testing。安全测试是测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。例如:想方设法截取或破译口令;专门定做软件破坏系统的保护机制;故意导致系统失败,企图趁恢复之机非法进入;试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非
18、法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。8兼容测试是测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。向上兼容向下兼容,软件兼容硬件兼容。软件的兼容性有很多需要考虑的地方。装配安装装配/安装/配置测试是验证软件程序在不同厂家的硬件上,所支持的不同语言的新旧版本平台上,和不同方式安装的软件都能够如预期的那样正确运行。驱动测试1. 测试目的确保 Linux 驱动层按照一定的步骤去操作设备,不出现错误,对芯片和Camera 硬件的操作都能正确执行。2. 测试前提在需要调试驱动的内核里也需要开发板芯片上的串口驱动的支持,并且在编译前使用 make menuconfi
19、g 配置的时候也需要把串口驱动编译进内核文件,并在 kernel hacking 菜单选择相应的需要打印的信息。3. 测试和调试方法Linux 驱动调试常用的方法有 printk, kgdb, opps 等方式,也可以使用第三方软件和硬件进行调试如 trace32, MultiICE 等 arm 仿真器进行调试,但这些仿真器软件都较为复杂,需要特定的脚本来实现某些调试功能,而且这些仿真器的硬件设备都比较贵。但在 Camera 模块驱动的调试里,常用的方法就足够了,而且成本也很低。常用的 printk, kgdb, opps 方法需要串口的支持,因为调试信息需要通过串口与主机交互,显示在主机的显
20、示屏上。1) printk 方式Linux 内核里的 printk()函数和 c 标准的 printf()函数很类似,是内核里打印信息的函数。通过在内核特定位置调用 printk()函数可以把所关心的信息通过串口打印到主机屏幕上,从而可以观察程序的执行过程和所关心的变量或指针的值,其原型为 printk(const char *fmt, .)。它与 printf 不同之处在于它可以附加不同日志级别,可以让 printk 根据这些级别对消息进行分类。通常用宏来指示日志级别。在 里定义了八种不同级别的日志字符串。例如 9KERN_INFO,表示提示信息;KERN_WARNING 用于对可能出现的情
21、况进行警告。默认的级别是 DEFAULT_MESSAGE_LOGLEVEL 。例 如: printk(“this is a testn”); 命令与 printk(DEFAULT_MESSAGE_LOGLEVEL “this is a testn”);命令是相同的。根据日志级别,内核可能会把消息通过串口打印出来。当优先级值小于console_loglevel 时 消 息 才 会 显 示 出 来 。 console_loglevel 初 始 值 是 DEFAULT_MESSAGE_LOGLEVEL,可以通过 syslog 系统调用修改其值。2) KGDB 方式GDB 是 GNU 开源组织发布的一
22、个 UNIX 下的程序调试工具,KGDB 提供了一种使用 GDB 调试 Linux 内核的机制。使用 KGDB 可以像调试普通的应用程序那样,在内核中进行设置断点、检查变量值、单步跟踪程序运行等操作。它可以通过一系列 KGDB 的命令,在主机端给开发板发送命令进行调试。调试过程中,系统的 Camera 模块设计和实现被调试的内核运行在开发板上,GDB 调试器运行在主机端。4. 测试项和测试步骤1) Camera Sensor 驱动测试上电,由于 Camera Sensor 上电需要一个上电时序,可以通过示波器分别检测两路电,观察他们是否符合上电顺序。硬件复位,硬件复位是通过操作 reset p
23、in 脚实现的。通过 Linux 提供的 GPIO 操作,在复位操作的时候分别读取它的值,再通过 printk 函数打印出来,以确定 reset 操作是成功的。PWDN pin 的不使能。和复位一样通过,通过 GPIO 的操作来确定其执行成功。至此,Camera Sensor 已开始工作了,芯片已可以通过 Linux 驱动提供的 I2C接口与 Camera Sensor 通信了,接下来就是确保 I2C 通信的正常。利用 I2C 通信的相关接口去写相关寄存器,然后再去读取寄存器的值确保对寄存器操作的正确。通过初始化相关寄存器后,Camera 就可以工作了,在 Camera 设备的 data0-7
24、pin 脚通过示波器就可以检测到数据的变化了。至此可以确保 10Camera Sensor 硬件和驱动的正常,但还不能确定一些寄存器的配置是否正确,因为其中一些寄存器需要与 Camera 控制器驱动配合。2) Camera 控制器驱动测试Camera 控制器的一些配置需要与 Camera Sensor 的配置相同,如 vsync, href, pclk 极性,图像的 Ycbcr 顺序等,否则 Camera 控制器会得不到正确的数据。首先要确保写入和读取寄存器的值是一致的。可以通过 Linux 提供的 readl,writel 函数进行测试。在驱动里的流程可以通过 printk 函数打印到屏幕上
25、以确保对控制器的操作流程确如驱动程序里写的那样。5. 测试结果及分析通过串口打印的分析,与 Camera 相关的 pin 脚都可以被正确的操作,Camera 硬件没有短路现象,Camera 硬件与芯片的连接也正常。 Camera Sensor 的寄存器都配置成功没有进入出错处理代码。Camera 控制器寄存器的读写都正确,读取的数据和写入的数据完全一致。HAL 层测试1. 测试目的确保 HAL 层的代码和 Android 提供的 Camera 接口相衔接,确保 Linux驱动层提供的设备节点可以正常使用。2. 测试项和步骤1) Android 接口实现打开 Android 下 Camera 应
26、用程序,在串口中输入 logcat 命令,观察串口的打印信息,是否出现错误提示。2) Linux 驱动提供的设备节点打开 Android 下的 Camera 应用程序,使其处于预览模式,观察串口工具minicom 的打印信息,判断 HAL 层对设备节点的 open, ioctl 等操作是否在驱动里被正确执行。3. 测试结果及分析打开 Camera 应用程序,对其进行预览、拍照等操作,串口工具 minicom 的打印信息显示 Camera 的 HAL 层代码按照设想的步骤执行,没有打印任11何出错信息,HAL 层工作正常。Camera 拍摄效果测试在测试效果的时候,Camera 应用程序已可以在
27、屏幕上显示出 Camera 设备获取到的图像了,拍摄效果的测试就是需要对其中图像遇到的问题进行测试和调试,使其达到预期的效果。在 Camera 效果测试里直接通过人的感觉去分辨难以达到满意的效果。通常会辅助一些效果测试卡。如分辨率测试卡、24 色卡、对比度测试卡、灰阶卡、灯箱等。这些卡通过放大实际的卡片图像与 Camera 的图像显示效果来供调试人员方便的找出图像的问题,有针对性的对图像进行微调。拍摄测试1. 测试目的Camera 拍摄效果直接影响到用户对产品的体验,是测试重要的一部分。测试的目的是使 Camera 应用程序在显示屏上正确反映所拍摄到的实际物品。2. 测试项和测试步骤1) 图像
28、的颜色打开 Android 的 Camera 应用程序,使其处于预览模式,用 Camera 拍摄Camera测试卡中的 24 色卡,观察屏幕中显示的颜色与 24 色卡上的颜色是否一致。24 卡系统的 Camera 模块设计和实现观察和控制开发板,通过电压表、示波器等测试 Camera 硬件状态。通过开发板的显示屏观察 Camera 效果。Camera 模块的功能测试Camera 模块的测试本文按照从 Camera 硬件、Camera Sensor 驱动到 Camera 控制器驱动以及 HAL 层的顺序进行。Camera 硬件测试Camera 硬件是 Camera 模组厂商对 Camera Se
29、nsor 的重新封装。模组厂商会在封装之后提供 Camera 硬件关于镜头、pin 脚等相关信息。在硬件方面需要比对 Camera 硬件和芯片上的 Camera 接口使他们一一对应。12硬件测试1. 测试目的检测 Camera 硬件设备是否完好,与开发板的连接是否正确,芯片提供给Camera 的电压、晶振是否正确。2. 测试项和测试步骤1) 连接测试在驱动程序里用 Linux 提供的 GPIO 驱动对 pin 脚进行配置,使他们或高或低,并读取 GPIO 的值,观察其是否能够正常操作。2) 电压测试在开发板上运行 Android,打开 Camera 应用程序,使其处于预览模式。用电压表检测 C
30、amera 硬件的三个 pin 脚 AVDD、DOVDD、VDD1.8 的三个电压值,观察其是否分别为 2.8V、2.8V、1.8V。3) 外部晶振测试同样打开 Android 应用程序,在应用程序进入预览模式时,用示波器检测Camera 硬件上的 MCLK pin 脚,观察示波器,看示波器上显示的频率是否与驱动代码里提供的一致。3. 测试结果及分析GPIO 都可以正常操作,电压表显示的电压与代码提供的电压只存在微小的差异,示波器显示的频率和通过代码操作芯片提供的频率只存在微小的误差,不影响整体结果。六、 实验总结首先,通过这次的实验设计,让我对安卓照相机有了更深刻的认识,以前我只是以为一个照
31、相机没什么的,可是当我搜集关于安卓照相机大量资料时,才发现现不仅是现在照相机在飞速发展,安装在我们手机上的照相机也有了长足的进步,以前的照相机只能照相,摄像。而随着科学技术的发展,相机也有了更多更好的功能,我所设计的马赛克相机原来 网上已经有了成品,技术已经相当熟练,但是这个相机也加入了我自己的一些想法。通过本实验的程序设计,我对安卓开发有了越来越浓厚的兴趣。刚结束的13数独游戏的设计与编程,让我获益匪浅,对安卓的开发产生了强烈的好奇心,对于这个照相机软件,我知道以我目前的水平很难把它开发出来,但是我会好好努力的。在感慨这个社会高速发展的同时,我也体会到了自己的渺小,我知道自己必须好好学习,才
32、能逐步适应这个社会,来更好的发挥自己的才能。在本次试验中,也遇到了很多困难,有很多东西虽然在课上讲过,当时也理解了,可一到自己设计中,还是不知道该怎么办,这让我懂得了一个道理,课上懂了并不是真的懂了!只有自己动手实践了,才知道自己是不是真的会了,才能更好的理解课上所讲的,才能更好的学好这么课程。七、 参考文献1张孝祥.java 就业培训教程.机械工业出版社,2003 年.2廖雷.java 程序设计教程.中国电力出版社,2003 年.3Warton.java.多线程编程初步.电脑报.2004 年 4 月.4Cay S.Horstmann.java 核心技术卷 1:基础知识.2011 年 10 月
33、.5韩超,梁泉.Android 系统原理及开发要点详解.电子工业出版社.2010年 1 月.6韩超,梁泉.Android 系统级深入开发移植与调试.电子工业出版社.2011 年 2 月7李芝兴,杨瑞龙.Java 程序设计之网络编程.清华大学出版社.8R.J(Bud)Bates. GPRS:General Packet Radio Service .McGraw-Hill, 2003.9Cameron,J.R.JSP & JSD the Jackson approach to software development .Silver Spring MD: IEEE Computer Societ
34、y Press, 1983.10M.J.King,J.P.Pardoe.Program design using JSP a practical introduction .Basingstoke Hampshire: Macmillan, 1992, .11James Goodwill. Pure Java Server Pages .Indianapolis Ind: Sams, 2000, .12Gwenael Le Bodic. Mobile messaging technologies and services SMS EMS and MMS .New York: J.Wiley, 2005, .13Henry Labord(?)re,Vincent Jonack. SMS and MMS interworking in mobile networks .Boston: Artech House, 2004, .14张健.Java 语言与 Jbuilder 应用基础教程.科学出版社.2005-3.1415陈轶,姚晓昆.Java 程序设计实验指导.北京.清华大学出版社,2006.