Android opencv实现文字识别

Android 文字识别

        因为公司下个项目要用到OCR(光学字符识别),我们组leader就让我准备一下我的项目是主要参考的是tess_two Android图片文字识别,选拍照或者从本地相册选取照片,然后调用本地裁剪,最后开始识别,识别结果还可以,希望能对大家有帮助。先上图再说:

OCR文字识别离不开tesseract,tesseract是Google开源的OCR识别工具,因为tesseract是用C/C++实现的,要封装JavaAPI才能在Android上使用。tess-two就是前辈们封装了Android开发环境的tesseract配置。所以我们直接用tess-two就可以了,使用tess-two有两种办法:

第一种比较简单,直接在app的build.gradle下添加tess-two依赖库就可以了:

 

 compile 'com.rmtheis:tess-two:6.0.0'

 

第二种比较繁琐,想了解的朋友可以看下,不想了解的朋友直接跳过。

1.从官网下载tess-two:Android tess-two

2.给Androidstudio安装NDK,打开左上角File-->Settings,找到在 Appearance & Behavior下的System Settings,然后打开Android SDK-->SDK Tools

找到下面的NDK,点击下载,下载成功后打开File-->Project Structure,找到SDK Location,添加ndk-bundle路径(找到你自己下载的ndk-bundle路径),

3.此电脑右击属性-->高级系统设置-->环境变量,找到系统变量下的path路径,单击编辑-->新建,把你ndk-bundle路径添加进去。

 

 

4.打开终端(windows+R),输入cmd,进入你下载的tess-two目录下的jni文件夹下,运行ndk-build命令,会在tess-two文件夹下生成libs文件夹,libs文件夹里面是生成的.so文件。然后把tess-two生成的libs文件夹里面的文件拷贝到Androidstudio项目的app下,最后把tess-two\src下的com文件夹拷贝到自己项目src\main\java目录下,至此tess-two就可以使用了。

 

opencv使用:

下载opencv:opencv下载,这里有各种不同版本,你们可以到opencv官网下载

下载完成后,目录下的内容是这样的

opencv安装可以参考:opencv安装。注意:opencv下build.gradle下的参数设置必须和app下build.gradle参数设置一致,不然会报错!

下面是代码部分

 1。打开相册

 private void openAlbum() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_PHOTO);
    }

2 。启动相机

 private void openCamera() {
        imageUri = Uri.fromFile(new File(mFilePath));
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //传递你要保存的图片的路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intent, TAKE_PHOTO);
    }

其中imgUri是你拍照的图片的保存路径,DATAPATH是得到手机系统根目录,然后把拍摄的图片手机相册目录下,名字命名为photo.jpg

 private static final String DATAPATH = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + File.separator;
mFilePath = DATAPATH + "/DCIM/Camera/" + "photo.jpg";

3 。执行startActivityForResult后的回调函数

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == PICK_PHOTO) {
                imageUri = data.getData();
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setDataAndType(imageUri, "image/*");
                intent.putExtra("crop", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序
            } else if (requestCode == TAKE_PHOTO) {
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setDataAndType(imageUri, "image/*");
                intent.putExtra("crop", true);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序
            } else if (requestCode == CROP_PHOTO) {
                try {
                    srcBitmap = BitmapFactory.decodeStream(getContentResolver().
                            openInputStream(imageUri));
                    proSrc2Gray();
                    saveImage(mBitmap, "photo.jpg");
                    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                            Uri.fromFile(new File(mFilePath))));
                    if (mBitmap != null) {
                        showPicFileByLuban(mFilePath);
                        imgView.setImageBitmap(mBitmap); // 将裁剪后的照片显示出来
                        imgView.setVisibility(View.VISIBLE);
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
                            Uri.fromFile(new File(mFilePath))));

这个方法为更新图库,得到最新图片

4 。拍照图像处理,因为最后对图像二值化、腐蚀和膨胀的识别结果

  • 15
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值