我正在尝试使用Tesseract
在Android上构建OCR应用程序,但是当我保存图片时,应用程序崩溃了
这是我正在使用的代码:
public class Mainactivity extends AppCompatactivity {
Bitmap image;
private TessBaseAPI mTess;
String datapath = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//init image
image = BitmapFactory.decodeResource(getResources(),R.drawable.test_ara);
//initialize Tesseract API
String language = "ra";
datapath = getFilesDir()+ "/tesseract/";
mTess = new TessBaseAPI();
checkFile(new File(datapath + "tessdata/"));
mTess.init(datapath,language);
}
public void processImage(View view){
String OCRresult = null;
mTess.setImage(image);
OCRresult = mTess.getUTF8Text();
TextView OCRTextView = (TextView) findViewById(R.id.OCRTextView);
OCRTextView.setText(OCRresult);
}
private void checkFile(File dir) {
if (!dir.exists()&& dir.mkdirs()){
copyfiles();
}
if(dir.exists()) {
String datafilepath = datapath+ "/tessdata/ara.traineddata";
File datafile = new File(datafilepath);
if (!datafile.exists()) {
copyfiles();
}
}
}
private void copyfiles() {
try {
String filepath = datapath + "/tessdata/ara.traineddata";
AssetManager assetManager = getassets();
InputStream instream = assetManager.open("tessdata/ara.traineddata");
OutputStream outstream = new FileOutputStream(filepath);
byte[] buffer = new byte[1024];
int read;
while ((read = instream.read(buffer)) != -1) {
outstream.write(buffer,read);
}
outstream.flush();
outstream.close();
instream.close();
File file = new File(filepath);
if (!file.exists()) {
throw new FileNotFoundException();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是日志错误:
2019-11-09 12:31:15.792 10381-10381/? E/e.myapplicatio: No implementation found for void com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit() (tried Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit and Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit__)
2019-11-09 12:31:15.793 10381-10381/? D/AndroidRuntime: Shutting down VM
2019-11-09 12:31:15.795 10381-10381/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication,PID: 10381
java.lang.UnsatisfiedLinkError: No implementation found for void com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit() (tried Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit and Java_com_example_myapplication_googlecode_tesseract_android_TessBaseAPI_nativeclassInit__)
at com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.nativeclassInit(Native Method)
at com.example.myapplication.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:50)
at com.example.myapplication.Mainactivity.onCreate(Mainactivity.java:40)
at android.app.activity.performCreate(activity.java:7335)
at android.app.activity.performCreate(activity.java:7326)
at android.app.Instrumentation.callactivityOnCreate(Instrumentation.java:1275)
at android.app.activityThread.performLaunchactivity(activityThread.java:3119)
at android.app.activityThread.handleLaunchactivity(activityThread.java:3282)
at android.app.servertransaction.LaunchactivityItem.execute(LaunchactivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.activityThread$H.handleMessage(activityThread.java:1970)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.activityThread.main(activityThread.java:7156)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
为此,请指导我。
谢谢。