实现android图像识别的几种方法

点击这里下载第一种代码 最近完成了毕业设计,论文名为基于图像识别的移动人口管理系统。编写过程中学到了几种图像识别的技术,先写下来与大家分享。 第一种,直接使用免费得图像识别web服务器 地址为http://maggie.ocrgrid.org/ 实现代码:1.为了提高图像的识别率,首先要灰度化 **[java]** [view plain](http://blog.csdn.net/dannor2010/article/details/7073528#)[copy](http://blog.csdn.net/dannor2010/article/details/7073528#) <div> </div> <div> </div> </div> - <span style="color: black;"><span class="keyword" style="font-weight: bold; color: #006699;">private</span> Bitmap convertToGrayscale(Bitmap bitmap) { </span> - <span style="color: black;"> ColorMatrix colorMatrix = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrix(); </span> - <span style="color: black;"> colorMatrix.setSaturation(<span class="number" style="color: #c00000;"></span>); </span> - <span style="color: black;"> Paint paint = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Paint(); </span> - <span style="color: black;"> ColorMatrixColorFilter cmcf = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> ColorMatrixColorFilter(colorMatrix); </span> - <span style="color: black;"> paint.setColorFilter(cmcf); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Bitmap result = Bitmap.createBitmap(bitmap.getWidth(), bitmap </span> - <span style="color: black;"> .getHeight(), Bitmap.Config.RGB_565); </span> - <span style="color: black;"> </span> - <span style="color: black;"> Canvas drawingCanvas = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Canvas(result); </span> - <span style="color: black;"> Rect src = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(<span class="number" style="color: #c00000;"></span>, <span class="number" style="color: #c00000;"></span>, bitmap.getWidth(), bitmap.getHeight()); </span> - <span style="color: black;"> Rect dst = <span class="keyword" style="font-weight: bold; color: #006699;">new</span> Rect(src); </span> - <span style="color: black;"> drawingCanvas.drawBitmap(bitmap, src, dst, paint); </span> - <span style="color: black;"> </span> - <span style="color: black;"> <span class="keyword" style="font-weight: bold; color: #006699;">return</span> result; </span> - <span style="color: black;"> } </span> 2.将灰度化的图像上传到http://maggie.ocrgrid.org/ 方法和类就不说了,有需要的话可以发我邮箱 ...

2014年5月9日 · 1 分钟 · 天边的星星

直接拿来用!Facebook移动开源项目大合集

