2017-03-18 2 views
-1

Ich versuche, eine Text-Scanner-Anwendung mit der Kamera, die Text und zeigt in Bildschirm zu erkennen. Aber statt der Kamera zeigt es einen schwarzen Bildschirm. Wie kann ich das lösen? Mein Code ist hiermachen Text-Scanner, aber zeigt schwarzen Bildschirm anstelle der Kamera

package com.myapp.game.easynepalirecharge; 

import android.Manifest; 
import android.app.ActionBar; 
import android.content.pm.PackageManager; 
import android.graphics.Camera; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.util.SparseArray; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.google.android.gms.vision.CameraSource; 
import com.google.android.gms.vision.Detector; 
import com.google.android.gms.vision.text.TextBlock; 
import com.google.android.gms.vision.text.TextRecognizer; 

import java.io.IOException; 

public class MainActivity extends AppCompatActivity { 
    SurfaceView cameraView; 
    TextView textView; 
    CameraSource cameraSource; 
    final int REQUESTCAMERAPERMISSION = 105; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull final int[] grantResults) { 
     switch (requestCode) { 

      case REQUESTCAMERAPERMISSION: 


           if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

            if (ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
             return; 
            } 

            try { 



             cameraSource.start(cameraView.getHolder()); 


            } catch (IOException e) { 
             e.printStackTrace(); 
            } 
           } 

          } 
         } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     cameraView = (SurfaceView) findViewById(R.id.surfaceView); 

     textView = (TextView) findViewById(R.id.textView); 

     TextRecognizer textRecognizer = new TextRecognizer.Builder(getApplicationContext()).build(); 

     if (!textRecognizer.isOperational()) { 
      Log.v("haha", "error not operational"); 
     } else { 

      cameraSource = new CameraSource.Builder(getApplicationContext(), textRecognizer). 
        setFacing(CameraSource.CAMERA_FACING_BACK) 
        .setRequestedPreviewSize(3840, 2160) 
        .setRequestedFps(2.0f) 
        .setAutoFocusEnabled(true) 
        .build(); 

      cameraView.getHolder().addCallback(new SurfaceHolder.Callback() { 
       @Override 
       public void surfaceCreated(SurfaceHolder holder) { 

           try { 
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
             // TODO: Consider calling 


             ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, REQUESTCAMERAPERMISSION); 
             cameraSource.start(cameraView.getHolder()); 

             return; 
            } 


           } catch (Exception e) { 
            e.printStackTrace(); 
           } 
          } 


       @Override 
       public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

       } 

       @Override 
       public void surfaceDestroyed(SurfaceHolder holder) { 


        cameraSource.stop(); 


       } 
      }); 

      textRecognizer.setProcessor(new Detector.Processor<TextBlock>() { 

              @Override 
              public void release() { 


              } 

              @Override 
              public void receiveDetections(Detector.Detections<TextBlock> detections) { 


               final SparseArray<TextBlock> items = detections.getDetectedItems(); 
               if (items.size() != 0) { 
                textView.post(new Runnable() { 
                 @Override 
                 public void run() { 

                  StringBuilder stringBuilder = new StringBuilder(); 
                  for (int i = 0; i <= items.size(); i++) { 
                   TextBlock item = items.valueAt(i); 
                   stringBuilder.append(item.getValue()); 
                   stringBuilder.append("\n"); 


                  } 

                  textView.setText(stringBuilder.toString()); 


                 } 
                }); 


               } 


              } 


             } 


      ); 


     } 

    } 
    } 

und eine andere Sache, die ich fragen will. Welches ist besser. Dies oder die tess zwei Bibliothek?

Antwort

0

haben Sie die Kamera ordnungsgemäß gestoppt. Versuchen Sie, Kamerafunktionen im Thread auszuführen, damit Ihre einzelne Aufgabe nicht teuer ist. Der Grund, warum ich dachte, Problem ist, dass Sie Ihre Erlaubnis zur Laufzeit erhalten. versuchen diese

https://developer.android.com/training/permissions/requesting.html

+0

oh ja die Erlaubnis wurde für über 23 API-Ebene benötigen. Danke hat meinen Tag gerettet! –

Verwandte Themen