All Projects → jenly1314 → WeChatQRCode

jenly1314 / WeChatQRCode

Licence: Apache-2.0 license
⛄ 基于OpenCV开源的微信二维码引擎移植的Android扫码识别库

Programming Languages

C++
36643 projects - #6 most used programming language
java
68154 projects - #9 most used programming language
c
50402 projects - #5 most used programming language
CMake
9771 projects
kotlin
9241 projects
objective c
16641 projects - #2 most used programming language

Projects that are alternatives of or similar to WeChatQRCode

Barcode
barcode.php - Generate barcodes from a single PHP file. MIT license.
Stars: ✭ 141 (-43.6%)
Mutual labels:  qrcode, qr-code
Offline Qr Code
📱 Browser add-on allowing you to quickly generate a QR code offline with the URL of the open tab or other text!
Stars: ✭ 193 (-22.8%)
Mutual labels:  qrcode, qr-code
Zxinglite
🔥 ZXing的精简版,优化扫码和生成二维码/条形码,内置闪光灯等功能。扫描风格支持:微信的线条样式,支付宝的网格样式。几句代码轻松拥有扫码功能 ,ZXingLite让集成更简单。(扫码识别速度快如微信)
Stars: ✭ 2,117 (+746.8%)
Mutual labels:  qrcode, qr-code
Qr Code With Logo
带头像(logo)的二维码(qrcode)生成工具,无jQuery依赖,自由调整大小
Stars: ✭ 104 (-58.4%)
Mutual labels:  qrcode, qr-code
kanban-board-app
Kanban style task management board app
Stars: ✭ 118 (-52.8%)
Mutual labels:  qrcode, qr-code
Awesomeqrcode
An awesome QR code generator for Android.
Stars: ✭ 1,718 (+587.2%)
Mutual labels:  qrcode, qr-code
Bardecoder
Detect and decode QR Codes, written in 100% Rust.
Stars: ✭ 145 (-42%)
Mutual labels:  qrcode, qr-code
Qr Ascii
A small library to generate QR codes with ascii
Stars: ✭ 63 (-74.8%)
Mutual labels:  qrcode, qr-code
qr-pirate
crawl QR-codes from search engines and look for bitcoin private keys
Stars: ✭ 58 (-76.8%)
Mutual labels:  qrcode, qr-code
Instascan
HTML5 QR code scanner using your webcam
Stars: ✭ 2,657 (+962.8%)
Mutual labels:  qrcode, qr-code
Qrbtf
An art QR code (qrcode) beautifier. 艺术二维码生成器。https://qrbtf.com
Stars: ✭ 1,391 (+456.4%)
Mutual labels:  qrcode, qr-code
QRCode-Generator-PHP-Class
🚀 QRCode PHP class (library). QR Code Generator using vCard 4.0 and the Google Chart API
Stars: ✭ 91 (-63.6%)
Mutual labels:  qrcode, qr-code
Awesome Qr.js
An awesome QR code generator written in JavaScript.
Stars: ✭ 1,247 (+398.8%)
Mutual labels:  qrcode, qr-code
React Qr Svg
React component for rendering SVG QR codes
Stars: ✭ 134 (-46.4%)
Mutual labels:  qrcode, qr-code
Vue Qrcode Reader
A set of Vue.js components for detecting and decoding QR codes.
Stars: ✭ 1,240 (+396%)
Mutual labels:  qrcode, qr-code
Segno
Python QR Code and Micro QR Code encoder
Stars: ✭ 144 (-42.4%)
Mutual labels:  qrcode, qr-code
Ngx Kjua
Angular QR-Code generator component using kjua.
Stars: ✭ 51 (-79.6%)
Mutual labels:  qrcode, qr-code
Qrcode
💮 amazing QRCode generator in Python (supporting animated gif) - Python amazing 二维码生成器(支持 gif 动态图片二维码)
Stars: ✭ 8,613 (+3345.2%)
Mutual labels:  qrcode, qr-code
Jsqr
A pure javascript QR code reading library. This library takes in raw images and will locate, extract and parse any QR code found within.
Stars: ✭ 2,722 (+988.8%)
Mutual labels:  qrcode, qr-code
QRCodeFX
Simple tool to generate/read QR Code and export it.
Stars: ✭ 31 (-87.6%)
Mutual labels:  qrcode, qr-code

WeChatQRCode

Download MavenCentral JitPack CI CircleCI API License Blog QQGroup

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

基于ZXing的扫码轮子 ZXingLite

基于MLKit的扫码轮子 MLKit

基于OpenCV的扫码轮子 WeChatQRCode

GIF 展示

暂时没有录制GIF。

你可以直接下载 演示App 体验效果

各Module相关说明

app

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

opencv

OpenCV:编译好的OpenCV

opencv-armv7a

OpenCV:armeabi-v7a 的libopencv_java4.so

opencv-armv64

OpenCV:arm64-v8a 的libopencv_java4.so

opencv-x86

OpenCV:x86 的libopencv_java4.so

opencv-x86_64

OpenCV:x86_64 的libopencv_java4.so

wechat-qrcode

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

wechat-qrcode-scanning

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

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

Java版本(点击查看java分支)

引入

Gradle:

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

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

