Распознавание текста 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;
}
Другие вопросы по тегам