Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:can';我无法从摄像机上获得30帧的速度_Android_Frame Rate_Android Camera2 - Fatal编程技术网

Android 安卓:can';我无法从摄像机上获得30帧的速度

Android 安卓:can';我无法从摄像机上获得30帧的速度,android,frame-rate,android-camera2,Android,Frame Rate,Android Camera2,我正在使用ImageReader通过Camera2API从手机摄像头获取帧。 我已经在我的onConfigured回调函数中设置了RepeatingRequest,并且我记录了image.getTimestamp内onimageaviable函数来计算fps。 当我查看logcat上的时间戳时,我发现只有20 fps(每秒20个时间戳) 我的问题是: 我计算fps的方法好吗?有更好的办法吗 如果它是好的,那么为什么我得到20帧而不是30帧 以下是守则的相关部分: public void onIm

我正在使用ImageReader通过Camera2API从手机摄像头获取帧。 我已经在我的
onConfigured
回调函数中设置了
RepeatingRequest
,并且我记录了
image.getTimestamp
onimageaviable
函数来计算fps。 当我查看logcat上的时间戳时,我发现只有20 fps(每秒20个时间戳)

我的问题是:

  • 我计算fps的方法好吗?有更好的办法吗
  • 如果它是好的,那么为什么我得到20帧而不是30帧 以下是守则的相关部分:

    public void onImageAvailable(ImageReader imageReader) {
            Image image = imageReader.acquireLatestImage();
            Log.d(TAG, "onImageAvailable: IMAGE AVAILABLE" + image.getTimestamp() );
            // If STOP CAPTURE button hasn't been pressed yet
    
            if ((!isStopped) && (image != null)) {
    
                // Get the current frame
                ByteBuffer pixelArray1 = image.getPlanes()[0].getBuffer();
                byte[] bytes = new byte[pixelArray1.remaining()];
                pixelArray1.get(bytes);
    
                Mat mat = new Mat(image.getHeight() + image.getHeight() / 2, image.getWidth(), CvType.CV_8UC1);
                mat.put(0, 0, bytes);
                Mat rgb = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC4);
    
                // OpenCV function - convert from YUV which is the camera format into RGB which can be processed
                Imgproc.cvtColor(mat, rgb, Imgproc.COLOR_YUV420sp2BGR, 4);
    
                int pixelStride = image.getPlanes()[0].getPixelStride();
                int rowStride = image.getPlanes()[0].getRowStride();
                int rowPadding = rowStride - pixelStride * 640;
    
                final Bitmap bitmap = Bitmap.createBitmap(640 + rowPadding / pixelStride, 480, Bitmap.Config.RGB_565);
                Utils.matToBitmap(rgb, bitmap);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // Update screen with new frame
                        imageView.setImageBitmap(bitmap);
                    }
                });
                image.close();
            }
            else {
                closeCamera();
            }
        }
    };
    
    OnConfigure:

    public void onConfigured(CameraCaptureSession cameraCaptureSession) {
            Log.d(TAG, "onConfigured: BUILD REQUEST AND CAPTURE");
            try {
                CaptureRequest.Builder requestBuilder = cameraCaptureSession.getDevice().createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
                requestBuilder.addTarget(imageReaderSurface);
                //cameraCaptureSession.setRepeatingRequest(requestBuilder.build(), null, handler);
                cameraCaptureSession.setRepeatingRequest(requestBuilder.build(), null, handler);
                Log.d(TAG, "onConfigured: AFTER CAPTURE");
            } catch (CameraAccessException e) {
                Log.d(TAG, "onConfigured: CANT CREATE CAPTURE REQUEST");
                e.printStackTrace();
            }
        }
    
    以及每秒显示20个时间戳的logcat:

    03-24 11:41:30.919 16254-17780/com.example.noamm_000.talkwithcompviawifi 
    
    D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176055988501
    03-24 11:41:30.964 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176106451209
    03-24 11:41:31.014 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176156344543
    03-24 11:41:31.067 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176205880116
    03-24 11:41:31.120 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176256464074
    03-24 11:41:31.168 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176306533293
    03-24 11:41:31.217 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176357056886
    03-24 11:41:31.269 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176406944855
    03-24 11:41:31.313 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176457030845
    03-24 11:41:31.363 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176506663397
    03-24 11:41:31.414 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176556684438
    03-24 11:41:31.467 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176607584803
    03-24 11:41:31.520 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176658480428
    03-24 11:41:31.567 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176706916105
    03-24 11:41:31.613 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176757571834
    03-24 11:41:31.664 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176807395636
    03-24 11:41:31.717 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176857408865
    03-24 11:41:31.767 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176907807199
    03-24 11:41:31.816 16254-17780/com.example.noamm_000.talkwithcompviawifi D/CAMERA_IMAGE_READY:: onImageAvailable: IMAGE AVAILABLE39176957648657
    
    *我试着在
    onimageaviable
    中对所有正在完成的工作进行注释,只留下时间戳日志,但我仍然得到了20 fps

    谢谢,,
    诺姆

    你所看到的是正常的


    setRepeatingRequest的文档明确指出,“使用此方法,相机设备将使用提供的CaptureRequest中的设置,以可能的最大速率持续拍摄图像。您将获得的帧速率取决于许多因素-拍摄请求设置、相机硬件、可用cpu电源、,拍摄的图像等。

    根据照明条件,某些设备的帧速率可能会有所不同(较暗的环境可能意味着较低的帧速率)。尝试在明亮的环境中测试。@samgak我只在明亮的环境中测试过它,而且,我错过了超过10帧(50%)-光线会对fps产生如此巨大的影响吗?@samgak我再次尝试,将相机直接对准一盏灯,获得了23帧。很好,那丢失的7呢?好吧,我想我想知道的是,是否有一种方法可以强制帧速率为30(甚至更高)?或者至少是常数,因为我需要它在以后的计算中是静态的。