продолжайте получать пустой кадр из CameraSource с пользовательским детектором - PullRequest
0 голосов
/ 23 декабря 2019

Я делаю детектор, который может получать кадры с камеры, чтобы обнаружить объект. Однако мой детектор всегда получает пустые кадры. CameraSource и Detector взяты из google.gms. Я прочитал https://developers.google.com/android/reference/com/google/android/gms/vision/Detector
Вот коды:
MainActivity:

package com.example.objectdetector;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private SurfaceView cameraPreview;
    private CameraSource cameraSource;

    ObjectDetector objectDetector;
    ObjectProcessor objectProcessor;

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

        if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[] {Manifest.permission.CAMERA}, 34);
            while (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {}
        }

        objectProcessor = new ObjectProcessor();
        objectDetector = new ObjectDetector(this);
        objectDetector.setProcessor(objectProcessor);

        cameraSource = new CameraSource.Builder(this, objectDetector)
                .setRequestedPreviewSize(1080, 1440)
                .build();

        cameraPreview = findViewById(R.id.cameraPreview);
        cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {

            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                    return ;
                }
                try{
                    cameraSource.start(holder);
                }catch (IOException e){
                    e.printStackTrace();
                }
            }

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

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
            }

        });

    }



}


ObjectDetector:

package com.example.objectdetector;

import android.content.Context;
import android.util.Log;
import android.util.SparseArray;

import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.Frame;

public class ObjectDetector extends Detector {

    Context context;

    public ObjectDetector(Context ctx) {
        context = ctx;
    }

    @Override
    public final SparseArray detect(Frame frame) {

        // This always shows 'true'
        Log.i("TAG", String.valueOf(frame.getBitmap() == null));

        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...