资料来源:Reading QR Codes Using the Mobile Vision API
最近的Google Play services SDK版本使得安卓开发者能创建识别二维码的app。
这个文章,将说明怎么来使用它。

必要环境:
最新版本的android studio
带相册的安卓设备

1.安装Google Play Services SDK
在项目的配件文件build.gradle中加入下列这句:

compile 'com.google.android.gms:play-services:7.8.0'

当你点击了Sync Now同步后,可能会报如下错误:
点击 Install repository and sync project 安装sdk

2.修改mainfest
在AndroidManifest.xml中加入下列代码,当你运行app时,它将会自动加入二维码库

<meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="barcode"/>

权限也是必须的:

<uses-permission android:name="android.permission.CAMERA" />

3.从图片中识别二维码
先在assets目录中加入一张带二维码的图片,这里命名为 myqrcode.jpg。
1)将图片读取后生成Bitmap对象
因为api接口需要将Bitmap做为参数,所以得先把图片转成Bitmap。
参考下列代码:

Bitmap myQRCode = BitmapFactory.decodeStream(getAssets().open("myqrcode.jpg"));

2)创建识别对象
通过创建BarcodeDetector的实例对象来识别二维码(or 条形码)。
获取BarcodeDetector实例代码:

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();        
注意这里默认是识别支持的条形码的。修改setBarcodeFormats 来指明需要识别的目标类型。

3)识别
通过早前的Bitmap 对象来创建Frame对象

Frame myFrame = new Frame.Builder().setBitmap(myQRCode).build();    

通过调用BarcodeDetector的detect方法来识别图片并生成一个带所有二维码信息的SparseArray

SparseArray<Barcode> barcodes = barcodeDetector.detect(myFrame);

每个item都是一个条码对象。其中的displayValue 字段是识别后的信息,可以打印看看。

if(barcodes.size() != 0) {// 打印扫描结果Log.d("My QR Code's Data", barcodes.valueAt(0).displayValue);
}

4.通过相机扫描识别
用相机来扫描识别二维码也是非常简单的。
下列写一个测试例子:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent"android:padding="16dp"><SurfaceView
        android:layout_width="640px"android:layout_height="480px"android:layout_centerVertical="true"android:layout_alignParentLeft="true"android:id="@+id/camera_view"/><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/code_info"android:layout_toRightOf="@+id/camera_view"android:textSize="20sp"android:layout_marginLeft="16dp"android:text="Nothing to read."android:layout_alignParentTop="true"/></RelativeLayout>

activity主要代码:

