基于Android平台的Camera系统研究及应用
基于ARM的IP_Camera系统的研究与实现
基于ARM的IP_Camera系统的研究与实现随着科技的不断发展,智能安防系统已经成为人们生活中不可或缺的一部分。
其中,IP摄像机作为智能安防系统的核心设备之一,具有广泛的应用前景。
本文将探讨基于ARM的IP摄像机系统的研究与实现。
首先,我们要了解什么是ARM。
ARM是一种基于精简指令集(RISC)架构的处理器系列。
由于其低功耗、高性能和可定制化的特点,ARM处理器被广泛应用于移动设备、嵌入式系统等领域。
在IP摄像机系统中,ARM处理器可以提供强大的计算和图像处理能力。
基于ARM的IP摄像机系统的研究与实现,主要包括以下几个方面。
首先,硬件平台的选择。
我们需要选择适合IP摄像机系统的ARM处理器和相关硬件组件。
ARM处理器的性能和功耗是我们选择的重要指标,同时还需要考虑图像传感器、存储器、网络接口等硬件组件的兼容性和可靠性。
其次,软件系统的开发。
在IP摄像机系统中,软件系统起着至关重要的作用。
我们需要开发适用于ARM处理器的嵌入式操作系统,如Linux或Android。
同时,还需要开发相应的图像处理算法、网络通信协议和用户界面等功能模块,以实现IP摄像机系统的各项功能。
然后,系统性能的优化。
为了提高IP摄像机系统的性能和稳定性,我们需要对系统进行优化。
通过对图像处理算法的优化,可以提高图像的清晰度和实时性;通过网络通信协议的优化,可以提高图像传输的速度和稳定性。
此外,还可以采用硬件加速等技术手段,进一步提升系统的性能。
最后,系统的应用和推广。
在完成基于ARM的IP摄像机系统的研究和实现后,我们需要将其应用到实际场景中。
IP摄像机系统可以应用于家庭安防、商业安防等领域,为人们提供更加安全和便利的生活环境。
综上所述,基于ARM的IP摄像机系统的研究与实现是一个复杂而有挑战性的任务。
通过选择适合的硬件平台、开发完善的软件系统、优化系统性能和推广应用,我们可以实现一个功能强大、性能稳定的IP摄像机系统,为人们的生活带来更多的安全和便利。
高通CAM 调试经验分享
高通平台摄像头调试分享6 v1 O7 w6 c& A! q 之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了,只是把相关的驱动移植过来就好;另一款是Samsung的一款比较新的3M YUV FF sensor,在最新项目中要使用的,本文以调试该sensor为例,从底层驱动的角度分享一下高通android平台下调试camera的经验,而对于高通平台camera部分的架构以及原理不做过多的介绍。
, A) j* ^+ S- {7 S: C+ G* D/ l0 ~+ E( W, }% V( S! X一、准备工作从项目中看,在硬件(板子)ready前,软件部分是要准备好的。
单独从底层驱动来看,软件部分可以分为2个部分,一个是高通平台相关的,再一个就是sensor部分的,通常的做法就是把sensor相关的设定移植到高通平台的框架之中。
这样就需要先拿到sensor 的spec以及厂商提供的sensor register setting file。
Spec的用途是清楚高通平台和sensor通讯(读写寄存器)的时序以及相关参数设定;而厂商提供的setting file则是在使用camera各个功能(preview、snapshot...)时候需要写入到sensor中的.; X5 r( M0 m: y% r, i' P' |本项目中,高通平台为MSM7X27,camera为Samsung 5CA。
从spec中知道,该sensor的I2C ID为0x78,I2C的通信采用双字节方式,另外也弄清楚了读写sensor 寄存器的规则,从调试角度看这些基本上够用了。
另外厂商提供的setting file,其实就是寄存器列表,告诉我们再什么时候将哪些寄存器写入什么值,通常是一个寄存器地址再加上一个寄存器的值,不过Samsung提供的是PC上调试使用的文本,需要自己转换成c语言中的二维数组。
【Android】AndroidCamera实时数据采集及通过MediaCodec硬编码编。。。
【Android】AndroidCamera实时数据采集及通过MediaCodec硬编码编。
吐槽: 其实常⽤流程都差不多,但是有时候还是会忘记某⼀步的详细⽤法,但是各位朋友请注意,官⽅已经不推荐Camera类的使⽤(现在是android.hardware.camera2),但⽆奈公司项⽬之前是使⽤Camera类实现的,并且Camera2貌似是基于API 21以上的,这Android 7的风声都放出来了,可是6.0现在出了3个多⽉了市场占有率也才貌似3%不到,什么时候才能有个标准化和统⼀规范,作为⼀名Android开发者实属不易啊,叹⽓~Android实现摄像头实时数据采集及通过硬编码编码数据的流程:/** 编码器获取数据,编码,编码后的数据的处理等⼤致流程如下:*//* 1.获取原始帧 */@OverrideonPreviewFrame( byte[] onPreviewData, Camera camera) {/* 在此可以对onPreviewData进⾏Rotate或者Scale* 也可以转换yuv的格式,例如yuv420P(YV12)或者yuv420SP(NV21/NV12)* 相关开源类库可以使⽤libyuv/ffmpeg等*/getRawFrame(onPreviewData)/* 然后将onPreviewData加⼊Camera回调*/addCallbackBuffer(onPreviewData);}private void getRawFrame( byte[] rawFrame ) { encodFrame(rawFrame); }/* 2.进⾏编码 */private byte[] encodFrame(byte[] inputData) { return encodedData; }/* 3.取得编码后的数据便可进⾏相应的操作,可以保存为本地⽂件,也可进⾏推流 */Operation ? Send(byte[] sendData) : Save(byte[] saveData)上述代码onPreviewFrame为Camera类的接⼝,使⽤Camera前需要进⾏SurfaceView及SurfaceHolder的初始化及相应interface的实现:// init the preview surfaceprivate void initview() {SurfaceView surfaceView = (SurfaceView) findViewById(R.id.record_surface);SurfaceHolder surfaceHolder = surfaceView.getHolder();surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {openCamera(holder); // 开启相机}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {releaseCamera(); // 在surfaceDestroyed的时候记得releaseCamera}private void openCamera(SurfaceHolder holder) {releaseCamera();try {camera = getCamera(Camera.CameraInfo.CAMERA_FACING_BACK); // 根据需求选择前/后置摄像头} catch (Exception e) {camera = null;if (AppContext.isDebugMode) {e.printStackTrace();}}if(mCamera != null){try {mCamera.setPreviewCallback(this);mCamera.setDisplayOrientation(90); // 此⽅法为官⽅提供的旋转显⽰部分的⽅法,并不会影响onPreviewFrame⽅法中的原始数据;if(parameters == null){parameters = mCamera.getParameters();}parameters.setPreviewFormat(ImageFormat.NV21); // 常⽤格式:NV21 / YV12parameters.setPreviewSize(width, height); // 还可以设置很多相机的参数,但是建议先遍历当前相机是否⽀持该配置,不然可能会导致出错;mCamera.setParameters(parameters);mCamera.setPreviewDisplay(holder);mCamera.startPreview();} catch (IOException e) {e.printStackTrace();}}}@TargetApi(9)private Camera getCamera(int cameraType) {Camera camera = null;try {camera = Camera.open(cameraType);} catch (Exception e) {e.printStackTrace();}return camera; // returns null if camera is unavailable}private synchronized void releaseCamera() {if (camera != null) {try {camera.setPreviewCallback(null);} catch (Exception e) {e.printStackTrace();}try {camera.stopPreview();} catch (Exception e) {e.printStackTrace();}try {camera.release();} catch (Exception e) {e.printStackTrace();}camera = null;}}MediaCodec硬编码实现部分:此处推荐参考SRS开源项⽬中的实现⽅法:// video device.private Camera camera;private MediaCodec vencoder;private MediaCodecInfo vmci;private MediaCodec.BufferInfo vebi;private byte[] vbuffer;// video camera settings.private Camera.Size vsize;private int vcolor;private int vbitrate_kbps = 300;private final static int VFPS = 20;private final static int VGOP = 5;private final static int VWIDTH = 640;private final static int VHEIGHT = 480;/* ⾸先需要初始化MediaCodec的配置 */private void initMediaCodec() {// choose the right vencoder, perfer qcom then google.vcolor = chooseVideoEncoder();// vencoder yuv to 264 es stream.// requires sdk level 16+, Android 4.1, 4.1.1, the JELLY_BEANtry {vencoder = MediaCodec.createByCodecName(vmci.getName());} catch (IOException e) {Log.e(TAG, "create vencoder failed.");e.printStackTrace();return;}vebi = new MediaCodec.BufferInfo();// setup the vencoder.// @see https:///reference/android/media/MediaCodec.htmlMediaFormat vformat = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, vsize.width, vsize.height); vformat.setInteger(MediaFormat.KEY_COLOR_FORMAT, vcolor);vformat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 0);vformat.setInteger(MediaFormat.KEY_BIT_RATE, 1000 * vbitrate_kbps);vformat.setInteger(MediaFormat.KEY_FRAME_RATE, VFPS);vformat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, VGOP);Log.i(TAG, String.format("vencoder %s, color=%d, bitrate=%d, fps=%d, gop=%d, size=%dx%d",vmci.getName(), vcolor, vbitrate_kbps, VFPS, VGOP, vsize.width, vsize.height));// the following error can be ignored:// 1. the storeMetaDataInBuffers error:// [OMX.qcom.video.encoder.avc] storeMetaDataInBuffers (output) failed w/ err -2147483648// @see /mediacodec/#q12vencoder.configure(vformat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);vencoder.start();}// for the vbuffer for YV12(android YUV), @see below://https:///reference/android/hardware/Camera.Parameters.html#setPreviewFormat(int)//https:///reference/android/graphics/ImageFormat.html#YV12private int getYuvBuffer(int width, int height) {// stride = ALIGN(width, 16)int stride = (int) Math.ceil(width / 16.0) * 16;// y_size = stride * heightint y_size = stride * height;// c_stride = ALIGN(stride/2, 16)int c_stride = (int) Math.ceil(width / 32.0) * 16;// c_size = c_stride * height/2int c_size = c_stride * height / 2;// size = y_size + c_size * 2return y_size + c_size * 2;}// choose the video encoder by name.private MediaCodecInfo chooseVideoEncoder(String name, MediaCodecInfo def) {int nbCodecs = MediaCodecList.getCodecCount();for (int i = 0; i < nbCodecs; i++) {MediaCodecInfo mci = MediaCodecList.getCodecInfoAt(i);if (!mci.isEncoder()) {continue;}String[] types = mci.getSupportedTypes();for (int j = 0; j < types.length; j++) {if (types[j].equalsIgnoreCase(VCODEC)) {//Log.i(TAG, String.format("vencoder %s types: %s", mci.getName(), types[j]));if (name == null) {return mci;}if (mci.getName().contains(name)) {return mci;}}}}return def;}// choose the right supported color format. @see below://https:///reference/android/media/MediaCodecInfo.html//https:///reference/android/media/MediaCodecInfo.CodecCapabilities.htmlprivate int chooseVideoEncoder() {// choose the encoder "video/avc":// 1. select one when type matched.// 2. perfer google avc.// 3. perfer qcom avc.vmci = chooseVideoEncoder(null, null);//vmci = chooseVideoEncoder("google", vmci);//vmci = chooseVideoEncoder("qcom", vmci);int matchedColorFormat = 0;MediaCodecInfo.CodecCapabilities cc = vmci.getCapabilitiesForType(VCODEC);for (int i = 0; i < cc.colorFormats.length; i++) {int cf = cc.colorFormats[i];Log.i(TAG, String.format("vencoder %s supports color fomart 0x%x(%d)", vmci.getName(), cf, cf));// choose YUV for h.264, prefer the bigger one.// corresponding to the color space transform in onPreviewFrameif ((cf >= cc.COLOR_FormatYUV420Planar && cf <= cc.COLOR_FormatYUV420SemiPlanar)) {if (cf > matchedColorFormat) {matchedColorFormat = cf;}}}for (int i = 0; i < cc.profileLevels.length; i++) {MediaCodecInfo.CodecProfileLevel pl = cc.profileLevels[i];Log.i(TAG, String.format("vencoder %s support profile %d, level %d", vmci.getName(), pl.profile, pl.level));}Log.i(TAG, String.format("vencoder %s choose color format 0x%x(%d)", vmci.getName(), matchedColorFormat, matchedColorFormat));return matchedColorFormat;} 上述代码为SRS的部分实现,仅作参考。
AndroidCamera详解
AndroidCamera详解相关的类1. android.hardware.camera22. Camera3. SurfaceView---这个类⽤于向⽤户呈现实时相机预览。
4. MediaRecorder---这个类⽤于从摄像机录制视频。
5. Intent---MediaStore.ACTION_IMAGE_CAPTURE或MediaStore.ACTION_VIDEO_CAPTURE可⽤于捕获图像或视频,⽽⽆需直接使⽤Camera对象。
清单声明在使⽤Camera API开始开发应⽤程序之前,应确保您的清单具有适当的声明,以允许使⽤相机硬件和其他相关功能。
相机权限 - 您的应⽤程序必须请求使⽤设备相机的权限。
<uses-permission android:name="android.permission.CAMERA" />注意:如果您通过调⽤现有的摄像头应⽤程序来使⽤摄像头,则应⽤程序不需要请求此权限。
相机功能 - 您的应⽤程序还必须声明使⽤相机功能,例如:<uses-feature android:name="android.hardware.camera" />存储权限 - 如果应⽤程序将图像或视频保存到设备的外部存储设备(SD卡),则还必须在清单中指定此选项。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />⾳频录制权限 - 对于使⽤视频捕获录制⾳频,应⽤程序必须请求获取⾳频捕获权限。
<uses-permission android:name="android.permission.RECORD_AUDIO" />创建⾃定义摄像头为应⽤程序创建⾃定义摄像头界⾯的⼀般步骤如下:1. 检测和访问摄像机 - 创建代码以检查摄像机是否存在并请求访问。
android-camera摄像头驱动
android camera(一):camera模组CMM介绍关键词:android camera CMM 模组 camera参数平台信息:内核:linux系统:android平台:S5PV310(samsung exynos 4210)下载:常用摄像头规格书(个别有android驱动程序) :bf3703 30W、gc0308 30W、ov7670、gt2005 200W、gt2015 200W、NT99250 200W、s5k5ba 200W、s5k4ba新项目开案,代码他们还没给得到,三星那边办事流程就是多,烦人(嘿嘿只是说说,流程从另一方面说明了人家标准化的程度高)。
看看代码,把前一段时间工作的内容整理下,发出来。
一方面有相同问题的“同学”可以看下,说不定问题就解决了;再一方面自己工作方面记录吧,整个流程整理出来,加深自己的印象,技术还得提高呀。
这样利人利己的事多做点好……“为人民服务!”(我不是**党,只是技术P民)这篇比较基础,做为科普知识看一下。
android camera(一):camera模组CMM介绍android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)android camera(三):camera V4L2 FIMCandroid camera(四):camera 驱动 GT2005一、摄像头模组(CCM)介绍:1、camera特写摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件。
先来张特写,各种样子的都有,不过我前一段时间调试那个有点丑。
2、摄像头工作原理、camera的组成各组件的作用想完全的去理解,还得去深入,如果是代码我们就逐步分析,模组的话我们就把它分解开来,看他到底是怎么工作的。
看下它是有那些部分构成的,如下图所示:(1)、工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。
基于Android 的多功能手机相册设计与实现
基于Android 的多功能手机相册设计与实现摘要:该文通过介绍设计一个基于android的多功能手机相册软件,阐述了android camera、图片编辑、微博客户端开发等相关知识,尤其对使用camera api直接控制相机硬件及新浪微博分享作了详细的介绍,同时将设计过程中所用到的主要方法及控件进行了详细说明。
具有较强的实用性。
关键词:android camera;新浪微博; api中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)15-3614-03android 平台以其强大的功能和友好的用户界面,在几大主流平台的竞争中取得了巨大的胜利和飞速的发展,在移动操作系统市场的份额中所占的比例也越来越大。
3g时代的出现,也使更多人愿意随时随地分享自己的信息。
多功能手机相册软件将手机拍照、照片的编辑与美化、微博分享等功能结合在一起,给用户带来了一站式的体验,也改变了用户的生活方式。
1 android简介android是一种以linux为基础的开放源代码操作系统,主要使用于便携设备。
由google和开放手持设备联盟开发与领导。
1.1 android架构android的系统架构和其它操作系统一样,采用了分层的架构。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
android系统架构图如图1所示[1]。
1.2 android平台的关键组件android应用组件是应用程序的必要构建模块,每个组件都存在于自己的实体并且扮演着唯一的构建模块,可以用来定义android 应用的完整行为。
android有四种不同类型的应用组件,每个组件充当不同的角色,并且有唯一的用来定义组件如何创建、如何消亡的不同的生命周期[2]。
这四种应用组件是:1)activities:一个activity代表一个单独的带有用户接口的屏幕。
并且一个应用可以启动另一个完全不同的应用中的activity。
camera aon模式工作原理-概述说明以及解释
camera aon模式工作原理-概述说明以及解释1.引言1.1 概述随着科技的不断发展,相机技术也在不断进步。
其中,Camera AON 模式作为一种新兴的相机工作模式,引起了广泛的关注和研究。
Camera AON模式是一种基于感知和优化的相机工作模式,通过自动调整相机参数和算法,实现更加智能,高效的拍摄效果。
相比传统的相机模式,Camera AON模式更加注重对环境和拍摄对象的感知能力,能够根据实时的场景变化和拍摄需求,自动调整相机参数,提高拍摄效果和用户体验。
同时,Camera AON模式还可以通过算法优化,实现更加精准的对焦、曝光和白平衡,提升拍摄质量和稳定性。
本文将重点介绍Camera AON模式的工作原理、应用实例和优势,希望能够为读者深入了解相机技术的发展趋势,以及未来Camera AON 模式在移动摄影、智能家居和安防监控等领域的应用前景。
1.2 文章结构本文主要分为引言、正文和结论三个部分。
引言部分将介绍文章的概述、结构和目的,为读者提供了解文章内容的基础。
正文部分将详细介绍Camera AON模式的简介、工作原理和应用实例,帮助读者深入了解该模式的相关知识。
在结论部分,将总结Camera AON模式的优势,展望其未来发展,并给出结论。
通过这样的结构安排,读者可以系统地了解Camera AON模式及其相关内容,从而更好地理解和应用该模式。
1.3 目的:本文的主要目的在于深入探讨Camera AON模式的工作原理,通过对其原理进行解析和分析,帮助读者更加全面地了解这种新型模式的运作方式。
同时,通过介绍Camera AON模式的应用实例,展示其在实际场景中的应用价值和潜力。
通过本文的阐述,读者将更加清晰地了解Camera AON模式的优势和特点,以及其在行业发展中的前景和应用前景。
希望通过本文的介绍,读者能够对Camera AON模式有一个更加深入和全面的理解,进而为其在相关领域的应用和推广提供参考与支持。
android cameradevice用法 -回复
android cameradevice用法-回复Android CameraDevice用法指的是在Android操作系统中,通过使用CameraDevice API来控制和操作设备上的相机。
CameraDevice API提供了许多功能,包括启动相机、预览图像、拍照以及设置相机参数等。
本文将一步一步回答关于Android CameraDevice用法的问题,帮助读者了解如何使用该API来实现各种相机功能。
1. 什么是CameraDevice?CameraDevice是Android相机架构中的一个关键组件,是与硬件相机设备进行交互和通信的接口。
它通过提供方法来管理相机资源、控制相机参数和处理相机数据等。
在应用程序中,可以使用CameraManager类来获取CameraDevice实例。
2. 如何获取CameraManager实例?要获取CameraManager实例,可以调用Context.getSystemService()方法,并传入参数Context.CAMERA_SERVICE。
然后,可以通过此CameraManager实例来获取相机设备列表以及管理相机资源。
示例代码:CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);3. 如何获取相机设备列表?可以通过调用CameraManager的getCameraIdList()方法来获取相机设备列表。
该方法将返回一个包含所有可用相机设备ID的字符串数组。
示例代码:String[] cameraIds = cameraManager.getCameraIdList();4. 如何打开相机设备?调用CameraManager的openCamera()方法来打开相机设备,需要传入相机设备的ID、一个CameraDevice.StateCallback回调以及一个可选的Handler对象。
android Camera框架分析
Android的Camera系统分析一、Camera构架分析Android 的Camera包含取景(preview)和拍摄照片(take picture)的功能。
目前Android 发布版的Camera程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在Android的进程间通讯Binder的结构上。
Android中Camera模块同样遵循Andorid的框架,如下图所示Camera ArchitectureCamera模块主要包含了libandroid_runtime.so、libui.so和libcameraservice.so等几个库文件,它们之间的调用关系如下所示:在Camera模块的各个库中,libui.so位于核心的位置,它对上层的提供的接口主要是Camera 类。
libcameraservice.so是Camera的server程序,它通过继承libui.so中的类实现server的功能,并且与libui.so中的另外一部分内容通过进程间通讯(即Binder机制)的方式进行通讯。
libandroid_runtime.so和libui.so两个库是公用的,其中除了Camera还有其他方面的功能。
整个Camera在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现进程间通讯。
这样在client 调用接口,功能则在server中实现,但是在client中调用就好像直接调用server中的功能,进程间通讯的部分对上层程序不可见。
从框架结构上来看,源码中ICameraService.h、ICameraClient.h和ICamera.h三个类定义了MeidaPlayer的接口和架构,ICameraService.cpp和Camera.cpp两个文件则用于Camera 架构的实现,Camera的具体功能在下层调用硬件相关的接口来实现。
关于网络技术的论文题目
网络技术的论文题目关于网络技术的论文题目导语:网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息。
下面由小编为大家整理的关于网络技术的论文题目,希望可以帮助到大家!1、基于移动互联网下服装品牌的推广及应用研究2、基于Spark平台的恶意流量监测分析系统3、基于MOOC翻转课堂教学模式的设计与应用研究4、一种数字货币系统P2P消息传输机制的设计与实现5、基于灰色神经网络模型的网络流量预测算法研究6、基于KNN算法的Android应用异常检测技术研究7、基于macvlan的Docker容器网络系统的设计与实现8、基于容器云平台的网络资源管理与配置系统设计与实现9、基于OpenStack的SDN仿真网络的研究10、一个基于云平台的智慧校园数据中心的设计与实现11、基于SDN的数据中心网络流量调度与负载均衡研究12、软件定义网络(SDN)网络管理关键技术研究13、基于SDN的数据中心网络动态负载均衡研究14、基于移动智能终端的医疗服务系统设计与实现15、基于SDN的网络流量控制模型设计与研究16、《计算机网络》课程移动学习网站的设计与开发17、数据挖掘技术在网络教学中的应用研究18、移动互联网即时通讯产品的用户体验要素研究19、基于SDN的负载均衡节能技术研究20、基于SDN和OpenFlow的流量分析系统的研究与设计21、基于SDN的网络资源虚拟化的研究与设计22、 SDN中面向北向的控制器关键技术的研究23、基于SDN的网络流量工程研究24、基于博弈论的云计算资源调度方法研究25、基于Hadoop的分布式网络爬虫系统的研究与实现26、一种基于SDN的IP骨干网流量调度方案的`研究与实现27、基于软件定义网络的WLAN中DDoS攻击检测和防护28、基于SDN的集群控制器负载均衡的研究29、基于大数据的网络用户行为分析30、基于机器学习的P2P网络流分类研究31、移动互联网用户生成内容动机分析与质量评价研究32、基于大数据的网络恶意流量分析系统的设计与实现33、面向SDN的流量调度技术研究34、基于P2P的小额借贷融资平台的设计与实现35、基于移动互联网的智慧校园应用研究36、内容中心网络建模与内容放置问题研究37、分布式移动性管理架构下的资源优化机制研究38、基于模糊综合评价的P2P网络流量优化方法研究39、面向新型互联网架构的移动性管理关键技术研究40、虚拟网络映射策略与算法研究41、内容中心网络网内缓存策略研究42、内容中心网络的路由转发机制研究43、学习分析技术在网络课程学习中的应用实践研究44、互联网流量特征智能提取关键技术研究45、云环境下基于随机优化的动态资源调度研究46、基于OpenStack开放云管理平台研究47、基于OpenFlow的软件定义网络路由技术研究48、未来互联网试验平台若干关键技术研究49、基于云计算的海量网络流量数据分析处理及关键算法研究50、基于网络化数据分析的社会计算关键问题研究51、基于Hadoop的网络流量分析系统的研究与应用52、基于支持向量机的移动互联网用户行为偏好研究53、“网络技术应用”微课程设计与建设54、移动互联网环境下用户隐私关注的影响因素及隐私信息扩散规律研究55、未来互联网络资源负载均衡研究56、面向云数据中心的虚拟机调度机制研究57、基于OpenFlow的数据中心网络路由策略研究58、云计算环境下资源需求预测与优化配置方法研究59、基于多维属性的社会网络信息传播模型研究60、基于遗传算法的云计算任务调度算法研究61、基于OpenStack开源云平台的网络模型研究62、 SDN控制架构及应用开发的研究和设计63、云环境下的资源调度算法研究64、异构网络环境下多径并行传输若干关键技术研究65、 OpenFlow网络中QoS管理系统的研究与实现66、云协助文件共享与发布系统优化策略研究67、大规模数据中心可扩展交换与网络拓扑结构研究68、数据中心网络节能路由研究69、 Hadoop集群监控系统的设计与实现70、网络虚拟化映射算法研究71、软件定义网络分布式控制平台的研究与实现72、网络虚拟化资源管理及虚拟网络应用研究73、基于流聚类的网络业务识别关键技术研究74、基于自适应流抽样测量的网络异常检测技术研究75、未来网络虚拟化资源管理机制研究76、大规模社会网络中影响最大化问题高效处理技术研究77、数据中心网络的流量管理和优化问题研究78、云计算环境下基于虚拟网络的资源分配技术研究79、基于用户行为分析的精确营销系统设计与实现80、 P2P网络中基于博弈算法的优化技术研究81、 OpenFlow网络中虚拟化机制的研究与实现82、基于时间相关的网络流量建模与预测研究83、 B2C电子商务物流网络优化技术的研究与实现84、基于SDN的信息网络的设计与实现85、基于网络编码的数据通信技术研究86、计算机网络可靠性分析与设计87、基于OpenFlow的分布式网络中负载均衡路由的研究88、城市电子商务物流网络优化设计与系统实现89、基于分形的网络流量分析及异常检测技术研究90、网络虚拟化环境下的网络资源分配与故障诊断技术91、基于中国互联网的P2P-VoIP系统网络域若干关键技术研究92、网络流量模型化与拥塞控制研究93、计算机网络脆弱性评估方法研究94、 Hadoop云平台下调度算法的研究95、网络虚拟化环境下资源管理关键技术研究96、高性能网络虚拟化技术研究97、互联网流量识别技术研究98、虚拟网络映射机制与算法研究99、基于业务体验的无线资源管理策略研究100、移动互联网络安全认证及安全应用中若干关键技术研究101、基于DHT的分布式网络中负载均衡机制及其安全性的研究102、高速复杂网络环境下异常流量检测技术研究103、基于移动互联网技术的移动图书馆系统研建104、基于连接度量的社区发现研究105、面向可信计算的分布式故障检测系统研究106、社会化媒体内容关注度分析与建模方法研究107、 P2P资源共享系统中的资源定位研究108、基于Flash的三维WebGIS可视化研究109、 P2P应用中的用户行为与系统性能研究110、基于MongoDB的云监控设计与应用111、基于流量监测的网络用户行为分析112、移动社交网络平台的研究与实现113、基于 Android 系统的 Camera 模块设计和实现114、基于Android定制的Lephone系统设计与实现115、云计算环境下资源负载均衡调度算法研究116、集群负载均衡关键技术研究117、云环境下作业调度算法研究与实现118、移动互联网终端界面设计研究119、云计算中的网络拓扑设计和Hadoop平台研究120、 pc集群作业调度算法研究121、基于特征串的P2P流量识别研究与实现122、基于主动测试的网络性能监测技术研究123、社区发现技术的研究与实现124、基于身份与位置分离映射的可扩展路由体系研究125、 P2P流的测量与识别方法研究126、 P2P点播流媒体服务质量研究127、社交网络结构研究128、构建大型CDN网络的关键技术研究129、 P2P流媒体内容分发与服务关键技术研究130、 P2P网络拓扑结构研究131、基于SNMP的网络管理系统的研究与实现132、无线传感器网络分布式分簇和节能的数据收集协议研究133、基于VB的网络管理系统的设计与实现134、网格计算中的任务调度算法研究135、 FLEX的WEB应用系统重构136、基于支持向量机的网络流量预测研究137、复杂社会网络的结构测度与模型研究138、异构网络中垂直切换若干关键技术的研究139、网络监控技术的研究与应用140、网络流量的特性分析与预测研究141、网络流量测量技术的研究与应用142、网络流量控制技术及应用研究143、网络故障智能诊断关键技术研究144、 P2P系统中资源管理机制的研究145、分层分布式网络故障管理研究146、分布式系统故障检测的关键技术研究147、本体存储与查询技术研究148、 P2P流量监控技术研究与实现149、 Web性能测试的方法研究与工具实现150、 P2P流量识别的研究与实现151、 P2P流媒体分发技术研究152、 P2P应用流量检测的研究与实现153、基于NetFlow的流量统计分析系统设计与实现154、基于模糊理论与层次分析法的网络教学学习评价研究155、复杂网络可靠性研究156、网络舆情监控的热点发现算法研究157、基于网格方法的聚类算法研究158、基于市场的网格资源管理研究159、大规模网络IP流行为特性及其测量算法研究160、基于GridSim的网格模拟技术的研究161、基于网格和密度的数据流聚类方法研究162、信息网络拓扑结构与内容相关性研究163、基于嵌入式Internet的远程监控系统的设计164、基于遗传算法和蚁群算法的网格任务调度策略165、微分网格处理技术166、非结构化网格生成及其并行化的若干问题研究167、 P2P网络信任模型及激励机制的研究168、基于ARP欺骗的交换网络监听技术分析与研究169、网格环境下的服务调度机制研究170、动态口令身份认证方案的研究与实现171、网络拓扑发现的算法研究与实现172、基于Web技术的嵌入式网络视频监控系统研究173、 P2P网络资源定位模型研究174、 OPNET网络仿真技术及网络设计175、基于DirectShow的流媒体实时传输的研究与实现176、基于语义的网络服务匹配机制的研究与实现177、基于SNMP的网络管理系统设计与实现178、网格资源定位和任务调度的研究179、 P2P流媒体内容分发关键技术研究180、基于对等模式的资源定位技术研究181、网络故障诊断关键技术的研究182、基于BP神经网络的网络故障诊断系统183、基于Web应用的测试研究与应用184、基于RTP的流媒体实时传输机制研究与实现185、对等网络中信任管理研究186、基于数据网格的海量数据管理若干关键技术研究187、基于P2P的分布式存储及其相关技术研究188、数据网格副本管理关键技术研究189、基于SNMP的网络管理系统设计与实现190、网络编码及网络容错的研究191、 Web服务器集群负载均衡技术的应用研究192、高速互联网性能测量若干关键技术研究193、基于博弈论的网络资源分配方法研究194、基于Web的内容管理系统的研究与开发195、网络流量异常检测与预测方法研究196、串匹配算法及其在网络内容分析中的应用197、基于ARM的嵌入式系统及SNMP的设计与实现198、基于WEB的网络管理技术研究与实现199、基于Internet/Intranet的资源共享模型及技术研究200、三角网格简化及等值面抽取技术。
Android 5.0 Camera系统源码分析(1):CameraService启动流程
Android 5.0 Camera系统源码分析(1):CameraService启动流程1. 前言本文将分析Android系统源码,从frameworks层到hal层,暂不涉及app层和kernel层。
由于某些函数比较复杂,在贴出代码时会适当对其进行简化。
本文属于自己对源码的总结,仅仅是贯穿代码流程,不会深入分析各个细节。
分析android系统源码,需要对android系统的某些知识点有所了解2. frameworks层Android的各个子模块的启动都是从它们的Service的启动开始的,所以我们将从CameraService的启动开始分析。
CameraService的启动就在MediaServer的main函数中,代码路径在:frameworks/av/media/mediaserver/main_mediaserver.cpp[cpp] view plain copyint main(int argc __unused, char** argv){......CameraService::instantiate();......}CameraService类定义如下:[cpp] view plain copyclass CameraService :public BinderService<CameraService>,public BnCameraService,public IBinder::DeathRecipient,public camera_module_callbacks_t{static char const* getServiceName() { return "media.camera"; }......}mediaserver的main函数中调用了CameraService的instantiate函数来创建实例,该函数的实现在其父类BinderService中实现[cpp] view plain copytemplate<typename SERVICE>class BinderService{static status_t publish(bool allowIsolated = false) {sp<IServiceManager> sm(defaultServiceManager());return sm->addService(String16(SERVICE::getServiceName()),new SERVICE(), allowIsolated);}static void instantiate() { publish(); }}1. instantiate函数只是简单的调用了publish函数2. publish函数先构造CameraService,再通过addService函数将它注册到ServiceManager当中,而getServiceName函数获取到的值为“media camera”。
Android平台上手势控制照相系统的实现
Android平台上手势控制照相系统的实现摘要:本文研究了Android平台上的照相机制,通过采用了基于Hu 矩和支持向量机的静态手势识别技术,可实现在复杂背景下对手势进行实时辨别,最后将研究设计的手势识别算法成功地应用到了Android平台上的手势控制照相系统中。
关键词:Android 手势照相系统模式识别1 引言随着计算机技术的迅速发展,通过鼠标、键盘等方式的人机交互方式已经显得过时,新的人机交互方式不断涌现,并受到了人们的欢迎。
手势识别控制技术,作为新型人机交互方式的典型代表,凭借其简单、可靠的特点,受到了人们的广泛关注。
Android是谷歌公司在2008年推出的新一代操作系统。
该操作系统可运行在手机、平板电脑等可移动设备上,凭借其开源的特点,Android迅速掀起了一阵风暴,越来越多的移动设备厂商投入了Android的阵营。
Android必将给人们的生活带来显著的影响。
鉴于上述形势,本文提出了一种可运行在Android平台上的手势控制照相系统。
利用该系统,用户可完全不需要按下快门,而只要对着摄像头摆出特定的手势,照相系统将自动根据当时的距离、光线、环境等,调整相关参数,最终完成拍照动作。
这种新型的拍照系统将带给用户前所未有的拍照体验。
2 Camera基本功能的实现2.1 软件框架的搭建在布局文件中,我们定义了一个SurfaceView控件、一个TextView 控件以及六个Button控件。
SurfaceView控件用于显示camera获取的图像,同时实现OnClickListener接口。
TextView控件是用来实时显示camera在预览情况下每一帧图像的一些特征值,用于检测。
六个Button 控件用于用户操作,其功能是开启、关闭camera,开启手势识别、设置自定义手势,以及退出程序(如表1)。
2.2 授权在权限文件中写入部分权限:<uses-feature android:name=“android.hardware.camera” /><uses-featureandroid:name=“android.hardware.camera.autofocus” /><uses-permissionandroid:name=“android.permission.MOUNT_UNMOUNT_FILESY STEMS”/><uses-permissionandroid:name=“android.permission.WRITE_EXTERNAL_STORAG E”/>他们分别对系统Camera、camera的自动对焦、SD卡的创建删除以及写入数据进行授权。
Android平台Camera及I2C总线驱动学习小结
Android平台Camera及I2C总线驱动学习⼩结Android平台Camera及I2C总线驱动学习⼩结——基于MSM8x60平台硬件开发⼆部BSP科党潇⼯号:101131511.MSM8x60平台简介High-performance high-level operating system(HLOS) platform(45nm)多核处理器(Modem+Dual Apps in a single chip),⽀持Android TMDual 1.2GHz Scorpion TM +512kB shared L2 cache,eMMC LPDDR2内存专属ARM7 ⽤于功率资源控制及传感器外设操作1080pHD 编解码,Adreno TM 220图形处理器,4-lane MIPI摄像头,最⾼⽀持12M像素WCDMA,GSM,HSDPA,1x advanced,1xEV-DO Rev A/BgpsOne,BT3.0,FM Rx/Tx,WIFI WCN1314AAC,AMR-NB,EVRC,QCELP,etc2.MSM8x60平台Camera及Graphics特性Camera特性:VFE 3.1,MIPI接⼝(4-lane)优异的3A算法(AF,AE,AWB),⾃动帧率AFR(Auto Frame Rate)最⾼⽀持12MegaPixel,12bit/pixel,⽀持BAYER和YUV模式1080p预览@30fps闪光灯⽀持,触摸屏⾃动对焦⽀持业界领先的图像特效集:Hand Jitter Reduction(HJR),Motion ISO,Best-Shot mode,Anti-banding,EV control,JPEG encode & decodeGraphics特性:Adreno 220(MSM v2.0)图形处理器,88M triangles/sOpenGL ES 1.1/ OpenGL ES 1.1/ OpenVG 1.1/SVG tiny 1.2LCD显⽰最⾼⽀持到WSXGA(1440×900),60Hz刷新率。
Android framework camera分析
1 AndroiHale Waihona Puke 's camera 模块概述
Camera 模块是 android 系统中用于处理视频输入的模块。Android 将 camera 定义为一个 framework, 这样客户可以使用 camera's framework 支持不同的硬件,只需客户实现 camera 的 framework 。本文主要介绍 camera framework 和如何实现 camera framework。
class CameraHardwareInterface : public virtual RefBase 类 CameraHardwareInterface 虚拟继承于 RefBase 防止二意性。 RefBase 是引用计数基础类。几乎每个 class 都会继承自 RefBase。
CameraHardwareInterface 中定义了若干函数,下面逐个介绍 virtual ~CameraHardwareInterface() { }
pure vitual function, 设置 3 个 callback,(3 个 callback 一般由 CameraService::Client 中实现)。 下面是 3 个 callback 函数的原型: typedef void (*notify_callback)(int32_t msgType,
virtual sp<IMemoryHeap> getRawHeap() const = 0; pure vitual function, 返回由 new MemoryHeapBase(size) 分配的用于保存 camera 拍照时返回的 rowdata。
virtual void setCallbacks(notify_callback notify_cb, data_callback data_cb, data_callback_timestamp data_cb_timestamp, void* user) = 0;
Android平台Camera及I2C总线驱动学习小结
Android平台Camera及I2C总线驱动学习小结——基于MSM8x60平台硬件开发二部BSP科党潇工号:101131511.MSM8x60平台简介ØHigh-performance high-level operating system(HLOS) platform(45nm)Ø多核处理器(Modem+Dual Apps in a single chip),支持Android TMØDual 1.2GHz Scorpion TM +512kB shared L2 cache,eMMC LPDDR2内存Ø专属ARM7 用于功率资源控制及传感器外设操作Ø1080pHD 编解码,Adreno TM 220图形处理器,4-lane MIPI摄像头,最高支持12M像素ØWCDMA,GSM,HSDPA,1x advanced,1xEV-DO Rev A/BØgpsOne,BT3.0,FM Rx/Tx,WIFI WCN1314ØAAC,AMR-NB,EVRC,QCELP,etc2.MSM8x60平台Camera及Graphics特性Camera特性:ØVFE 3.1,MIPI接口(4-lane)Ø优异的3A算法(AF,AE,AWB),自动帧率AFR(Auto Frame Rate)Ø最高支持12MegaPixel,12bit/pixel,支持BAYER和YUV模式Ø1080p预览@30fpsØ闪光灯支持,触摸屏自动对焦支持Ø业界领先的图像特效集:Hand Jitter Reduction(HJR),Motion ISO,Best-Shot mode,Anti-banding,EV control,JPEG encode & decodeGraphics特性:ØAdreno 220(MSM v2.0)图形处理器,88M triangles/sØOpenGL ES 1.1/ OpenGL ES 1.1/ OpenVG 1.1/SVG tiny 1.2ØLCD显示最高支持到WSXGA(1440×900),60Hz刷新率。
高通camera结构(摄像头基础介绍)
⾼通camera结构(摄像头基础介绍)摄像头基础介绍⼀、摄像头结构和⼯作原理.拍摄景物通过镜头,将⽣成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加⼯处理,再被送到电脑中进⾏处理,最终转换成⼿机屏幕上能够看到的图像。
数字信号处理芯⽚DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过⼀系列复杂的数学算法运算,对数字图像信号参数进⾏优化处理,并把处理后的信号通过USB等接⼝传到PC等设备。
DSP结构框架: 1. ISP(image signal processor)(镜像信号处理器) 2. JPEG encoder(JPEG图像解码器) 3. USB device controller(USB设备控制器)常见的摄像头传感器类型主要有两种,⼀种是CCD传感器(Chagre Couled Device),即电荷耦合器。
⼀种是CMOS传感器(Complementary Metal-Oxide Semiconductor)即互补性⾦属氧化物半导体。
CCD的优势在于成像质量好,但是制造⼯艺复杂,成本⾼昂,且耗电⾼。
在相同分辨率下,CMOS价格⽐CCD便宜,但图像质量相⽐CCD来说要低⼀些。
CMOS影像传感器相对CCD具有耗电低的优势,加上随着⼯艺技术的进步,CMOS的画质⽔平也不断地在提⾼,所以⽬前市⾯上的⼿机摄像头都采⽤CMOS传感器。
⼿机摄像头的简单结构滤光⽚有两⼤功⽤: 1.滤除红外线。
滤除对可见光有⼲扰的红外光,使成像效果更清晰。
2.修整进来的光线。
感光芯⽚由感光体(CELL)构成,最好的光线是直射进来,但为了怕⼲扰到邻近感光体,就需要对光线加以修整,因此那⽚滤光⽚不是玻璃,⽽是⽯英⽚,利⽤⽯英的物理偏光特性,把进来的光线,保留直射部份,反射掉斜射部份,避免去影响旁边的感光点.⼆、相关参数和名词1、常见图像格式1.1 RGB格式:传统的红绿蓝格式,⽐如RGB565,RGB888,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。
基于Android平台的人脸识别系统设计
基于Android平台的人脸识别系统设计一、引言在当今科技快速发展的时代,人脸识别技术逐渐得到广泛的应用。
它不仅可以在安防、社交、金融、医疗等领域提高服务质量和安全性,还能在照片分类、表情识别、视频智能分析等方面广泛应用。
针对当下人脸识别在多个领域的广泛应用需求,基于Android平台的人脸识别系统正逐渐成为一个备受关注的领域。
本文将会从技术原理、应用场景、系统设计等角度,对基于Android平台的人脸识别系统进行介绍和分析,并最终给出整个系统的实现方案。
二、技术原理1.人脸识别的三个步骤人脸识别技术的实现,大致分为以下三个步骤:首先,需要对人脸进行检测。
在检测过程中,需要找出图像中所有可能存在的人脸并判断其位置和大小,以便在后续识别步骤中完成对人脸的正确识别。
其次,进行人脸的特征提取。
在该步骤中,会将图像中人脸的特征转换为数字形式,在该过程中使用影响因子对不同的特征进行权重评估,以提高最终的识别率。
最后,完成人脸的匹配与识别。
在此阶段中,重新计算不同人脸特征间的相似度,并进行比较,以找出最匹配的结果。
2.采用 OpenCV 库实现人脸识别实现基于 Android 平台的人脸识别系统,相当程度地依赖于开源的 OpenCV 库。
OpenCV 作为计算机视觉领域重要的开源库之一,在人脸识别中具有着广泛的应用。
OpenCV库提供了人脸检测、特征提取以及人脸匹配等多种功能的支持,能够协助我们很快速的实现基于Android平台的人脸识别应用。
三、应用场景1. 门禁系统基于Android平台的人脸识别系统可用于门禁系统,通过人脸识别技术,员工或是访客无需刷卡或输入密码,直接以脸部识别的方式进入公司或楼宇,提高了门禁系统的安全性和工作效率。
2. 智能支付基于Android平台的人脸识别系统可支持智能支付,消费者将面部对准扫描仪,即可完成支付,无需使用卡或手机,这种支付方式更加快捷方便。
3. 虚拟试衣镜基于Android平台的人脸识别系统还可用于虚拟试衣镜,在人脸检测、身体姿态估计、衣物虚拟渲染等方面进行应用,可为消费者提供更加真实、贴合的选衣体验。
Android 的照相机系统
硬件 操作
字符设备驱动程序核心
硬件层 摄像头 视频输出设备
2.2 硬件抽象层的内容
Camera 的硬件抽象层的在 UI 库的头文件 CameraHardwareInterface.h 文件定义。 在这个接口中,包含了控制通道和数据通道 ,控制通道用于处理预览和视频获取的开始 / 停 止、拍摄照片、自动对焦等功能,数据通道通过 回调函数来获得预览、视频录制、自动对焦等数 据。 Camera 的硬件抽象层中还可以使用 Overlay 来实现预览功能。
Android 的照相机系统
韩 超 @ Android 技术
Android 的 Camera 系统
第一部分 Camera 系统的结构 第二部分 移植和调试的要点 第三部分 Camera 实现方式
第一部分 Camera 系统的结构
照相机系统下层的硬件通常是摄像头 设备,主要用于向系统输入视频数据。摄像 头设备通常包括处理器中的数据信号处理相 关的控制器和摄像头传感器。摄像头传感器 又可以分为普通型和智能型的。摄像机硬件 对软件部分主要提供视频数据。
第一部分 Camera 系统的结构
在理论上,照相机的取景器、视频、 照片等数据都可以传送到 Java 层,但是通常 情况下,这些数据不需要传递到 Java 层。仅 有少数情况需要在 Java 层获取数据流,例如 通过摄像头进行扫面识别的时候,需要取景 器的数据帧。
第一部分 Camera 系统的结构
第一部分 Camera 系统的结构
自下而上, Camera 系统分成了以下几个部分。 ( 1 )摄像头驱动程序:通常基于 Linux 的 Video for Linux 视频驱动框架。 ( 2 ) Camera 硬件抽象层 frameworks/base/include/ui/ frameworks/base/include/camera/ 主要的文件为 CameraHardwareInterface.h ,需要各 个系统根据自己的情况实现。 ( 3 ) Camera 服务部分 frameworks/base/camera/libcameraservice/ Camera 服务是 Android 系统中一个单独部分,通过 调用 Camera 硬件抽象层来实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Android 平台的Camera 系统研究及应用黎世红,程耕国,彭正涛(武汉科技大学信息科学与工程学院高级运动控制研究室,湖北武汉430081)摘要:文中首先介绍了Android 系统概况,然后详细介绍了Camera 子系统工作原理,并使用该系统设计和实现了视频采集,拍照,电子相册和局域网信息共享为一体的图像采集系统,最后在真实设备上进行了测试,实现了Android 系统设备之间的信息共享和网络保存功能,证明了该子系统的通用性和实用性。
关键词:Android ;Camera 子系统;图像采集系统;信息共享中图分类号:TN911文献标识码:A文章编号:1674-6236(2013)06-0055-03Research and development based on Android Camera systemLI Shi -hong ,CHENG Geng -guo ,PENG Zheng -tao(Dept.of Advanced Motion Control ,College of Information Science and Engineering ,Wuhan University of Science andTechnology ,Wuhan 430081,China )Abstract:This paper introduces the architecture of a new generation of smart phone software development platform named android.Then introduces the Camera Subsystem provided by Android ,based on it develops a multi -function image capturing system which includes video capture ,snapshot ,electronic album and wlan information sharing.Finally ,testing on actual devices was carried out ,making Android devices share and store information to each other ,proving the versatility and practicality of the subsystem.Key words:Android ;Camera subsystem ;image capturing system ;information sharing收稿日期:2012-11-17稿件编号:201211141作者简介:黎世红(1986—),女,湖北武汉人,硕士研究生。
研究方向:计算机软件工程。
Android 支持Wi-Fi ,采用WebKit 浏览器,拥有Push Mail等众多网络应用,成为连接用户和互联网的重要纽带,手机和互联网的结合将成为一种必然的趋势,同时Android 系统对摄像头有丰富的功能支持,可以利用Android 的Camera 子系统来开发相关的应用,这样可以使用这些终端设备取代实际中的摄像头与网络相连,甚至可以将这些移动终端与安防网络相连接构成强大的监控网络。
文中探究Android 的Camera 工作原理和一般的开发流程,同时通过实现一个多功能的图像采集系统来验证Android Camera 子系统的实用性。
1Android 系统知识Android 系统是Google 公司最新推出的面向下一代以移动互联网业务为核心的智能终端开源平台,该平台由操作系统、中间件、用户界面和应用软件组成,具体框架结构由5部分组成,其核心为嵌入式Linux 2.6操作系统,向上搭配Google 为Android 开发的Libraries (函数库)及Android 的Runtime (运行环境),再配合Application Framework (应用程序框架),来开发各种不同的Application (应用程序)[1-2]。
Android 系统结构如图1所示。
2图像采集系统的总体设计该图像采集系统包括图像预览模块,拍照和摄像模块,存储模块,电子相册和图像缩放模块。
其中拍照和摄像模块共用Android Camera 系统的视频流,然后分别使用各自的处理通道对视频流进行处理,对于图片的存储加入了JPEG 压缩算法,对于视频的存储加入了H.263压缩算法,提高了数据的存储效率,同时为了保持数据的可靠性,在存储数据时加入了网络上传功能,将需要保存的数据保存到网络服务器上。
对于图片的浏览,使用以gallery 控件为基础的电子相册,可以对指定文件夹下的图片实时的访问和浏览,同时融入图片缩放功能,以便全面的,更好的观察图片。
整个系统的总体结构如图2所示。
3各模块设计详解3.1采集模块设计采集模块包括两个部分,摄像模块和拍照模块,其中摄电子设计工程Electronic Design Engineering第21卷Vol.21第6期No.62013年3月Mar.2013图1Android 系统框架Fig.1Android system framework-55-《电子设计工程》2013年第6期图2图像采集系统总体结构Fig.2Structure diagram of the image capturing system像功能和拍照功能可以相互切换,保障了操作的流畅和简洁,同时在视频存储方面加入了视频压缩算法H.263,在图片存储上使用JPEG压缩算法,为此可以有效的实现图片和视频存储功能。
在Android Camera程序开发过程中,要用到Exif相关的知识,如果处理不当,会导致拍摄的JPEG图片无法正常浏览。
在Froyo(Android2.2)源码中的Camera应用是不对Exif 信息进行写操作,而只是读操作,对于Exif的写操作是交给Camera硬件抽象层去完成,这是google的设计逻辑。
但是不同的Android平台及其相关子平台,再加上不同的Camera应用,相互交替,排列组合,或许会出现这样一种情况:底层没有去写Exif,而上层应用也没有写Exif信息,那么图片的显示信息将会丢失[3-6]。
其中影响最为严重的是Orientation这个参数。
基于Android2.2系统图像采集系统主要流程为:拍照模式:1)获取设备对象android.hardware.Camera.open(int);2)获取默认的设置参数getParameters();3)根据需要定制参数SetParameters(Camera.Parameters),主要参数包括预览图片大小、格式、方向等;4)设置预览顺时针角度Camera.set Display Orientation(int degrees),保证预览图片的方向正确;5)设置图像预览为拍照作准备setPreviewDisplay(surface Holder);6)调用startPreview()执行预览;7)调用takePicture(Camera.Shutter Callback shutter,Camera. Picture Callback raw,Camera.Picture Callback jpeg)实现拍照功能,其中第一个是在照相前做的相关工作,第二个回调函数得到视频流源码,第三个回调函数用来得到图片。
8)拍摄一张相片后,停止预览,如果想继续拍照,再次调用startPreview();9)调用stopPreview()停止预览;10)调用release()释放设备。
由拍照模式切换至摄像模式:1)获取并初始化设备同时开始预览;2)调用unlock()允许media进程访问Camera对象;3)通过setCamera(Camera)切换模式,在MediaRecorder 中看到拍摄视频设置,包括图像编码格式,图像帧率,图像存储格式,音频编码格式,存储路径和文件名称等等;4)当拍摄结束,调用reconnect重新连接并锁住Camera 对象;5)如果继续拍摄,可以重新调用startPreview();6)调用stopPreview()、release()退出并释放Camera 对象。
在Preview模式下,通过拍照事件触发Camera由Preview 模式进入TakePicture模式。
在进入TakePicture模式之前,需要关闭Camera的预览功能,即停止Camera Preview Display。
在TakePicture模式下,AP层首先会发送一个Focus请求,Focus请求会直接到达Camera Hardware层,Camera Hardware 调用底层硬件提供的接口完成Focus功能。
并通过回调函数notify,发送CAMERA_MSG_FOCUS消息,完成Focus,在完成Focus之前,系统并不会停止Preview Display,只有上层接到底层返回的FOCUS成功消息之后,才真正的进入TakePicture模式。
在进入TakePicture模式之后,Camera主要完成进入各个回调函数,保存数据,设备重新初始化这些功能[7]。
从拍照模式进入摄像模式后,主要完成视频和音频数据的相关参数的设置,使用有效的数据保存在指定的目录下。
3.2功能模块设计显示模块是为了实时地将视频信息和图片信息呈现给用户,同时拥有较丰富的人机交互界面,能有效的进行数据交互,其主要功能包括实时摄像,预览拍照,电子相册,图片缩放,网络存储,信息共享等主要的用户交互界面。
摄像功能:主要将摄像头捕捉的视频流以H.263编码格式存储为3GP格式视频,并且实时将其显示在SurfaceView 上,这样一方面实时存储数据,另一方面可以实时监测图像,根据实际的需要,可以进行功能的切换。
拍照功能:通过预览得到个性化的图像场景,然后通过Camera系统的拍照流程设置图片相关参数,最后通过触发拍照事件进行拍照并将照片保存在预设的文件夹下面。
电子相册功能:通过自动扫描指定文件夹下的所有文件,并根据文件的后缀名来判断是否为图片,并且根据时间先后顺序将所有图片存放在画廊(gallery)控件中,通过触摸事件可以浏览画廊中所有的图片。
图片缩放功能:为了使用户更好,更全面的观察图片,在电子相册浏览图片的同时,还加入了对图片的缩放功能,通过对现实图片的ImageView设置触摸监听函数,并实时监听屏幕事件,实现多点触控和边界检测功能。
UI布局设计:主要使用的Android布局为框架布局,图像预览和摄像预览都是使用全屏布局的SurfaceView进行图像信息的加载和显示,按钮控件使用TableRow合并为一组,同时为SufaceView设置触摸事件,以此控制相关的按钮控件的出现与隐藏,节省屏幕空间。