簡體   English   中英

如何分析我在 PreviewView (Camerax) 中看到的內容?

[英]How to analyze that what i see in PreviewView (Camerax)?

我是新來的,所以首先我想說“大家早上好”; ;)

現在我想描述我的問題。 我使用CameraXPreviewViewImageAnalyzer 我的PreviewView不在整個屏幕上,而是在單獨的 window 中。 看圖片

我只想分析我在預覽視圖中看到的內容,但即使我在PreviewView不到,Analyzer 也會讀取條形碼。 是否可以獲得我在PreviewView中看到的條形碼,換句話說,只分析PreviewView而不是整個屏幕? 先感謝您。

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

        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 3);
        mPreviewView = findViewById(R.id.viewFinder);
        detector = FirebaseVision.getInstance()
                .getVisionBarcodeDetector();
        cameraProviderFuture.addListener(() -> {
            try {
                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();

                bindPreview(cameraProvider);
            } catch (ExecutionException | InterruptedException e) {
                // No errors need to be handled for this Future.
                // This should never be reached.
            }
        }, ContextCompat.getMainExecutor(this));

    }

    @SuppressLint("RestrictedApi")
    private void bindPreview(ProcessCameraProvider cameraProvider) {
        Preview preview = new Preview.Builder()
               // .setTargetResolution(new Size(1920, 1680))
                .setTargetAspectRatio(AspectRatio.RATIO_16_9)
                .build();


        CameraSelector cameraSelector = new CameraSelector.Builder()
                .requireLensFacing(CameraSelector.DEFAULT_BACK_CAMERA.getLensFacing())
                .build();




        ImageAnalysis imageAnalysis =
                new ImageAnalysis.Builder()

                        .setMaxResolution(new Size(150, 200))


                        .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                        .build();







        imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), new ImageAnalysis.Analyzer() {
            @Override
            public void analyze(@NonNull ImageProxy image) {
                int rotationDegrees = image.getImageInfo().getRotationDegrees();
                int rotation = degreesToFirebaseRotation(rotationDegrees);

                @SuppressLint("UnsafeExperimentalUsageError") Image getImage = image.getImage();
               // Log.i("Format", getImage.getCropRect()+"");
                FirebaseVisionImage firebaseVisionImage = FirebaseVisionImage.fromMediaImage(getImage, rotation);
                detector.detectInImage(firebaseVisionImage)
                        .addOnSuccessListener(new OnSuccessListener<List<FirebaseVisionBarcode>>() {
                            @Override
                            public void onSuccess(List<FirebaseVisionBarcode> barcodes) {

                                if (!barcodes.isEmpty()) {
                                    Rect bounds = barcodes.get(0).getBoundingBox();
                                    Paint myPaint = new Paint();

                                    Canvas can = new Canvas();
                                    myPaint.setColor(Color.rgb(255, 0, 0));
                                    myPaint.setStrokeWidth(200);
                                    can.drawRect(bounds, myPaint);
                                    Log.i("Result", bounds+ "");
                                    //imageAnalysis.clear();
                                }

                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                // Task failed with an exception
                                // ...
                            }
                        });
                image.close();
            }

        });

        mPreviewView.setPreferredImplementationMode(PreviewView.ImplementationMode.SURFACE_VIEW);
mPreviewView.setScaleType(PreviewView.ScaleType.FIT_CENTER);
        preview.setSurfaceProvider(mPreviewView.createSurfaceProvider());
        Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, imageAnalysis, preview);





    }

    private int degreesToFirebaseRotation(int degrees) {
        switch (degrees) {
            case 0:
                return FirebaseVisionImageMetadata.ROTATION_0;
            case 90:
                return FirebaseVisionImageMetadata.ROTATION_90;
            case 180:
                return FirebaseVisionImageMetadata.ROTATION_180;
            case 270:
                return FirebaseVisionImageMetadata.ROTATION_270;
            default:
                throw new IllegalArgumentException(
                        "Rotation must be 0, 90, 180, or 270.");
        }
    }
}

請查看LifecycleCameraController API。 如果 CameraController 與 PreviewView 一起使用,ImageProxy 的裁剪矩形將匹配最終用戶在 PreviewView 中看到的內容。 代碼示例:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM