Android集成百度OCR图片文字识别——总结 - Go语言中文社区

Android集成百度OCR图片文字识别——总结


近期由于工作内容的需要,我要给项目集成一个图片文字识别功能,据说百度的不错,所以今天写一个关于百度OCR的集成总结,以便以后再次使用不用去看官方文档。

首先肯定是要在百度管理平台注册账号并登录,然后照常去添加应用,如下图
在这里插入图片描述
创建成功后查看应用详情,下载下方画框的license文件,备用
在这里插入图片描述
然后现在就是去下载SDK,解压完是这样子
在这里插入图片描述
这时候打开你的项目,将SDK中的libs里的ocr-sdk.jar放到app目录下的libs里面,之后在app下的src里面的main包里面创建一个assets包和一个jniLibs包,将你之前下载的license放到assets中,再将之前下载的SDK里的libs文件夹里面的四个文件统一复制放入jniLibs包中,如下图
在这里插入图片描述
之后右键项目导入SDK中的UI模块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选中ocr_ui,并点击确定,之后会弹出来几个警告
在这里插入图片描述
也很简单,把其中的compile改成implementation就行了
在这里插入图片描述
如果还报错的话,你就把ocr_ui的SDK版本调整到app的SDK版本就行,接着要在app的gardle的dependencies中添加implementation project(":ocr_ui")项目依赖
在这里插入图片描述
下面是我app的gradle的配置

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation project(":ocr_ui")
}

然后添加权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在这里插入图片描述
然后剩下的就是设置点击事件,跳转拍照,发送照片,收到数据进行回调,这里放MainActivity类和自定义OCRManager类以及和Ui模块的获取图片路径类和最后的页面布局。

public class MainActivity extends AppCompatActivity {
    final static String TAG = "OCR";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OCR.getInstance(this).initAccessToken(new OnResultListener<AccessToken>() {
            @Override
            public void onResult(AccessToken result) {
                // 调用成功,返回AccessToken对象
                String token = result.getAccessToken();
                Log.e(TAG,result.toString());
            }
            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError子类SDKError对象
                Log.e(TAG,error.toString());
            }
        }, getApplicationContext());
    }

    public void ocrClick(View view) {
        // 生成intent对象
        Intent intent = new Intent(MainActivity.this, CameraActivity.class);

        // 设置临时存储
        intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH, FileUtil.getSaveFile(getApplication()).getAbsolutePath());

        // 调用除银行卡,身份证等识别的activity
        intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_GENERAL);

        startActivityForResult(intent, 111);
    }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 111 && resultCode == Activity.RESULT_OK) {
            // 获取调用参数
            String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
            // 通过临时文件获取拍摄的图片
            String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();


            OCRManager.recognizeAccurateBasic(this, filePath, new OCRManager.OCRCallBack<GeneralResult>() {
                @Override
                public void succeed(GeneralResult data) {
                    // 调用成功,返回GeneralResult对象
                    String content = OCRManager.getResult(data);
                    Log.e(TAG,content + "");
                }

                @Override
                public void failed(OCRError error) {
                    // 调用失败,返回OCRError对象
                    Log.e(TAG,"错误信息:" + error.getMessage());
                }
            });
        }
    }
}
public class OCRManager {

