Я делаю детектор, который может получать кадры с камеры, чтобы обнаружить объект. Однако мой детектор всегда получает пустые кадры. 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;
}
}