zoukankan      html  css  js  c++  java
  • Android Studio里面配置Tesseract

    网上大多是eclipse的项目,因为我用的是AS,所以说一下怎么配置。

    身份证图片资料来自百度。

    一、导入相关文件

    其实我们不用自己编译,可以把别人项目编译好的jar包和so库直接拿来用。因为识别的效果只与字库有关,要识别什么字体自己选用字库就行。

    1、新建libs文件夹,导入jar包

    2、在main文件夹下新建jniLibs文件夹,把armxxxx两个文件复制过去。

    注意so库不能乱放,不然会出现java.lang.UnsatisfiedLinkError异常。

    3、我已经在github上提供了so库和jar包的资源了,可以直接下载使用。

    配置好的路径:

    二、实例代码

    1、要实现识别功能,手机下要放一个tessdata文件夹,这是我们的字库。我的github项目上提供了下载,包括中英文。

    2、直接在代码中调用api,传入字库路径和字库名字

    3、传入图片,获取结果

    4、识别需要一点时间,为了不让app开启就卡死,我用了handler

    5、因为要读取根目录下的tessdata文件,所以app得加上读取SD卡的权限,不然会报错

    public class MainActivity extends AppCompatActivity {
    
        private Bitmap srcBitmap;
        EditText editText;
        String result;
        Handler handler;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            handler = new Handler(){
    
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
    
                    editText.setText(result);
    
                }
            };
    
            editText = (EditText)findViewById(R.id.editText);
    
            srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
    
            new Thread(new Runnable() {
                @Override
                public void run() {
    
                    result = doOcr(srcBitmap,"/chi_sim");
                    Message msg = new Message();
                    handler.sendMessage(msg);
    
                }
            }).start();
    
    
    
    
    
    
    
    
    
    
    
        }
    
        /**
         * 进行图片识别
         *
         * @param bitmap
         *            待识别图片
         * @param language
         *            识别语言
         * @return 识别结果字符串
         */
        public String doOcr(Bitmap bitmap, String language) {
            TessBaseAPI baseApi = new TessBaseAPI();
    
            baseApi.init(getSDPath(), language);
    
            // 必须加此行,tess-two要求BMP必须为此配置
            bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
    
            baseApi.setImage(bitmap);
    
            String text = baseApi.getUTF8Text();
    
            baseApi.clear();
            baseApi.end();
    
            return text;
        }
    
    
    
        /**
         * 获取sd卡的路径
         *
         * @return 路径的字符串
         */
        public static String getSDPath() {
            File sdDir = null;
            boolean sdCardExist = Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
            if (sdCardExist) {
                sdDir = Environment.getExternalStorageDirectory();// 获取外存目录
            }
            return sdDir.toString();
        }
    
    
    }
    

    布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.binbin.tesseracttest.MainActivity">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/test"
    
            android:layout_centerHorizontal="true"
            android:layout_marginTop="103dp"
            android:id="@+id/imageView" />
    
    
    
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="识别结果"
            android:id="@+id/editText"
            android:layout_below="@+id/imageView"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="99dp" />
    </RelativeLayout>
    

     

    权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    

      

    三、效果图

    最后是Github上的项目地址:

     https://github.com/wzb19960208/TesseractSample

  • 相关阅读:
    如何最快速的找到页面某一元素所绑定的点击事件,并查看js代码
    Python3 实现 JS 中 RSA 加密的 NoPadding 模式
    Python实现京东自动登录
    使用Chrome或Fiddler抓取WebSocket包
    python的ws库功能,实时获取服务器ws协议返回的数据
    js遍历对象所有的属性名称和值
    selenium webdriver 实现Canvas画布自动化测试
    CE教程
    How to Get Text inside a Canvas using Webdriver or Protractor
    HTML <​canvas> testing with Selenium and OpenCV
  • 原文地址:https://www.cnblogs.com/wzben/p/5932331.html
Copyright © 2011-2022 走看看