美文网首页Android工具类后端砖头
Android-推荐一款免费的识别开源库(Scanner)

Android-推荐一款免费的识别开源库(Scanner)

作者: 阿博聊编程 | 来源:发表于2022-09-15 22:51 被阅读0次
    图片来源网络,入侵必删

    在日常的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 获取银行卡(中文)类型

    相关文章

      网友评论

        本文标题:Android-推荐一款免费的识别开源库(Scanner)

        本文链接:https://www.haomeiwen.com/subject/ybbdortx.html