2017-03-18 5 views
-1

テキストを認識してスクリーンに表示するカメラでテキストスキャナアプリケーションを作成しようとしていますが、カメラを表示する代わりに黒い画面が表示されます。どうすればこの問題を解決できますか? 私のコードはここにテキストスキャナを作成するが、カメラの代わりに黒い画面を表示する

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()); 


                 } 
                }); 


               } 


              } 


             } 


      ); 


     } 

    } 
    } 

であると私はしたい他の事は頼みます。どちらがいいですか。これまたはテス2ライブラリー?

答えて

0

カメラを正しく停止しましたか?あなたの単一のタスクが高価ではないようにスレッドでカメラ機能を実行しようとします。私は問題があると思った理由は、実行時にあなたの許可を得ることです。 してみてくださいこの

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

+0

ええオハイオ州の権限は、上記の23 APIレベルのために必要とされました。ありがとうございました。 –

関連する問題