随着iOS依赖管理工具CocoaPods和大量第三方开源库成熟起来,业界积累了大量的优秀开源项目。不久之前,Facebook推出了旗下移动新闻阅读应用Paper,便动用了将近100个第三方开源库,极大地简化了自己的应用开发任务。 移动开发生态圈日益完善,基础的开源组件也越来越丰富,而Facebook不仅取之开源,更不断地开源其内部项目,将成果反馈给开源社区,与开发者共享。接下来,就让我们一起来看看那些年Facebook在移动开发方面所推出的众多开源项目。 1. KVOController KVOController是Facebook开源的一款简单安全的KVO(Key-Value Observing,键值观察,Objective-C中定义的一个通知机制)工具,用于iOS和Mac OS X应用开发中。KVOController基于Cocoa经过时间考验的KVO实现开发而成,它提供了一个简洁方便、线程安全的API。 主要特性: 使用Blocks、自定义Actions或NSKeyValueObserving回调进行通知; 观测者移除时无异常; 控制器dealloc时移除隐式观测者; 提升使用NSKeyValueObservingInitial的性能; 为恢复观测者提供特殊防护的线程安全。 相关链接:KVOController的GitHub托管地址、mobilehub主页 2. Shimmer Shimmer是一款开源的加载效果工具,能够非常简单地向应用中的任何视图添加闪闪发光的字体效果,并且不会显得突兀。Shimmer最初是Facebook于今年1月所推出的Paper的开发过程中所使用到的工具,后被Facebook基于BSD许可协议开源,支持iOS 6及其以上系统。 相关链接:Shimmer的GitHub托管地址、mobilehub主页 3. Rebound Rebound是Facebook推出的一款Android的物理和动画库,于2013年10月在Mobile@Scale大会上正式发布,旨在解决笨重、缓慢的传统移动网络界面。Rebound基于BSD许可协议,兼容HTML5和Node.js。 Rebound不是一款通用物理库,但其弹簧模型在应用程序中引入了现实世界的物理,易于集成,创建的动画能够让人感觉到非常自然,可用于滚动条、切换开关、呼叫等场景下。 相关链接:Rebound官网、GitHub托管地址、mobilehub主页 4. Buck Buck是Facebook开发的一款开源Android Build工具,基于Apache License 2.0协议发布,可以通过独立构建并行来发挥多核的性能,加速开发者的Android应用构建流程。Buck基于单一的库构建,能够以最小的资源集重建,非常适用于Android项目组织与管理。 主要特性: 加速Android构建。充分发挥多核处理器的优势,并行构建独立模块。通过追踪没有变化的源文件,减少增量构建实践,最少化需要重建的资源。 对于不支持开箱即用的Android Ant编译脚本,引进ad-doc构建系统。 在构建系统里保持生成构建的逻辑,无需另外的系统生成构建文件。 基于构建规则生成一个Intellij项目,能同时匹配本地IDE以及无头文件编译开发。 支持单元测试,选用最均衡的方式获得代码覆盖率。 相关链接:Buck官网、Github托管地址、mobilehub主页 5. xctool xctool是Facebook推出的另一款开源的应用构建工具,基于Apache License 2.0协议发布,用于取代苹果的xcodebuild,来简化iOS和Mac项目的构建和测试。xctool对于持续集成可谓大有裨益,其最大的好处就是可以直接从命令行构建和运行单元测试。 xctool在xcodebuild的基础上还添加了一些额外的功能,比如支持将构建和测试结果结构化输出;界面友好,支持ANSI彩色输出;速度更快,支持进行并行测试,使得运行速度提升2~3倍等。xctool支持Xcode 5+,并且,在使用xctool时必须安装Xcode命令行工具。 主要特性: 作为Xcode.app运行相同的测试; 构建输出和测试结果均为JSON格式,无需解析输出; xctool只有在发现错误的时候才打印消息,而xcodebuild对每个源文件都会打印。 相关链接:xctool的GitHub托管地址、mobilehub主页**** 6. Conceal Conceal是一套用于Android平台上进行文件加密和鉴权的Java API,专为速度设计,小巧而高速。它使用了OpenSSL算法的子集和一些预先定义的选项,能够让库保持在较小的体积。通过它,开发者可以实现对手机、平板电脑SD卡中的数据以及大型文件进行加密和存储。 相关链接:Conceal官网、GitHub托管地址、mobilehub主页 7. Origami 在界面和交互设计上颇让人惊喜的Paper让Facebook的大量开源工具从幕后走向了台前,Origami即为其中之一。这个被盛赞为“交互神器”的设计师新宠,是Facebook设计团队花费了9个月时间开发的一款基于Quartz Composer的插件,能够让设计师无需编程,快速构建移动应用交互原型。 Origami为设计师提供了开关、滚动、弹性动画等一系列自定义控件,并对Quartz Composer进行了改善,比如支持Retina显示器、重新设计工具栏图标等,以帮助设计师更为轻便地实现应用原型交互。 相关链接:Origami官网、GitHub托管地址、mobilehub主页 8. Bolts(iOS / Android) Bolts是一个面向iOS和Android的底层库集合,分别为Bolts-iOS和Bolts-Android,由Facebook和Parse共同设计完成,于2014年1月基于BSD许可协议开源,其所有源码均托管到GitHub上。Bolts能够让移动应用开发变得更加简单,其组件与Parse及Facebook服务完全无关,因此,开发者无需拥有Parse或Facebook开发者账户即可直接使用。 相关链接:Bolts的Github托管地址、mobilehub主页 9. Facebook SDK(iOS / Android) ...

2014年4月29日 · 1 分钟 · 天边的星星

Android 平台推送方案