// 微信二维码扫码功能(可选)
implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode-scanning:1.2.0'
//MLKit的Camera核心库:如果您使用了wechat-qrcode-scanning,则必须依赖mlkit-camera-core库
implementation 'com.github.jenly1314.MLKit:mlkit-camera-core:1.0.3'
  1. ABI过滤:在Module的 build.gradle 里面的 android{} 中设置支持的 SO 库架构(可选,支持多个平台的 so, 支持的平台越多,APK体积越大)
    defaultConfig {
    
        //...
        
        ndk {
            //设置支持的 SO 库架构(开发者可以根据需要,选择一个或多个平台的 so)
            abiFilters 'armeabi-v7a' // , 'arm64-v8a', 'x86', 'x86_64'
        }
    }

ABI过滤:根据需要选择支持的 SO 库架构

// OpenCV基础库(*必须)
implementation 'com.github.jenly1314.WeChatQRCode:opencv:1.2.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv7a:1.2.0'

// OpenCV的其他ABI(可选),根据你的需求选择想要的so支持
implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv64:1.2.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86:1.2.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86_64:1.2.0'

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

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

示例

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

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

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

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

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

识别二维码并返回二维码位置信息 (wechat-qrcode中的WeChatQRCodeDetector)

    // 扫码结果二维码的位置信息
    val points = ArrayList<Mat>()
    //通过WeChatQRCodeDetector识别图片中的二维码并返回二维码的位置信息
    val result = WeChatQRCodeDetector.detectAndDecode(bitmap, points)
    points.forEach { mat ->
        // 扫码结果二维码的四个点
        Log.d(TAG, "point0: ${mat[0, 0][0]}, ${mat[0, 1][0]}")
        Log.d(TAG, "point1: ${mat[1, 0][0]}, ${mat[1, 1][0]}")
        Log.d(TAG, "point2: ${mat[2, 0][0]}, ${mat[2, 1][0]}")
        Log.d(TAG, "point3: ${mat[3, 0][0]}, ${mat[3, 1][0]}")
    }

通过继承 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())
            // 当初始化 WeChatScanningAnalyzer 时,如果是需要二维码的位置信息,则会返回 WeChatScanningAnalyzer.QRCodeAnalyzeResult
            if(result is WeChatScanningAnalyzer.QRCodeAnalyzeResult){ // 如果需要处理结果二维码的位置信息

                val buffer = StringBuilder()
                val bitmap = result.bitmap.drawRect {canvas,paint ->
                    // 扫码结果可能有多个
                    for ((index,data) in result.result.withIndex()) {
                        buffer.append("[$index] ").append(data).append("\n")
                        result.points?.forEach { mat ->
                            // 扫码结果二维码的四个点
                            Log.d(TAG, "point0: ${mat[0, 0][0]}, ${mat[0, 1][0]}")
                            Log.d(TAG, "point1: ${mat[1, 0][0]}, ${mat[1, 1][0]}")
                            Log.d(TAG, "point2: ${mat[2, 0][0]}, ${mat[2, 1][0]}")
                            Log.d(TAG, "point3: ${mat[3, 0][0]}, ${mat[3, 1][0]}")

                            val path = Path()
                            path.moveTo(mat[0, 0][0].toFloat(), mat[0, 1][0].toFloat())
                            path.lineTo(mat[1, 0][0].toFloat(), mat[1, 1][0].toFloat())
                            path.lineTo(mat[2, 0][0].toFloat(), mat[2, 1][0].toFloat())
                            path.lineTo(mat[3, 0][0].toFloat(), mat[3, 1][0].toFloat())
                            path.lineTo(mat[0, 0][0].toFloat(), mat[0, 1][0].toFloat())
                            // 将二维码位置在图片上框出来
                            canvas.drawPath(path, paint)
                        }
                    }
                }

                val config = AppDialogConfig(this, R.layout.qrcode_result_dialog).apply {
                    content = buffer
                    onClickConfirm = View.OnClickListener {
                        AppDialog.INSTANCE.dismissDialog()
                        // 继续扫码分析
                        cameraScan.setAnalyzeImage(true)
                    }
                    onClickCancel = View.OnClickListener {
                        AppDialog.INSTANCE.dismissDialog()
                        finish()
                    }
                    val imageView = getView<ImageView>(R.id.ivDialogContent)
                    imageView.setImageBitmap(bitmap)
                }
                AppDialog.INSTANCE.showDialog(config,false)

            } else {

                //一般需求都是识别一个码,所以这里取第0个就可以;有识别多个码的需求,可以取全部
                val text = result.result[0]
                val intent = Intent()
                intent.putExtra(MainActivity.SCAN_RESULT,text)
                setResult(RESULT_OK,intent)
                finish()
            }

        }
    }

    override fun createAnalyzer(): Analyzer<MutableList<String>>? {
        // 分析器默认不会返回结果二维码的位置信息
//        return WeChatScanningAnalyzer()
        // 如果需要返回结果二维码位置信息,则初始化分析器时,参数传 true 即可
        return WeChatScanningAnalyzer(true)
    }

}

特别说明

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

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

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

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

关于扫码框动画,你可以直接拷贝MLKit中的ViewfinderView来使用,也可以自定义实现。

<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.2.0:2022-8-4

  • 更新OpenCV至v4.6.0

v1.1.1:2021-11-2

  • 优化细节
  • 更新mlkit-camera-core至v1.0.3

v1.1.0:2021-8-6

  • 编译多种ABI支持
  • 更新mlkit-camera-core至v1.0.2

v1.0.0:2021-7-24

  • WeChatQRCode初始版本

赞赏

如果您喜欢WeChatQRCode,或感觉WeChatQRCode帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 😃

您也可以扫描下面的二维码,请作者喝杯咖啡

关于我

Name: Jenly

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

CSDN: jenly121

CNBlogs: jenly

GitHub: jenly1314

Gitee: jenly1314

加入QQ群: 20867961

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].