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

article/2025/10/10 4:43:54

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.ScannerViewandroid: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() {@Overridepublic 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*/@Overridepublic 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,屏幕适配库


http://chatgpt.dhexx.cn/article/7k8SbEWM.shtml

相关文章

身份证、银行卡、车牌、图片文字识别、黄图识别、驾驶证识别库实现功能

预览图效果&#xff1a; 原文来自&#xff1a;http://code.662p.com/view/19388.html &#xff0c;需要自己去下载就可以了。 使用 依赖 implementation com.shouzhong:Scanner:1.1.3以下选择自己需要的 // zxing implementation com.google.zxing:core:3.3.3 // zbar imp…

黄图识别-open nsfw

大楷简介&#xff1a; open nsfw是一款开源的黄图识别的模型。对的&#xff0c;只是模型。并且有有python的代码作为预测图片是否黄图。 https://github.com/yahoo/open_nsfw 这里网址。 open nsfw是雅虎开源项目caffeonspark&#xff0c;使用深度学习训练得到caffe模型。ns…

计算机无法对NAS硬盘操作,使用计算机为Synology NAS安装DSM操作系统

Synology NAS由硬件&#xff0c;系统和应用程序套件组成. Synology最著名的是DSM操作系统. DSM操作系统是Synology开发的用于存储的智能操作系统. 它不仅功能强大&#xff0c;而且在DSM中可用. 在操作系统上安装各种应用程序包&#xff0c;以满足您的需求. 可以通过手机或计算机…

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制&#xff08;PCM&#xff09;ADC受到了制造工艺的限制&#xff0c;无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺…

黑群晖 DSM 6.2 3617 成功安装教程

黑群晖简介&#xff1a; 黑群晖指的是不是购买正规的群晖的nas 而是在普通电脑上装群晖nas的系统。从硬件来说&#xff0c;群晖本来就是软阵列&#xff0c;和普通PC的软阵列比&#xff0c;没多大分别&#xff1b;黑群晖给你一个打包好的nas&#xff0c;功能全面的轻量化系统&am…

趋势DSM安装

1、基础环境准备 ①准备一台虚拟机&#xff0c;操作系统&#xff1a;CentOS 7.9(带图形) 4vCPU&#xff0c;16GB内存&#xff0c;200GB存储。 ②虚拟机需要安装数据库(支持MSSQL/Oracle/PostgreSQL)和Java环境。 ③本次环境以PostGreSQL位例&#xff0c;进行安装。 2、Pos…

dsm操作系统服务器,DSM 5.1操作系统提供以下新功能

DSM 5.1操作系统提供以下新功能 DSM 5.1操作系统提供以下新功能&#xff1a; 一、打造你的多媒体娱乐中心 DSM 5.1公开分享功能的覆盖范围遍及多媒体内容、档案与数字笔记&#xff0c;NAS上的档案仅通过一键产生网址的方式就能够实时和他人分享。此外&#xff0c;Video Station…

用户DSN、系统DSN、文件DSN的区别

“ODBC数据源管理器”提供了三种DSN&#xff0c;分别为用户DSN、系统DSN和文件DSN。 文件DSN&#xff1a;是建立一个 DSN 的文件&#xff0c; 信息存在文件里。只能由配置该DSN的用户使用或只能在当前的计算机上使用。 系统DSN&#xff1a;是建立一个系统级的DSN&#xff0c…

黑群晖DSM安装教程及详细配置

本文同步发布在个人博客&#xff1a;YouForever - 专注于互联网分享 欢迎访问 为什么要安装黑群晖 先说说什么是NAS服务器&#xff0c;简单来说就是一个网络存储器&#xff0c;你可以存放音乐、视频、文件等&#xff0c;方便地从各个设备进行访问。而群晖的Synology DSM&#…

nDSM、CHM、DTM、DEM、DSM,剪不断、却理得清

nDSM、CHM、DTM、DEM、DSM&#xff0c;剪不断、却理得清 目前&#xff0c;围绕地形产品这一主题&#xff0c;在测绘、地理信息、林业与生态、地质、土木工程等领域普遍存在DTM、DEM、DSM、nDSM、CHM、DCM等英文缩写词。这些缩写的英文专业名词往往被混淆&#xff0c;即使是部分…

如何通过ABB代理程序备份群晖DSM系统

Active Backup for Business代理程序仅支持7.1系统&#xff0c;6.2系统及虚拟DSM系统不支持。 适用机型 备份还原限制 目的地 NAS 必须为与来源 NAS 相同机种或为后续机种&#xff0c;方可进行系统还原 (例&#xff1a;DS218 可还原至另一台 DS218 或 DS220)。目的地 NAS 所安…

把“友商”装进芯里威联通运行黑群晖最新DSM系统

原文网址&#xff1a;http://www.nasyun.com/forum.php?modviewthread&tid30334&fromuid106494 (出处: NAS云论坛) 接触过威联通NAS的玩家可能知道&#xff0c;威联通X86架构的机型NAS&#xff0c;支持在NAS系统中运行虚拟机软件&#xff0c;从而在里面虚拟化运行各种…

DBMS(数据库管理系统)的功能

DBMS是数据库系统中重要的组成部分&#xff0c;比如用户在数据库中的增删改查操作以及各种控制都是由DBMS进行的。简单来讲&#xff0c;DBMS可以帮助用户、满足用户的需要&#xff0c;从抽象逻辑数据转换成计算机的物理数据&#xff0c;给用户带来很大的便利。 DBMS的主要功能 …

DSM -- 进入linux文件系统

将DSM 设置为SSH可用。 在DSM中 &#xff1a;控制面板 --》 选择 终端机和SNMP --》 选中 启动ssh 将windows的SSH客户端启动。&#xff08;默认windows是关闭的&#xff09; 见 &#xff1a;http://www.blogbus.com/amazingxiu-logs/242929522.html 下载Xshell远程登陆工…

DSS系统架构

2019独角兽企业重金招聘Python工程师标准>>> 基于数据库技术的DSS的解决方案&#xff1a; 数据仓库、OLAP和数据挖掘是作为三种独立的信息处理技术出现的。数据仓库用于数据的存储和组织&#xff0c;OLAP集中于数据的分析&#xff0c;数据挖掘则致力于知识的自动发现…

在群晖 DSM 7.0 系统上如何安装 Plex Media Server

从DSM 6.2 升级到 DSM 7.0 Beta 后 plex 提示修复却无法修复 新版的DSM 7.0 发布后&#xff0c;我第一时间做了升级&#xff0c;升级之后几乎全部的第三方套件都不兼容&#xff0c;官方套件也都处于bate 版&#xff0c;测试阶段。PLEX 在 DSM 预览版阶段就开始了对新的群晖系统…

数据库管理系统(DBMS)

目录 一.数据库管理系统 1.简介 2.层级结构 3.DBMS的组成 &#xff08;1&#xff09;语言编译处理程序 &#xff08;2&#xff09;系统运行控制程序 &#xff08;3&#xff09;系统建立、维护程序 &#xff08;4&#xff09;数据字典 4.DBMS的功能 &#xff08;1&…

DTM、DEM与DSM的区别

DTM、DEM与DSM的区别 1&#xff09;DTM&#xff08;Digital Terrain Model&#xff09; 数字地形&#xff08;或地面&#xff09;模型&#xff08;DTM, Digital Terrain Model&#xff0c;缩写DTM&#xff09;最初是为了高速公路的自动设计提出来的&#xff08;Miller&#xff…

DTM、DEM与DSM的区别及其他

本文转自博客&#xff1a;http://blog.sciencenet.cn/blog-200036-504446.html 1、缘起 2012年1月23-25日将在俄斯特拉发&#xff08;Ostrava&#xff09;<捷克和斯洛伐克中北部城市>举办“Surface models for geosciences”国际大会&#xff0c;我一师妹将其翻译为“地…

巴西大神开发的 ARPL 黑群晖DSM系统引导在线编译工具

ARPL 是一款黑群晖系统引导在线编译工具&#xff0c;目前支持最新群晖系统DSM 7.1.1&#xff0c;今天为了折腾升级这个群晖系统DSM 7.1.1浪费了一天的时间&#xff0c;ARPL是巴西人一位大神开发的黑群晖系统引导在线编译工具&#xff0c;使用下来非常的不错&#xff0c;可惜没有…