我正在尝试在相机视图上打印识别的文本。我得到这个错误:
无法在尚未调用looper.prepare()的线程内创建处理程序
我做了一些关于这个问题的研究,但是尽管我不能回避这个问题,可能是因为运气好(我第一次尝试使用opencv和tesseract构建一个应用程序,我遇到了许多以前从未见过的错误)。请宽容一点。下面是我想使用toast的代码:
import android.content.Context;
import android.graphics.Bitmap;
import org.opencv.core.Mat;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;
import com.googlecode.tesseract.android.TessBaseAPI;
public class justOCR {
Bitmap bitmap;
protected Context context;
public justOCR(Context context){
this.context = context;
}
public static final String DATA_PATH = Environment
.getExternalStorageDirectory().toString() + "/sdcard/CameraTest/";
private static final String lang = null;
public void numPlateOCR(Mat plate){
bitmap=Bitmap.createBitmap(plate.width(), plate.height(), Bitmap.Config.ARGB_8888);
org.opencv.android.Utils.matToBitmap(plate, bitmap);
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
// Convert to ARGB_8888, required by tess
//byteArray = byteArray.copy(Bitmap.Config.ARGB_8888, true);
// _image.setImageBitmap( bitmap );
Log.v("baseApi", "Before baseApi");
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.setDebug(true);
//baseApi.init(DATA_PATH, lang);
baseApi.init("/sdcard/CameraTest/", "eng");
baseApi.setVariable("tessedit_char_whitelist", "1234567890");
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
// You now have the text in recognizedText var, you can do anything with it.
// We will display a stripped out trimmed alpha-numeric version of it (if lang is eng)
// so that garbage doesn't make it to the display.
Log.v("NUMBER", "OCRED TEXT: " + recognizedText);
//if ( lang.equalsIgnoreCase("eng") ) {
// recognizedText = recognizedText.replaceAll("[^a-zA-Z0-9]+", " ");
//}
recognizedText = recognizedText.trim();
if ( recognizedText.length() != 0 ) {
//TODO print or save to xml//
Toast.makeText(this.context, "***"+recognizedText+"***", Toast.LENGTH_SHORT).show();
}
}
}
谢谢你的帮助。
最佳答案
你不是想在uithread上祝酒,是另一个人说的。
但你看,这对你很重要:How to ask