圖片來源網(wǎng)絡(luò),入侵必刪
在日常的Android
開發(fā)中,我們肯定會(huì)有各種各樣的圖像識(shí)別的需求。我這篇博客分享一個(gè)能快速實(shí)現(xiàn)圖像識(shí)別的開源庫(kù)——Scanner
,希望能幫小伙伴們提升開發(fā)效率议泵。
引入項(xiàng)目
implementation 'com.shouzhong:Scanner:1.1.3'
上面的是基礎(chǔ)依賴,下面的是選擇性依賴:
// zxing
implementation 'com.google.zxing:core:3.3.3'
// zbar
implementation 'com.shouzhong:ScannerZBarLib:1.0.0'
// 銀行卡識(shí)別
implementation 'com.shouzhong:ScannerBankCardLib:1.0.3'
// 身份證識(shí)別
implementation 'com.shouzhong:ScannerIdCardLib:1.0.4'
// 車牌識(shí)別
implementation 'com.shouzhong:ScannerLicensePlateLib:1.0.3'
// 圖片文字識(shí)別
implementation 'com.shouzhong:ScannerTextLib:1.0.0'
// 黃圖識(shí)別
implementation 'com.shouzhong:ScannerNsfwLib:1.0.0'
// 駕駛證識(shí)別
implementation 'com.shouzhong:ScannerDrivingLicenseLib:1.0.1'
// 身份證識(shí)別(第二種方式)
implementation 'com.shouzhong:ScannerIdCard2Lib:1.0.0'
截止我發(fā)布博客桃熄,開源庫(kù)版本是1.1.3
先口。開源庫(kù)最新版本請(qǐng)看wiki
使用示例
XML設(shè)置識(shí)別器:
<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("識(shí)別結(jié)果:\n" + result.toString());
scannerView.restartPreviewAfterDelay(2000);
}
});
}
@Override
protected void onResume() {
super.onResume();
scannerView.onResume();
}
@Override
protected void onPause() {
super.onPause();
scannerView.onPause();
}
開啟或者關(guān)閉某個(gè)識(shí)別器:
// 啟用zxing識(shí)別器
scannerView.setEnableZXing(true);
// 啟用zbar識(shí)別器
scannerView.setEnableZBar(true);
// 啟用銀行卡識(shí)別器
scannerView.setEnableBankCard(true);
// 啟用身份證識(shí)別器(這里只支持2代身份證)
scannerView.setEnableIdCard(true);
// 啟用車牌識(shí)別
scannerView.setEnableLicensePlate(true);
// 啟用駕駛證識(shí)別
scannerView.setEnableDrivingLicense(true);
// 啟用身份證識(shí)別(第二種方式)
scannerView.setEnableIdCard2(true);
自定義識(shí)別器:
scannerView.setScanner(new IScanner() {
/**
* 這里實(shí)現(xiàn)自己的識(shí)別器,并把識(shí)別結(jié)果返回
*
* @param data 矩形框內(nèi)nv21圖像數(shù)據(jù)
* @param width 圖像寬度
* @param height 圖像高度
* @return
* @throws Exception
*/
@Override
public Result scan(byte[] data, int width, int height) throws Exception {
// 如果你想轉(zhuǎn)為Bitmap瞳收,請(qǐng)使用NV21.nv21ToBitmap(byte[] nv21, int width, int height)
return null;
}
});
關(guān)于回調(diào)
屬性 | 屬性說明 |
---|---|
TYPE_CODE | 二維碼/條碼 |
TYPE_ID_CARD_FRONT | 身份證人頭面 |
TYPE_ID_CARD_BACK | 身份證國(guó)徽面 |
TYPE_BANK_CARD | 銀行卡 |
TYPE_LICENSE_PLATE | 車牌 |
TYPE_DRIVING_LICENSE | 駕駛證 |
type | 結(jié)果類型 |
path | 保存的圖片路徑 |
data | 數(shù)據(jù) |
BankCardInfoBean
說明:
屬性或者方法 | 說明 |
---|---|
cardNumber | 銀行卡號(hào) |
cardType | 銀行卡(英文)類型 |
bank | 銀行(英文)名稱 |
getCNBankName | 獲取銀行(中文)名稱 |
getBankId | 獲取銀行編號(hào) |
getCNCardType | 獲取銀行卡(中文)類型 |