android开发之局域网内屏幕共享+提取文字02:利用OCR提取文字

一、问题
从图片中提取文字
二、方法
借助百度的OCR接口实现,百度OCR接口文档
原理就是提供图片所在文件给百度的OCR接口,OCR接口返回数据
三、代码
1、具体增加依赖和包,请看百度OCR接口文档或者参考资料
2、获得Token
3、提交文件给OCR接口
4、接受数据
5、显示在TextView

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView textView = null;
String token = null;



    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            switch (msg.what) {
                case 100:
                    textView.setText(String.valueOf(msg.obj));
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.text);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(TextUtils.isEmpty(token)){

            OCR.getInstance(MainActivity.this).initAccessToken(new OnResultListener<AccessToken>() {
                @Override
                public void onResult(AccessToken result) {
                    // 调用成功,返回AccessToken对象
                     token = result.getAccessToken();

                    Log.e("MainActivity", "MainActivity onResult()" + token);

                }

                @Override
                public void onError(OCRError error) {
                    // 调用失败,返回OCRError子类SDKError对象
                    Log.d("path","获得token失败");
                    error.printStackTrace();
                }
            }, getApplicationContext());
                }

        // 获取内置SD卡路径
        String sdCardPath = Environment.getExternalStorageDirectory().getPath();
        // 图片文件路径
        String filePath = sdCardPath + File.separator + "shot.png";
        File file = new File(filePath);


// 通用文字识别参数设置,获得图片所在地址
        GeneralBasicParams param = new GeneralBasicParams();
        param.setDetectDirection(true);
        param.setImageFile(file);
        final StringBuffer sb = new StringBuffer();
// 调用通用文字识别服务
        OCR.getInstance(MainActivity.this).recognizeGeneralBasic(param, new OnResultListener<GeneralResult>() {
            @Override
            public void onResult(GeneralResult result) {
// 调用成功,返回GeneralResult对象
                for (WordSimple wordSimple : result.getWordList()) {
// wordSimple不包含位置信息
                    WordSimple word = wordSimple;
                    sb.append(word.getWords());
                    sb.append("\n");

                }
                Log.d("path","获得图片数据成功");
                Message msg = Message.obtain();
                msg.what = 100;
                msg.obj = sb.toString();
                mHandler.sendMessage(msg);

            }
            @Override
            public void onError(OCRError error) {
                error.printStackTrace();
                Log.d("path","获得图片数据失败");
// 调用失败,返回OCRError对象
            } });

        }

    }

Layout代码就不发了,就一个按钮和文本
参考资料:
百度OCR 文字识别 Android安全校验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值