登录

去注册 忘记密码?

登录

注册

去登录

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

获取注册验证码

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

基于OpenCV开源的微信二维码引擎移植的Android扫码识别库

jenly1314   2021-07-29 21:53   收藏

WeChatQRCode

基于OpenCV开源的微信二维码引擎移植的封装库。又一个扫码相关的轮子,之所以说又,是因为这样的轮子已经开源三个了;几个轮子之间的优缺点,各有千秋,请自寻选择(小孩子才做选择,我全都要)。

基于ZXing的扫码轮子 ZXingLite

基于MLKit的扫码轮子 MLKit

基于OpenCV的扫码轮子 WeChatQRCode

GIF 展示

暂时没有录制GIF,请直接下载Demo App查看并体验吧。

各Module相关说明

app

示例App:主要用于提供WeChatQRCode的演示效果

opencv

OpenCV:编译好的OpenCV(armeabi-v7a/libopencv_java4.so | 11.3MB)

wechat-qrcode

微信二维码识别:封装好的API,通过 WeChatQRCodeDetector 你可以很轻松的拥有OpenCV中开源的微信二维码识别功能

wechat-qrcode-scanning

微信二维码扫码:有了上面的微信二维码识别功能,基本的扫码相关界面还是需要有个的,扫码加识别完美搭配,依赖MLKit中的 mlkit-camera-core

wechat-qrcode-scanning 相当于MLKit中的 mlkit-camera-core的衍生库。

引入

Gradle:

  1. 在Project的 build.gradle 里面添加远程仓库
allprojects {
    repositories {
        //...
        mavenCentral()
    }
}
  1. 在Module的 build.gradle 里面添加引入依赖项
// OpenCV基础库(*必须)
implementation 'com.github.jenly1314.WeChatQRCode:opencv:1.0.0'

// 微信二维码识别功能(可选)
implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode:1.0.0'

// 微信二维码扫码功能(可选)
implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode-scanning:1.0.0'
//MLKit的Camera核心库(可选),如果您使用了wechat-qrcode-scanning,则必须依赖mlkit-camera-core库
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.1'

示例

初始化 OpenCVWeChatQRCodeDetector (建议在 ApplicationonCreate 方法中初始化)

        //初始化OpenCV
        OpenCV.initAsync(context)

        //初始化WeChatQRCodeDetector
        WeChatQRCodeDetector.init(context)

识别二维码 (wechat-qrcode中的WeChatQRCodeDetector)

    //识别二维码;results是一个List<String>集合,可能会有多个结果,如果只识别一个码,可以取List中第0个就可以
    val results = WeChatQRCodeDetector.detectAndDecode(bitmap)

通过继承 wechat-qrcode-scanning 中的 WeChatCameraScanActivity或者WeChatCameraScanFragment可以很轻松的实现扫码功能

class WeChatQRCodeActivity : WeChatCameraScanActivity() {

    companion object{
        const val TAG = "WeChatQRCodeActivity"
    }

    override fun onScanResultCallback(result: AnalyzeResult<List<String>>) {
        if(result.result.isNotEmpty()){
            //停止分析
            cameraScan.setAnalyzeImage(false)
            Log.d(TAG,result.result.toString())
            //一般需求都是识别一个码,所以这里取第0个就可以;有识别多个码的需求,可以取全部
            val text = result.result[0]
            val intent = Intent()
            intent.putExtra(MainActivity.SCAN_RESULT,text)
            setResult(RESULT_OK,intent)
            finish()
        }
    }

}

特别说明

因为 wechat-qrcode-scanning 依赖了 MLKit 中的 mlkit-camera-core,所以布局在使用上完全遵循 mlkit-camera-core 的使用方式。

布局示例 (这里贴出部分 MLKit 中的部分示例)

可自定义布局(覆写getLayoutId方法),布局内至少要保证有PreviewView,然后自己可根据需要添加的控件。

PreviewView 用来预览,布局内至少要保证有PreviewView,如果是继承BaseCameraScanActivity或BaseCameraScanFragment,控件id可覆写getPreviewViewId方法自定义

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.camera.view.PreviewView
        android:id="@+id/previewView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <!-- 只需保证有布局内有PreviewView即可,然后自己可根据需要添加的控件 -->
</FrameLayout>

更多使用详情,请查看app中的源码使用示例或直接查看 API帮助文档

相关推荐

MLKit 一个强大易用的工具包。通过ML Kit您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。

ZXingLite 基于ZXing库优化扫码和生成二维码/条形码功能,扫码界面完全支持自定义。

版本记录

v1.0.0:2021-7-24

  • WeChatQRCode初始版本

关于我

Name: Jenly

Email: jenly1314#gmail.com / jenly1314#vip.qq.com

CSDN: jenly121

CNBlogs: jenly

GitHub: jenly1314

Gitee: jenly1314

加入QQ群: 20867961



项目地址:https://github.com/jenly1314/WeChatQRCode