可以看到,这个项目除了扫码功能,还有其他各种各样的好用且免费的SDK,像是文字识别,人脸识别等等,都可以依赖这个项目轻松搞定。无奈小弟才疏学浅,只接触了该项目的扫码功能,等来日水平提升了,定将其他的功能也一一体验一遍

对了,这个项目除了Android端,还有IOS端的哦,感兴趣的IOS小伙伴可以自行参考

要使用这个项目,必不可少的,需要先引入工程

dependencies {
// …
// Use this dependency to bundle the model with your app
implementation ‘com.google.mlkit:barcode-scanning:16.1.1’
}

有google play条件的小伙伴,还可以选择添加google play的相关引用,甚至可以使用google play model

dependencies {
// …
// Use this dependency to use the dynamically downloaded model in Google Play Services
implementation ‘com.google.android.gms:play-services-mlkit-barcode-scanning:16.1.4’
}

<application …>

CameraX的支持当然也要一并加上

// 版本号
def camerax_version = “1.0.0-rc03”
// 对camera 及 camera2的支持,可自行选择
implementation “androidx.camera:camera-core:cameraxversion"implementation"androidx.camera:camera−camera2:{camerax_version}" implementation "androidx.camera:camera-camera2:cameraxv​ersion"implementation"androidx.camera:camera−camera2:{camerax_version}”

项目使用的是基于jetpack lifecycle的框架,所以加上lifecycle的支持

implementation “androidx.camera:camera-life
cycle:${camerax_version}”

预览用到了camerax自带的预览控件

implementation “androidx.camera:camera-view:1.0.0-alpha22”

接下来就是具体的代码实现了 首先,用到了相机及相册,自然需要添加相应的权限申请

ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE),REQUEST_PERMISSION)

先来看看扫码界面的实现,主要包含了预览的PreviewView及用于绘制扫码线条及扫码结果的ScanOverlay

<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width=“match_parent”
android:layout_height=“match_parent”
/>
<com.hsmedia.mlkitdemo.ScanOverlay
android:id="@+id/overlay"
android:layout_width=“match_parent”
android:layout_height=“0dp”
app:layout_constraintTop_toBottomOf="@id/iv_exit"
app:layout_constraintBottom_toTopOf="@id/tv_tips"
android:layout_marginBottom=“20dp”
android:layout_marginTop=“20dp”
/>

接下来看一下如何开启CameraX的预览

CameraX自带了检测相机是否可用的监听,可以在相机可用之后,再进行后续操作

cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()
bindScan(cameraProvider, overlay.width,overlay.height)
}, ContextCompat.getMainExecutor(this@BarcodeScanningActivity))

并且,CameraX绑定生命周期控件后,可以根据生命周期,自行释放相机,妈妈再也不用担心忘记关相机啦

val preview : Preview = Preview.Builder().build()

//绑定预览
preview.setSurfaceProvider(previewView.surfaceProvider)

//使用后置相机
val cameraSelector : CameraSelector = CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
//将相机绑定到当前控件的生命周期
camera = cameraProvider.bindToLifecycle(this as LifecycleOwner, cameraSelector, imageAnalysis, preview)

这样,就可以开启预览啦,可以注意到,代码中绑定到生命周期的时候,使用了一个imageAnalysis的useCases,而这,就是用于图片扫描的组件了

//配置图片扫描
val imageAnalysis = ImageAnalysis.Builder()
.setTargetResolution(Size(width, height))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()

光这样还不行,还需要为图片扫描配置解析扫码内容的解析器QRCodeAnalyser,说了这么多,终于要用到MLKit的二维码解析了 来看一下QRCodeAnalyser的具体实现