前段时间做的项目需要添加一个推送的功能,现在应用里边加入推送也很普遍,所以查了查相关的资料,总结了以下几种方案! 【1】使用XMPP协议(Openfire + Spark + Smack) 简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。 优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。 缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。 这种方法需要服务端配合,需要整合openfire服务器,我们的服务端用的php,而这个需要用Java,客户端的代码也需要花一段时间去研究,由于时间有限并没有使用这种方法。不过在后来的开发中,想在程序里加入类似于微信的语音聊天的功能,所以对于这种方式又进行了一段开发,以后我会写一篇文章介绍一下。 【2】使用MQTT协议 简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。 优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:http://mqtt.org/),且已有C++版的服务端组件rsmb。 【3】使用第三方推送服务 ** 1**.Google 云推送服务 鉴于国内的特殊情况,大部分国产手机都砍掉了Google服务,所以这种实现方式不太现实 **2. **百度云推送服务(http://open.baidu.com/) 这个推送方案实施起来比较简单,直接集成相关的sdk,就可以实现推送,而且服务端的sdk有PHP,Java,Python版本,也可以直接通过url推送相关消息 **3. **极光推送(https://www.jpush.cn/) 这个文档比较全,号称3分钟快速Demo,集成起来相对就简单多了 今天主要介绍一下第二种推送方案,之前查资料的时候没有找到百度云推送和极光推送,也是后来一个偶然的机会发现百度推出了云推送服务,今天总结一下,也希望以后各位朋友在开发中少走弯路, 1.首先下载rsmb包,并解压,找到对应服务器的文件夹,我的是linux_ia32,这个支持多种服务器 (下载地址:http://www.alphaworks.ibm.com/tech/rsmb,或者 http://pan.baidu.com/share/link?shareid=305439419&uk=137542493) 2.把目录及里面的文件上传到服务器上,(我的是linux服务器)进入到用命令行进入到该目录 然后自行 ./broker 如此这般便启动了推送服务, 3.准备推送页面(通过网页进行推送测试)下载PHP端的推送代码 (http://pan.baidu.com/share/link?shareid=311569022&uk=137542493),解压进入 etc目录更改 config.php里的IP地址为你的服务器IP地址 4.打开对应的url既可以看到如下的页面 Server status显示为 Online说明服务器正常启动了, 5.下面开始准备android客户端(下载地址https://github.com/tokudu/AndroidPushNotificationsDemo ) 启动推送服务,然后在上边的网页上把那一串字符输入到上边的输入框,下边输入要推送的内容 不幸的是报错了,错误如下 08-05 13:56:34.472: E/AndroidRuntime(30976): java.lang.VerifyError: com/tokudu/demo/PushService 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.tokudu.demo.PushActivity$1.onClick(PushActivity.java:32) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View.performClick(View.java:4240) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.view.View$PerformClick.run(View.java:17721) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.handleCallback(Handler.java:730) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Handler.dispatchMessage(Handler.java:92) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.os.Looper.loop(Looper.java:137) 08-05 13:56:34.472: E/AndroidRuntime(30976): at android.app.ActivityThread.main(ActivityThread.java:5103) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invokeNative(Native Method) 08-05 13:56:34.472: E/AndroidRuntime(30976): at java.lang.reflect.Method.invoke(Method.java:525) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 08-05 13:56:34.472: E/AndroidRuntime(30976): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-05 13:56:34.472: E/AndroidRuntime(30976): at dalvik.system.NativeStart.main(Native Method) ...

2014年4月25日 · 1 分钟 · 天边的星星

Android Push Notification实现信息推送使用

在上一篇文章中提到在Android中实现推送方式的解决方案,其中一个比较成熟的解决方案便是使用XMPP协议实现。而AndroidPn项目就是使用XMPP协议实现信息推送的一个开源项目。在这里给大家介绍其使用过程。 ** Apndroid Push Notification的特点: ** 快速集成:提供一种比C2DM更加快捷的使用方式,避免各种限制. 无需架设服务器:通过使用”云服务”,减少额外服务器负担. 可以同时推送消息到网站页面,android 手机 耗电少,占用流量少. ** 具体配置过程: ** 首先, 我们需要下载androidpn-client-0.5.0.zip和androidpn-server-0.5.0-bin.zip。 下载地址:http://sourceforge.net/projects/androidpn/ 解压两个包,Eclipse导入client,配置好目标平台,打开raw/androidpn.properties文件,配置客户端程序。 1. 如果是模拟器来运行客户端程序,把xmppHost配置成10.0.2.2[模拟器把10.0.2.2认为是所在主机的地址,127.0.0.1是模拟器本身的回环地址,10.0.2.1表示网关地址,10.0.2.3表示DNS地址,10.0.2.15表示目标设备的网络地址],关于模拟器的详细信息,大家可参阅相关资料,这里不再详述. xmppPort=5222 是服务器的xmpp服务监听端口 运行androidpn-server-0.5.0\bin\run.bat启动服务器,从浏览器访问http://127.0.0.1:7070/index.do (androidPN Server有个轻量级的web服务器,在7070端口监听请求,接受用户输入的文本消息) 运行客户端,客户端会向服务器发起连接请求,注册成功后,服务器能识别客户端,并维护和客户端的IP长连接。 ** 2. 如果是在同一个局域网内的其他机器的模拟器测试(或者使用同一无线路由器wifi上网的真机) ,则需要把这个值设置为服务器机器的局域网ip. ** ** 例如 你的电脑和android手机 都通过同一个无线路由器wifi上网, 电脑的ip地址为 192.168.1.2 而 手机的ip地址为 192.168.1.3, 这个时候 需要把这个值修改为 xmppHost=192.168.1.1 或是电脑的IP地址,就可以在手机上使用了. ** 如果是不在同一个局域网的真机测试,我们需要将这个值设置为服务器的IP地址。 ** 具体配置如下图所示:** ** 我的电脑IP是:192.168.8.107 ** 服务器运行主界面: 推送信息如下界面所示: 测试结果如下图所示: 最后在我的模拟器和真机中测试通过。^_^ 最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/16/2399655.html 谢谢。