    /**
     * 通用文字识别接口
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeGeneralBasic(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 通用文字识别参数设置
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用通用文字识别服务
        OCR.getInstance(context).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     * 通用文字识别接口(高精度版)
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeAccurateBasic(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 通用文字识别参数设置
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用通用文字识别服务
        OCR.getInstance(context).recognizeAccurateBasic(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     * 通用文字识别接口(含位置信息版)
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeGeneral(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 通用文字识别参数设置
        GeneralParams param = new GeneralParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用通用文字识别服务
        OCR.getInstance(context).recognizeGeneral(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     * 通用文字识别接口(高精度含位置信息版)
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeAccurate(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 通用文字识别参数设置
        GeneralParams param = new GeneralParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用通用文字识别服务
        OCR.getInstance(context).recognizeAccurate(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     * 通用文字识别接口(含生僻字版)
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeGeneralEnhanced(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 通用文字识别参数设置
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用通用文字识别服务
        OCR.getInstance(context).recognizeGeneralEnhanced(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     * 网络图片文字识别
     * @param context   上下文
     * @param filePath  图片路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeWebimage(Context context,String filePath,final OCRCallBack<GeneralResult> ocrCallBack){
        // 网络图片识别参数设置
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
        param.setImageFile(new File(filePath));

        // 调用网络图片识别服务
        OCR.getInstance(context).recognizeWebimage(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError ocrError) {
                ocrCallBack.failed(ocrError);
            }
        });
    }

    /**
     *银行卡识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeBankCard(Context context,String filePath,final OCRCallBack<BankCardResult> ocrCallBack){
        // 银行卡识别参数设置
        BankCardParams param = new BankCardParams();
        param.setImageFile(new File(filePath));

        // 调用银行卡识别服务
        OCR.getInstance(context).recognizeBankCard(param, new OnResultListener<BankCardResult>() {
            @Override
            public void onResult(BankCardResult result) {
                // 调用成功,返回BankCardResult对象
                ocrCallBack.succeed(result);
            }
            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 身份证识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeIDCard(Context context,String filePath,final OCRCallBack<IDCardResult> ocrCallBack){
        // 身份证识别参数设置
        IDCardParams param = new IDCardParams();
        param.setImageFile(new File(filePath));

        // 调用身份证识别服务
        OCR.getInstance(context).recognizeIDCard(param,  new OnResultListener<IDCardResult>() {
            @Override
            public void onResult(IDCardResult result) {
                // 调用成功,返回BankCardResult对象
                ocrCallBack.succeed(result);
            }
            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 行驶证识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeVehicleLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){
        // 行驶证识别参数设置
        OcrRequestParams param = new OcrRequestParams();
        // 设置image参数
        param.setImageFile(new File(filePath));
        // 设置其他参数
        param.putParam("detect_direction", true);
        // 调用行驶证识别服务
        OCR.getInstance(context).recognizeVehicleLicense(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 驾驶证识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeDrivingLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){
        // 驾驶证识别参数设置
        OcrRequestParams param = new OcrRequestParams();
        // 设置image参数
        param.setImageFile(new File(filePath));
        // 设置其他参数
        param.putParam("detect_direction", true);
        // 调用驾驶证识别服务
        OCR.getInstance(context).recognizeDrivingLicense(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 车牌识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeLicensePlate(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){
        // 车牌识别参数设置
        OcrRequestParams param = new OcrRequestParams();
        // 设置image参数
        param.setImageFile(new File(filePath));
        // 设置其他参数
        param.putParam("detect_direction", true);
        // 调用车牌识别服务
        OCR.getInstance(context).recognizeLicensePlate(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 营业执照识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeBusinessLicense(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){
        // 营业执照识别参数设置
        OcrRequestParams param = new OcrRequestParams();
        // 设置image参数
        param.setImageFile(new File(filePath));
        // 设置其他参数
        param.putParam("detect_direction", true);
        // 调用营业执照识别服务
        OCR.getInstance(context).recognizeBusinessLicense(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }

    /**
     * 通用票据识别
     * @param context   上下文
     * @param filePath  图片文件路径
     * @param ocrCallBack 请求回调
     */
    public static void recognizeReceipt(Context context,String filePath,final OCRCallBack<OcrResponseResult> ocrCallBack){
        // 通用票据识别参数设置
        OcrRequestParams param = new OcrRequestParams();
        // 设置image参数
        param.setImageFile(new File(filePath));
        // 设置其他参数
        param.putParam("detect_direction", true);
        // 调用通用票据识别服务
        OCR.getInstance(context).recognizeReceipt(param, new OnResultListener<OcrResponseResult>() {
            @Override
            public void onResult(OcrResponseResult result) {
                // 调用成功,返回OcrResponseResult对象
                ocrCallBack.succeed(result);
            }

            @Override
            public void onError(OCRError error) {
                // 调用失败,返回OCRError对象
                ocrCallBack.failed(error);
            }
        });
    }




    /**
     * 从返回内容中提取识别出的信息
     * @param result
     * @return
     */
    public static String getResult(ResponseResult result){
        String sb = result.getJsonRes();
        return sb;
    }

    /**
     * 图片识别统一回调接口
     */
    public interface OCRCallBack<T>{
        void succeed(T data);
        void failed(OCRError error);
    }
}
public class FileUtil {
    public static File getSaveFile(Context context) {
        File file = new File(context.getFilesDir(), "pic.jpg");
        return file;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:onClick="ocrClick"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

至此就完成了百度OCR的集成,其实也可以自己写页面,也可以根据需求修改了SDK中ui模块儿来完成。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/final__static/article/details/92648795
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-14 17:32:29
  • 阅读 ( 1009 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