二维码/条码识别身份证识别银行卡识别车牌识别图片文字识别黄图识别驾驶证(驾照)识别

Posted Wei_Leng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维码/条码识别身份证识别银行卡识别车牌识别图片文字识别黄图识别驾驶证(驾照)识别相关的知识,希望对你有一定的参考价值。

Scanner

项目地址:shouzhong/Scanner 

简介: 二维码/条码识别、身份证识别、银行卡识别、车牌识别、图片文字识别、黄图识别、驾驶证(驾照)识别

更多:作者   提 Bug   

标签:

>>> reset-###-

联系我

QQ 群 777891894(问题交流,答案:android

说明

识别库,识别器可选择,这里有你常用的二维码/条码识别,还有你可能用到的身份证识别、银行卡识别、车牌识别、图片文字识别、黄图识别、驾驶证识别,如果没有你想要的,可以自定义识别器。该库只识别扫描框内的图像,识别速率上大大提高,而且这个库比起其它的库就是解决了摄像头预览变形,预览页面高度自定义,你可以像常规一样整个页面都是预览,或者你可以选择在任何位置定义任何尺寸的预览,扫描框也高度自定义,你可以像常规一样居中,或者你也可以在预览的任何位置定义任何尺寸的扫描框(实际识别的扫描框和画上去的扫描框不一定是一样的,由你自己决定)。

效果图

下载 apk-demo

使用

依赖

implementation 'com.shouzhong:Scanner:1.1.3'

以下选择自己需要的

// zxing
implementation 'com.google.zxing:core:3.3.3'
// zbar
implementation 'com.shouzhong:ScannerZBarLib:1.0.0'
// 银行卡识别
implementation 'com.shouzhong:ScannerBankCardLib:1.0.3'
// 身份证识别
implementation 'com.shouzhong:ScannerIdCardLib:1.0.4'
// 车牌识别
implementation 'com.shouzhong:ScannerLicensePlateLib:1.0.3'
// 图片文字识别
implementation 'com.shouzhong:ScannerTextLib:1.0.0'
// 黄图识别
implementation 'com.shouzhong:ScannerNsfwLib:1.0.0'
// 驾驶证识别
implementation 'com.shouzhong:ScannerDrivingLicenseLib:1.0.1'
// 身份证识别(第二种方式)
implementation 'com.shouzhong:ScannerIdCard2Lib:1.0.0'

代码

基本使用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.shouzhong.scanner.ScannerView
        android:id="@+id/sv"
        android:layout_width="match_parent"
        android:layout_height="1080px"
        android:background="#000000"/>
</RelativeLayout>
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scanner);
    scannerView = findViewById(R.id.sv);
    scannerView.setViewFinder(new ViewFinder(this));
    scannerView.setSaveBmp(true);
    scannerView.setEnableZXing(true);
    scannerView.setEnableZBar(true);
    scannerView.setEnableBankCard(true);
    scannerView.setEnableIdCard(true);
    scannerView.setEnableLicensePlate(true);
    scannerView.setCallback(new Callback() 
        @Override
        public void result(Result result) 
            tvResult.setText("识别结果:\\n" + result.toString());
            scannerView.restartPreviewAfterDelay(2000);
        
    );


@Override
protected void onResume() 
    super.onResume();
    scannerView.onResume();


@Override
protected void onPause() 
    super.onPause();
    scannerView.onPause();

开启或者关闭某个识别器

// 启用 zxing 识别器
scannerView.setEnableZXing(true);
// 启用 zbar 识别器
scannerView.setEnableZBar(true);
// 启用银行卡识别器
scannerView.setEnableBankCard(true);
// 启用身份证识别器(这里只支持 2 代身份证)
scannerView.setEnableIdCard(true);
// 启用车牌识别
scannerView.setEnableLicensePlate(true);
// 启用驾驶证识别
scannerView.setEnableDrivingLicense(true);
// 启用身份证识别(第二种方式)
scannerView.setEnableIdCard2(true);

如果你想自定义识别器

scannerView.setScanner(new IScanner() 
    /**
     * 这里实现自己的识别器,并把识别结果返回
     *
     * @param data 矩形框内 nv21 图像数据
     * @param width 图像宽度
     * @param height 图像高度
     * @return
     * @throws Exception
     */
    @Override
    public Result scan(byte[] data, int width, int height) throws Exception 
        // 如果你想转为 Bitmap,请使用 NV21.nv21ToBitmap(byte[] nv21, int width, int height)
        return null;
    
);

这里没给默认的预览页面,需要自己自定义,请参考demo

回调说明

Result

属性说明
TYPE_CODE类型:二维码/条码
TYPE_ID_CARD_FRONT类型:身份证人头面
TYPE_ID_CARD_BACK类型:身份证国徽面
TYPE_BANK_CARD类型:银行卡
TYPE_LICENSE_PLATE类型:车牌
TYPE_DRIVING_LICENSE类型:驾驶证
type结果类型
path保存的图片路径
data数据
// 以下是对 data 的说明
// 当 type 为 TYPE_CODE,TYPE_BANK_CARD,TYPE_LICENSE_PLATE 时,data 为字符串
// 当 type 为 TYPE_ID_CARD_FRONT 时,data 为 json 字符串,格式如下

    "cardNumber": "21412412421",// 身份证号
    "name": "张三",// 姓名
    "sex": "男",// 性别
    "nation": "汉",// 民族
    "birth": "1999-01-01",// 出生
    "address": "地址"// 地址