2014年4月17日 · 1 分钟 · 天边的星星

XMPP协议实现原理介绍

**XMPP协议简介 ** XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。 在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1. 什么是XMPP ? XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 2. XMPP的基本网络结构是怎样的? XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 3. XMPP通过TCP传什么了? 传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。 XMPP协议工作原理: 4. XMPP协议地址格式: **5. XMPP消息格式: ** 6. 核心的XML流传输协议 基于XML FreeEIM流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 XMPP的扩展协议Jingle使得其支持语音和视频。 XMPP的官方文档时RFC 3920. 7. XMPP应用示例 举个例子看看所谓的XML流是什么样子的? 客户端:<?xml version=&#8217;1.0&#8242;?> <stream:stream to=&#8217;example_com&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> 服务器:<?xml version=&#8217;1.0&#8242;?> <stream:stream from=&#8217;example_com&#8217; id=&#8217;someid&#8217; xmlns=&#8217;jabber:client&#8217; xmlns:stream=&#8217;http_etherx_jabber_org/streams&#8217; version=&#8217;1.0&#8242;> &#8230;其他通信&#8230; 客户端:<message from=&#8217;juliet_example_com&#8217; to=&#8217;romeo_example_net&#8217; xml:lang=&#8217;en&#8217;> 客户端: <body>Art thou not Romeo, and a Montague?</body> 客户端:</message> 服务器:<message from=&#8217;romeo_example_net&#8217; to=&#8217;juliet_example_com&#8217; xml:lang=&#8217;en&#8217;> 服务器:<body>Neither, fair saint, if either thee dislike.</body> 服务器:</message> 客户端:</stream:stream> 服务器:</stream:stream> ...

2014年4月17日 · 1 分钟 · 天边的星星

Maven Android使用一

Maven的坐标包括:groupId、artifactId、version、packaging、classifier。 groupId:定义当前maven项目隶属的实际项目; artifactId:定义实际项目中的一个maven项目(模块); version:定义当前所处的模板; packaging:定义maven项目的打包方式; 依赖对应的元素Dependencies是dependency的负数形式,非常形象,它可以包含一个或者多个dependency。依赖也有它的一组子元素: groupId、artifactId、version:依赖的基本坐标; type:依赖的类型 scope:依赖的范围,用来控制依赖于编译classpath、测试classpath、运行classpath的关系,有compile、test、provided、runtime、import。 依赖是可传递的,如A->B,B->C,那么A->C。传递性依赖简化了依赖管理,但在带来好处的同时也给项目带来了很多隐性的依赖,也就是我们平时总会遇到的依赖冲突,经常需要排除依赖(exclusions)。 排查依赖最常用到的就是mvn dependency:tree命令,将当前项目的依赖树打出来查看。搜索发生冲突的依赖,排除其中多个依赖只留下唯一一个。 类似java的继承思想,抽取重复的配置,消除重复。Parent元素声明父模块,parent下的子元素groupId、artifactId、version定位父模块坐标。 Maven创建的Lib项目 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuLoginActivity 0.0.1-SNAPSHOT apklib//添加下面的build //plugins 就可以设置打包方式apk和apklib MeibuLoginActivity UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version}//代表上面properties中的 可以写成2.2.1等等 provided //依赖apklib关系 其中的version是你lib中的设置的版本例如0.0.1-SNAPSHOT com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.jayway.maven.plugins.android.generation2 android-maven-plugin ${android.plugin.version}//表示打包插件的版本号就是上面properties 中的<android.plugin.version>可以直接写里面的数字 true 8 创建Maven项目打包apk 依赖2个lib包,下面这个是配置文件,部分说明参考上面pom文件 <?xml version=*“1.0”* encoding=*“UTF-8”*?> xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;> 4.0.0 com.meibu MeibuTest 0.0.1-SNAPSHOT apk UTF-8</project.build.sourceEncoding> 2.2.1</platform.version> <android.plugin.version>3.6.0</android.plugin.version> com.google.android android ${platform.version} provided com.meibu MeibuBaseActivity 0.0.1-SNAPSHOT apklib com.meibu MeibuLoginActivity ...

2014年3月29日 · 1 分钟 · 天边的星星