在日常的Android
开发中,我们肯定会有各种各样的图像识别的需求。我这篇博客分享一个能快速实现图像识别的开源库——Scanner
,希望能帮小伙伴们提升开发效率。
引入项目
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'
截止我发布博客,开源库版本是1.1.3
。开源库最新版本请看wiki
使用示例
XML设置识别器:
<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;
}
});
关于回调
属性 | 属性说明 |
---|---|
TYPE_CODE | 二维码/条码 |
TYPE_ID_CARD_FRONT | 身份证人头面 |
TYPE_ID_CARD_BACK | 身份证国徽面 |
TYPE_BANK_CARD | 银行卡 |
TYPE_LICENSE_PLATE | 车牌 |
TYPE_DRIVING_LICENSE | 驾驶证 |
type | 结果类型 |
path | 保存的图片路径 |
data | 数据 |
BankCardInfoBean
说明:
属性或者方法 | 说明 |
---|---|
cardNumber | 银行卡号 |
cardType | 银行卡(英文)类型 |
bank | 银行(英文)名称 |
getCNBankName | 获取银行(中文)名称 |
getBankId | 获取银行编号 |
getCNCardType | 获取银行卡(中文)类型 |
网友评论