2017-03-18 8 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 레벨에 필요한되었다. 감사합니다. –