Распознавание текста OCR Android: Ошибка запуска активности
Мне нужно использовать API распознавания текста от Google, чтобы распознать текст с помощью камеры. Я загружаю код, и он отлично работает. Но я разрабатываю проект, который должен идентифицировать определенное слово, которое сохраняется в глобальной переменной. У меня есть проблема, чтобы начать другое действие, когда слово определено. Вот часть кода, которая делает распознавание текста:
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import com.google.android.gms.samples.vision.ocrreader.ui.camera.GraphicOverlay;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.text.TextBlock;
/**
* A very simple Processor which gets detected TextBlocks and adds them to the overlay
* as OcrGraphics.
* TODO: Make this implement Detector.Processor<TextBlock> and add text to the GraphicOverlay
*/
public final class OcrDetectorProcessor extends Activity implements Detector.Processor<TextBlock> {
private GraphicOverlay<OcrGraphic> mGraphicOverlay;
OcrDetectorProcessor(GraphicOverlay<OcrGraphic> ocrGraphicOverlay, String word) {
// System.out.println("VARIAVEIL GLOBAL no detector:" + word);
// System.out.println("VARIAVEIL GLOBAL no detector da classe:" +s);
mGraphicOverlay = ocrGraphicOverlay;
// String lala = receiveDetections(ocrGraphicOverlay);
}
@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
mGraphicOverlay.clear();
System.out.println("CLEAR : " + mGraphicOverlay);
SparseArray<TextBlock> items = detections.getDetectedItems();
for (int i = 0; i < items.size(); ++i) {
TextBlock item = items.valueAt(i);
if (item != null && item.getValue() != null) {
Log.d("Processor", "Text detected! " + item.getValue());
String letra = item.getValue();
// get
// String s = ((MyApplication) this.getApplication()).getSomeVariable();
// System.out.println("Variavei global : "+s);
/*if(letra.equals(palavra))
{
System.out.println("LETRA : " +letra);
System.out.println("LETRA IDENTIFICADA");
}*/
Intent intent = new Intent(getApplicationContext(),Resultado.class);
startActivity(intent);
}
OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
mGraphicOverlay.add(graphic);
}
}
private String PalavraGerada() {
System.out.println("Veio no palavra gerada");
// get
String s = ((MyApplication) this.getApplication()).getSomeVariable();
return s;
}
@Override
public void release() {
mGraphicOverlay.clear();
}
}
Когда я пытаюсь начать другое действие, я получаю следующую ошибку:
11-03 13:23:14.347 21422-21852/com.google.android.gms.samples.vision.barcodereader E/OpenCameraSource: Exception thrown from receiver.
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:106)
at com.google.android.gms.samples.vision.ocrreader.OcrDetectorProcessor.receiveDetections(OcrDetectorProcessor.java:76)
at com.google.android.gms.vision.Detector.receiveFrame(Unknown Source)
at com.google.android.gms.samples.vision.ocrreader.ui.camera.CameraSource$FrameProcessingRunnable.run(CameraSource.java:1209)
at java.lang.Thread.run(Thread.java:818)
На самом деле мне не нужно начинать другое занятие, мне нужно сравнить распознавание текста с определенным словом.
Кроме того, когда я пытаюсь получить значение глобальной переменной, я получаю следующую ошибку:
11-03 13:29:18.029 23276-23495/com.google.android.gms.samples.vision.barcodereader E/OpenCameraSource: Exception thrown from receiver.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.android.gms.samples.vision.ocrreader.MyApplication.getSomeVariable()' on a null object reference
at com.google.android.gms.samples.vision.ocrreader.OcrDetectorProcessor.receiveDetections(OcrDetectorProcessor.java:66)
at com.google.android.gms.vision.Detector.receiveFrame(Unknown Source)
at com.google.android.gms.samples.vision.ocrreader.ui.camera.CameraSource$FrameProcessingRunnable.run(CameraSource.java:1209)
at java.lang.Thread.run(Thread.java:818)
Я действительно не знаю, как это исправить, и я ценю любую помощь. Спасибо
1 ответ
Проблема в том, что вы не можете получить контекст. Попробуйте передать объект контекста в качестве параметра в метод конструктора, например
private Context mContext;
OcrDetectorProcessor(GraphicOverlay<OcrGraphic> ocrGraphicOverlay, String word. Context context) {
mGraphicOverlay = ocrGraphicOverlay;
mContext = context;
}
Тогда в вашем методе
private String PalavraGerada() {
System.out.println("Veio no palavra gerada");
//String s = ((MyApplication) this.getApplication()).getSomeVariable();
String s = ((MyApplication)mContext).getSomeVariable();
// or try some other way to get your application.
return s;
}