2014-04-28 56 views
1

我試圖通過添加一個名爲JView的新類來覆蓋JavaCV的initializeCamera來實現this解決方案。我試圖使用這個覆蓋功能來做相機參數設置。但是,我發現這個重寫函數似乎沒有被調用?我的班級如下以及人臉檢測示例代碼(MainActivity)從Space150Glitch在Glass XE16.11上打開CV相機預覽

package com.space150.android.glass.opencvfacedetection; 

import org.opencv.android.JavaCameraView; 

import android.content.Context; 
import android.hardware.Camera; 
import android.util.AttributeSet; 
import android.util.Log; 

public class JView extends JavaCameraView { 

    public JView(Context context, int cameraId) { 
     super(context, cameraId); 
    } 

    public JView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 


    @Override 
    protected boolean initializeCamera(int width, int height) 
    { 
     Log.i("JVIEW", "initialize Camera"); 
     super.initializeCamera(width, height); 

     Camera.Parameters params = mCamera.getParameters(); 

     // Post XE10 Hotfix 
     params.setPreviewFpsRange(60000,60000); 
     params.setPreviewSize(320,240); 
     mCamera.setParameters(params); 

     return true; 
    } 

} 

而且,任何人遇到和解決的玻璃XE16.11毛刺相機預覽問題?

謝謝!

回答

1

您的幀頻在您的setPreviewFPSRange調用中過高。你在60FPS。我已經在5和30 FPS下測試了下面的代碼,它可以工作。

當你看到毛刺,它看起來像這樣:

enter image description here

這裏是一個在XE16.11作品在我的整個surfaceChanged方法。使用這個代碼沒有上面的問題,我看到一個正常的預覽。

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     if (mCamera == null) return; 

     Camera.Parameters camParameters = mCamera.getParameters(); 
     //start glass fix - use 5000 instead of 30000 for better battery performance 
     camParameters.setPreviewFpsRange(30000, 30000); 
     //end glass fix 
     camParameters.setPreviewSize(1920, 1080); 
     camParameters.setPictureSize(2592, 1944); 
     mCamera.setParameters(camParameters); 
     try { 
      mCamera.startPreview(); 
     } catch (Exception e) { 
      mCamera.release(); 
      mCamera = null; 
     } 
    } 
+0

嗨,我試圖整合[這](https://github.com/space150/google-glass-playground/tree/master/OpenCVFaceDetection)例子,但是,我有問題得到mCamera 。我試過的是在surfaceChanged()中使用mCamera = Camera.open()。檢查我的[gist](https://gist.github.com/harryhow/c8f7bc3d48842b5fe362)也... – mamahow

+0

請檢查我的代碼[這裏](https://gist.github.com/harryhow/c8f7bc3d48842b5fe362) 我將Camera.open()放在surfaceCreated()中,在surfaceChanged()中設置凸輪參數。 我也嘗試把0或-1作爲參數打開相機,但仍然沒有好運氣。 我從日誌中懷疑的是這個例子,它使用OpenCV的CameraBridgeViewBase作爲Android Cam和Open CV之間的客戶端橋接到初始相機。這意味着如果我們在BaseLoaderCallback()之前打開相機,BaseLoaderCallback()中的mOpenCvCameraView.enableView()將不起作用,因爲相機資源已被佔用。 :/ 有什麼想法? – mamahow

+0

把這個放在onResume:mCamera = Camera.open(0);然後把它放在onPause:if(mCamera!= null){mCamera.release(); mCamera = null; } –