package gt.otomat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.googlecode.tesseract.android.TessBaseAPI;
import com.googlecode.tesseract.android.*;
import android.graphics.Bitmap;
public class otomat extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gt_otomat);
public String detectText(Bitmap bitmap) {
TessDataManager.initTessTrainedData(context);
TessBaseAPI tessBaseAPI = new TessBaseAPI();
String path = "/mnt/sdcard/packagename/tessdata/tr.traineddata";
tessBaseAPI.setDebug(true);
tessBaseAPI.init(path, "tr");
tessBaseAPI.setImage(bitmap);
String text = tessBaseAPI.getUTF8Text();
Log.d(TAG, "Got data: " + result);
tessBaseAPI.end();
return text;
}
}
}
我在此代码中使用了teserract ocr库。但是我收到关于无法解析符号的错误;类似于bitmap
,text
和TessDataManager
。
如何解决此问题?我尝试了几种方法,但无法解决此问题
答案 0 :(得分:0)
好像您在onCreate
中有一个方法声明-请将其声明出来,否则IDE将不知道您在做什么。
public class otomat extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gt_otomat);
}
//Move this function out of onCreate()
public String detectText(Bitmap bitmap) {
TessDataManager.initTessTrainedData(context);
TessBaseAPI tessBaseAPI = new TessBaseAPI();
String path = "/mnt/sdcard/packagename/tessdata/tr.traineddata";
tessBaseAPI.setDebug(true);
tessBaseAPI.init(path, "tr");
tessBaseAPI.setImage(bitmap);
String text = tessBaseAPI.getUTF8Text();
Log.d(TAG, "Got data: " + result);
tessBaseAPI.end();
return text;
}
}
如果您使用的是Android Studio,通常可以通过在其上按Alt + Enter来解决任何红色花键,并获取要解决的选项列表,通常会导入所需的类
答案 1 :(得分:0)
在您的代码中,您需要创建TessDataManager.java类,它将包含您的文件夹目录,我从以下链接获得了引用:-
也许会对您有帮助。
TessDataManager.Java
public class TessDataManager {
static final String TAG = "DBG_" + TessDataManager.class.getName();
private static final String tessdir = "tesseract";
private static final String subdir = "tessdata";
private static final String filename = "eng.traineddata";
private static String trainedDataPath;
private static String tesseractFolder;
public static String getTesseractFolder() {
return tesseractFolder;
}
public static String getTrainedDataPath(){
return initiated ? trainedDataPath : null;
}
private static boolean initiated;
public static void initTessTrainedData(Context context){
if(initiated){
return;
}
File appFolder = context.getFilesDir();
File folder = new File(appFolder, tessdir);
if(!folder.exists()){
folder.mkdir();
}
tesseractFolder = folder.getAbsolutePath();
File subfolder = new File(folder, subdir);
if(!subfolder.exists()){
subfolder.mkdir();
}
File file = new File(subfolder, filename);
trainedDataPath = file.getAbsolutePath();
Log.d(TAG, "Trained data filepath: " + trainedDataPath);
if(!file.exists()) {
try {
FileOutputStream fileOutputStream;
byte[] bytes = readRawTrainingData(context);
if (bytes == null){
return;
}
fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(bytes);
fileOutputStream.close();
initiated = true;
Log.d(TAG, "Prepared training data file");
} catch (FileNotFoundException e) {
Log.e(TAG, "Error opening training data file\n" + e.getMessage());
} catch (IOException e) {
Log.e(TAG, "Error opening training data file\n" + e.getMessage());
}
}
else{
initiated = true;
}
}
private static byte[] readRawTrainingData(Context context){
try {
InputStream fileInputStream = context.getResources()
.openRawResource(R.raw.eng_traineddata);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int bytesRead;
while (( bytesRead = fileInputStream.read(b))!=-1){
bos.write(b, 0, bytesRead);
}
fileInputStream.close();
return bos.toByteArray();
} catch (FileNotFoundException e) {
Log.e(TAG, "Error reading raw training data file\n"+e.getMessage());
return null;
} catch (IOException e) {
Log.e(TAG, "Error reading raw training data file\n" + e.getMessage());
}
return null;
}
}
TestActivity.class
public class TestActivity extends AppCompatActivity {
private Context context;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.test);
context = this;
**// here pass your bitmap value.**
detectText(bitmap);
}
public String detectText(Bitmap bitmap) {
TessDataManager.initTessTrainedData(context);
TessBaseAPI tessBaseAPI = new TessBaseAPI();
String path = "/mnt/sdcard/packagename/tessdata/tr.traineddata";
tessBaseAPI.setDebug(true);
tessBaseAPI.init(path, "tr");
tessBaseAPI.setImage(bitmap);
String text = tessBaseAPI.getUTF8Text();
Log.d(TAG, "Got data: " + result);
tessBaseAPI.end();
return text;
}
}
在您的 build.gradle 中,更新您的库:-
implementation 'com.rmtheis:tess-two:9.0.0'
希望对您有帮助。 :)
答案 2 :(得分:0)
如果您使用的是第三方库,请确保已连接到良好的网络
尝试将Google Maven存储库添加到应用程序的build.gradle文件中:
repositories {
maven { url "https://maven.google.com" }
}
如果第1步不起作用,请从项目根文件夹中删除gradle,然后重新构建项目。
再试一次
转到>文件->其他设置->在构建,执行和部署下 ->您将看到Gradle。取消选中复选框离线工作