一款Android识别的APP
写这个app的初衷是最近这一两年一直针对OCR识别在学习研究
- 背景:由于https://github.com/rmtheis/android-ocr 该项目由于作者已经不再维护,迫于无奈,引用作者的项目基础继续开发。
- 采用google的tesseract开源框架。
- 什么是tesseract:
Tesseract最初由惠普实验室支持,用于电子版文字识别,1996年被移植到Windows上,1998年进行了C++化,在2005年Tesseract由惠普公司宣布开源。2006年到现在,由Google公司维护开发。一款图像识别的框架。 - 由于项目多年未再维护更新导致Android高版本权限问题 进入APP直接崩溃。故增加Android6.0以后的动态权限功能,使得兼容已知所有版本,使用方便。
- 部分代码:
权限部分
AndroidManifest.xml 中必不可少的权限,摄像头、网络、写入本地化存储
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
增加一个欢迎界面处理Android6.0以后动态申请权限逻辑
package edu.sfsu.cs.orange.ocr;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import edu.sfsu.cs.orange.ocr.utils.PermissionHelper;
public class WelcomeActivity extends Activity {
/********** is above android 6.0 request permission*******************************************************/
static final int PERMISSION_REQUEST_CODE = 5;
private String[] permissions= new String[]{Manifest.permission.CAMERA, Manifest.permission.INTERNET, Manifest.permission.WRITE_EXTERNAL_STORAGE};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(PermissionHelper.checkPermission(this,permissions)){
startActivity(new Intent(this, CaptureActivity.class));
}else{
PermissionHelper.requestPermission(this,permissions , PERMISSION_REQUEST_CODE);
}
}else{
startActivity(new Intent(this, CaptureActivity.class));
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
boolean isAllGranted = true;
for (int grant : grantResults) {
if (grant != PackageManager.PERMISSION_GRANTED) {
isAllGranted = false;
break;
}
}
if (isAllGranted) {
startActivity(new Intent(this, CaptureActivity.class));
} else {
PermissionHelper.requestPermission(this, permissions, PERMISSION_REQUEST_CODE);
}
}
}
}
权限工具类
package edu.sfsu.cs.orange.ocr.utils;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
public class PermissionHelper {
@TargetApi(Build.VERSION_CODES.M)
public static void requestPermission(Activity context, String[] permissions, int requestCode) {
for (int i = 0; i < permissions.length; i++) {
if (context.checkSelfPermission(permissions[i]) != PackageManager.PERMISSION_GRANTED) {
context.requestPermissions(new String[]{permissions[i]}, requestCode);
}
}
}
@TargetApi(Build.VERSION_CODES.M)
public static boolean checkPermission(Activity context, String[] permissions) {
for (String permission : permissions) {
if (context.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
具体项目地址:持续更新
https://github.com/jambestwick/android-ocr