cameraView = (SurfaceView)findViewById(R.id.camera_view);
barcodeInfo = (TextView)findViewById(R.id.code_info);barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();cameraSource = new CameraSource.Builder(this, barcodeDetector).setRequestedPreviewSize(640, 480).build();cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {try {cameraSource.start(cameraView.getHolder());} catch (IOException ie) {Log.e("CAMERA SOURCE", ie.getMessage());}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {cameraSource.stop();}
});barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {@Overridepublic void release() {}@Overridepublic void receiveDetections(Detector.Detections<Barcode> detections) {final SparseArray<Barcode> barcodes = detections.getDetectedItems();if (barcodes.size() != 0) {// 因为receiveDetections在非UI线程中执行barcodeInfo.post(new Runnable() {    public void run() {barcodeInfo.setText(    barcodes.valueAt(0).displayValue);}});}}
});

运行app后,可以看到app能很快的识别出二维码。

结论:
这篇文章主要讲述怎么通过mobile vision api来识别带二维码的图片或用相机扫描识别二维码。
当然也可以识别其它商品条形码类似UPC-A and EAN-13。
如要学习更多的mobile vision API,请阅读官方文档:documentation

Google Play服务中的条码扫描识别相关推荐

  1. Google Play服务中的人脸检测

    资料来源:Face Detection in Google Play services 从Google Play服务版本7.8开始,提供一套更快更优秀的人脸检测的接口.这套接口在各种角度及各表情的脸部 ...

  2. VUE中:printJS使用,附带JsBarcode条码生成器,网页转图片html2canvas,base64上传保存处理,二维码生成库qrcode,二维码/条码扫描识别,domtoimage

    官网 JsBarcode官网 JsBarcode的GitHub-WIKI 我的项目需求只需要将配置好的HTML与CSS样式传入进去就好,较为简单. 九个月后html2canvas出现线上问题 设置了跨 ...

  3. Android从零开始:Google Play服务

    Google Play服务库使Android开发人员可以轻松连接并使用Google支持的功能,并向后兼容新功能. 使用Google Play服务有两个主要部分,即Google服务后端和客户端应用. 在 ...

  4. android 条码扫描控件,Android Zxing条码扫描自定义控件(附代码)

    团队要做一个项目,里面要用到条码扫描,搜了一下,知道了Zxing.这是一个开源的条码扫描程序.官方网站有完整的Android程序可下载.但是,如果想将扫描功能融合在自己开发的程序里,则需要理清设计的思 ...

  5. android 名片识别 简书,名片扫描识别API

    关键词:名片识别 移动端名片识别 云端名片识别 服务器端名片识别 名片识别SDK 名片识别api 一.名片识别背景 随着计算机技术的迅猛发展,电子化的名片变得越来越流行, 交换变得越来越方便.利用手机 ...

  6. 谷歌play 数据接口_如何检查,管理和清除Google Play服务存储的数据/缓存

    谷歌play 数据接口 Your phone stores a wealth of information such as apps you download, websites you visit, ...

  7. 申请Google Map服务

    要想使用Google Map,那么一定需要注册一个Google的通行证,注册地址: https://accounts.google.com/ServiceLoginAuth. 如果要申请Goolge ...

  8. APP拍照扫描识别银行卡SDK

    关键词:银行卡识别,银行卡号识别,ocr银行卡识别,银行卡识别SDK APP拍照扫描识别银行卡SDK 在互联网和大数据时代,为了高效.快速的抢占新增客户市场,银行.保险.移动支付.财务管理等众多领域. ...

  9. 【Android App】人脸识别中扫描识别二维码实战解析(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.扫描识别二维码 不仅可以利用zxing库生成二维码,同样利用zxing库可以扫描二维码并解析得到原始文本,此时除了给build.gradle添加如下一 ...

最新文章

  1. loadrunner-4-3报告摘要
  2. wxWidgets:wxSpinCtrlDouble类用法
  3. 二维绕任意点旋转_解析几何|对称,平移和旋转
  4. 联想小新air13pro重装系统_小新air13pro改win7系统 联想小新air13pro安装win7系统教程...
  5. unity 获取设备的GPS信息
  6. FFMpeg 滤镜中英文对照
  7. Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE
  8. 【RAM IP】RAM IP核简介及实验
  9. Python中的Monkey Patching (猴子补丁)
  10. 端到端OCR-ABCNet论文笔记
  11. 【时空序列】AAAI2021| 利用时空融合图神经网络进行交通流量预测
  12. 音频 Audacity使用技巧详解
  13. python获取图像的长和宽_tensorflow之读取jpg图像长和宽实例
  14. [转]SIFT,SURF,ORB,FAST 特征提取算法比较
  15. 如何调节华硕主板的风扇速度?ROG STRIX B250I
  16. Open3d-Point cloud (点云)
  17. HDU2955 01背包
  18. 【软件设计师】下午题
  19. ByteBridge数据标注平台:图像分类数据标注服务
  20. 计算某一年某一天是星期几

热门文章

  1. css3 高度最小100%,100%最小高度CSS布局
  2. 姚氏百万富翁 混淆电路_姚氏混淆电路原理简介
  3. Opencv深拷贝与浅拷贝
  4. suse linux c 编译环境,SUSE 11中安装GCC开发环境
  5. Android界面性能调优手册
  6. vue绑定数据之前 会看到源代码
  7. 手机短信验证码真的安全吗?
  8. 不少朋友在安装IDES 4.71的过程中都遇到了下面的出错提示:
  9. asp.net % = #区别
  10. django学习之路(五)站点管理admin - django - 一直很安静 - Powered by Discuz!