网上大多是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; }}
布局文件:
权限:
三、效果图