@SuppressLint(“UnsafeExperimentalUsageError”)
override fun analyze(imageProxy: ImageProxy) {
val mediaImage = imageProxy.image ?: kotlin.run {
imageProxy.close()
return
}
val image = InputImage.fromMediaImage(mediaImage, imageProxy.imageInfo.rotationDegrees)
detector.process(image)
.addOnSuccessListener { barCodes ->
if (barCodes.size > 0){
listener.invoke(barCodes[0],imageProxy.width,imageProxy.height)
//接收到结果后,就关闭解析
detector.close()
}
Codes ->
if (barCodes.size > 0){
listener.invoke(barCodes[0],imageProxy.width,imageProxy.height)
//接收到结果后,就关闭解析
detector.close()
}

仿微信二维码极速扫描(MLKit及CameraX初体验),面试宝典相关推荐

  1. 仿微信二维码极速扫描(MLKit及CameraX初体验),安卓消息分发机制

    } <application -> - CameraX的支持当然也要一并加上 // 版本号 def camerax_version = "1.0.0-rc03" // ...

  2. 基于zxing的仿微信二维码扫描界面

    基于zxing的仿微信二维码扫描界面 https://github.com/iamlocky/ZxingLite 本项目fork自yangxixi88/ZxingLite,在原项目基础上添加了本地图片 ...

  3. Android 基于google Zxing实现二维码 条形码扫描,仿微信二维码扫描效果

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 转载请注 ...

  4. Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新 ...

  5. 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/10163203 了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新 ...

  6. 微信二维码没有扫描id

    这个问题到不深,主要是想在这里记录下,加深自己印象. 在请求二维码时候四个参数.但是后面后面两个参数是一对一对的.也就是说 scene_str 和QR_STR_SCENE 是一对 scene_id 和 ...

  7. [android源码下载索引贴】微信+二维码那都不是事......

    微信: Android 简单仿微信朋友圈布局2014/09/02 http://www.eoeandroid.com/thread-542738-1-1.html [代码片段] 高仿摇一摇效果 201 ...

  8. Android 基于google Zxing实现对手机中的二维码进行扫描

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 我之前写了一篇关于google Zxing扫描二维码的文章,效果是仿微信 ...

  9. 开放平台–扫描微信二维码登录

    准备 如不了解第三方登录流程,建议先大概了解一下,在来看看代码. 说明: 由于开放平台无测试号测试,所以只能上开放平台进行配置信息.公众平台的测试号并不能给开放平台使用. 微信开放平台地址:https ...

最新文章

  1. 高cpu_实用脚本:检查高 CPU / 内存消耗进程 | Linux 中国
  2. 最短路径问题-Dijkstra算法的python实现
  3. linux命令history
  4. python三十一:random模块
  5. php-箭头r含义,php中-箭头的用法和意义
  6. linux算术表达式求值数据结构,数据结构:算数表达式求值演示
  7. 卷积神经网络(Convolutional Neural Networks,CNNS/ConvNets)
  8. JS静态变量和静态函数
  9. python类的定义与使用_Python15类的定义和使用
  10. 笑傲职场 不可缺少的五颗心.
  11. PHP沉思录之三:Smarty
  12. 用数组循环实现矩阵乘法php,C++一维数组实现矩阵的转置与乘法
  13. Redis是什么?怎么用?
  14. Zabbix监控端口
  15. 小A是大四的学生,还有半年就要毕业了
  16. 转载(生物分析专题网站(很全、实用))
  17. 查看bpl 引用的dll_BPL与DLL
  18. javascript 正则方法 exec()
  19. 智慧城市八大应用,助力城市更加智慧
  20. isEnable() 和 isDisplayed() 和 isSelected()

热门文章

  1. 全面理解Web3.0时代
  2. 为了下一代,抖音真的该关了---读<<我观察到的牛人有这三个特质>>有感
  3. otter实现数据同步,otter manger的安装
  4. java 两张图片叠加合并
  5. PMP备考大全:经典题库(6月第1周)
  6. PMP备考经典题库-敏捷专项练习题一(30道)
  7. 片上总线Wishbone 学习(二)Wishbone总线标准介绍
  8. DataTable常用数据筛选方法
  9. Hadoop Dynamometer工具详细教程,填坑日记
  10. Incorrect string value: ‘\xF0\x9F\x91\x82‘ for column ‘address‘ at row 1