// 当 type 为 TYPE_ID_CARD_BACK 时,data 为 json 字符串,格式如下

    "organization": "签发机关",// 签发机关
    "validPeriod": "20180101-20380101"// 有效期限

// 当 type 为 TYPE_DRIVING_LICENSE 时,data 为 json 字符串,格式如下

    "cardNumber": "43623446432",// 证号
    "name": "张三",// 姓名
    "sex": "男",// 性别
    "nationality": "中国",// 国籍
    "address": "地址",// 地址
    "birth": "1999-01-01",// 出生日期
    "firstIssue": "2018-01-01",// 初次领证日期
    "_class": "C1",// 准驾车型
    "validPeriod": "20180101-20240101"// 有效期限

BankCardInfoBean

属性或方法说明
cardNumber银行卡号
cardType银行卡(英文)类型
bank银行(英文)名称
getCNBankName获取银行(中文)名称
getBankId获取银行编号
getCNCardType获取银行卡(中文)类型

方法说明

ScannerView

方法名说明
setViewFinder扫描区域
setCallback扫码成功后的回调
setCameraDirection摄像头方向,后置为 Camera.CameraInfo.CAMERA_FACING_BACK,前置为 Camera.CameraInfo.CAMERA_FACING_FRONT
setEnableZXing是否启用 zxing 识别器,默认 false
setEnableZBar是否启用 zbar 识别器,默认 false
setEnableQrcode是否启动二维码识别,默认 true,只有在 zxing 或者 zbar 开启时有效
setEnableBarcode是否启动条码识别,默认 true,只有在 zxing 或者 zbar 开启时有效
setEnableBankCard是否启用银行卡识别器,默认 false
setEnableIdCard是否启用身份证识别器,默认 false
setEnableIdCard2是否启用身份证识别器(第二种方式),默认 false
setEnableDrivingLicense是否启用驾驶证识别器,默认 false
setEnableLicensePlate是否启用车牌识别器,默认 false
setScanner自定义识别器
onResume开启扫描
onPause停止扫描
restartPreviewAfterDelay设置多少毫秒后重启扫描
setFlash开启/关闭闪光灯
toggleFlash切换闪光灯的点亮状态
isFlashOn闪光灯是否被点亮
setShouldAdjustFocusArea设置是否要根据扫码框的位置去调整对焦区域的位置,部分手机不支持,默认 false
setSaveBmp设置是否保存识别的图片,默认 false
setRotateDegree90Recognition是否在原来识别的图像基础上旋转 90 度继续识别,默认 false

ScannerUtils

方法名说明
decodeCode二维码/条码识别,建议在子线程运行
decodeBank银行卡识别,建议在子线程运行
getBankCardInfo获取银行卡信息,请在子线程运行
decodeIdCard身份证识别,建议在子线程运行
decodeId2Card身份证识别(第二种方式),建议在子线程运行
decodeDrivingLicense驾驶证识别,建议在子线程运行
decodeLicensePlate车牌识别,建议在子线程运行
decodeText图片文字识别,请在子线程运行
decodeNsfw黄图识别,大于 0.3 可以说图片涉黄,建议在子线程运行
createBarcode条码生成,建议在子线程运行
createQRCode二维码生成,建议在子线程运行
addLogo往图片中间加 logo

NV21

方法名说明
nv21ToBitmapnv21 转 bitmap
bitmapToNv21bitmap 转 nv21

怎么把我的整个项目导进去

  1. 该项目使用 opencv-3.4.6,点击下载
  2. NDK 版本 r16
  3. 把 licennseplate 的 CMakeLists.txt 的第 12 行替换成自己的 opencv-android-sdk 的 JNI 路径
  4. 删除所有 gradle 里的 apply from: 'bintray.gradle'
  5. 删除 bankcard 的 build.gradle 里的 android->externalNativeBuild 以及 android->defaultConfig->ndk 和 externalNativeBuild 标签
  6. 删除 text 的 build.gradle 里的 android->externalNativeBuild 以及 android->defaultConfig->ndk 和 externalNativeBuild 标签
  7. 如果是 linux 用户,请在 licennseplate 的 build.gradle 添加以下
    android 
    ...
    defaultConfig 
       ...
       externalNativeBuild 
           cmake 
               cppFlags "-std=c++11"
               // linux 请添加以下
               arguments "-DANDROID_TOOLCHAIN=gcc", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_STL_FORCE_FEATURES=OFF"
           
       
    
    
    

注意事项

  1. so 资源只有 arm 格式的,ScannerDrivingLicenseLib 和 ScannerIdCard2Lib 无 arm64-v8a 格式

求 star

BaseLib,ui 开发基础包

Bridge,跨进程管理库

ScreenHelper,屏幕适配库

2022深度学习开发者峰会 5月20日13:00让我们相聚云端,共襄盛会!

以上是关于二维码/条码识别身份证识别银行卡识别车牌识别图片文字识别黄图识别驾驶证(驾照)识别的主要内容,如果未能解决你的问题,请参考以下文章

证件图像识别API接口应用广泛

借助百度OCR,实现一键识别图片中文字,就是这么酷!

移动端车牌识别与云端车牌识别的区别

为啥二维码放到图片上无法识别?

车牌识别技术在物联网中起到的作用

快号通车牌识别