Xamarin Studio Android人脸检测

时间:2017-05-16 15:20:05

标签: android xamarin xamarin.android

我正在为Xamarin开发移动应用程序,我尝试使用Camera2类。一切看起来都很好,但这一行在转换类型上出现问题。它说(Java.Lang.Object - > Android.Hardware.Camera2.Params.Face [])这行适用于Android Studio但不适用于C#。

我在Xamarin上使用的代码。除了面部识别,所有构建的请求都可以正常工作。 https://github.com/xamarin/monodroid-samples/tree/master/android5.0/Camera2Basic

Face[] faces  = result.Get(CaptureResult.StatisticsFaces);



public class CameraCaptureListener : CameraCaptureSession.CaptureCallback
{
    public FaceTrainActivityFragment Owner { get; set; }
    public File File { get; set; }
    public override void OnCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)
    {
        Process(result);
    }

    public override void OnCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult)
    {
        Process(partialResult);
    }

    private void Process(CaptureResult result)
    {
        switch (Owner.mState)
        {

            case FaceTrainActivityFragment.STATE_PREVIEW:
                {
                    if (result.Get(CaptureResult.StatisticsFaces) != null) {
                        //Face[] faces  = result.Get(CaptureResult.StatisticsFaces);
                        //Face[] faces  = (Face[])result.Get(CaptureResult.StatisticsFaces);
                    }
                    break;
                }
        }

    }
}

即使我使用硬转换编译(Face [])它也不允许我编译,它给了我相同的Java.Lang.Object错误。

    public void CreateCameraPreviewSession()
    {
        try
        {
            SurfaceTexture texture = mTextureView.SurfaceTexture;
            if (texture == null)
            {
                throw new IllegalStateException("texture is null");
            }

            if (null == mCameraDevice) {
                return;
            }



            // We configure the size of default buffer to be the size of camera preview we want.
            texture.SetDefaultBufferSize(mPreviewSize.Width, mPreviewSize.Height);

            // This is the output Surface we need to start preview.
            Surface surface = new Surface(texture);

            // We set up a CaptureRequest.Builder with the output Surface.
            mPreviewRequestBuilder = mCameraDevice.CreateCaptureRequest(CameraTemplate.Preview);
            mPreviewRequestBuilder.AddTarget(surface);

            // Here, we create a CameraCaptureSession for camera preview.
            List<Surface> surfaces = new List<Surface>();
            surfaces.Add(surface);
            //surfaces.Add(mImageReader.Surface);
            setFaceDetect(mPreviewRequestBuilder, mFaceDetectMode);
            mCameraDevice.CreateCaptureSession(surfaces, new CameraCaptureSessionCallback(this), null);

        }
        catch (CameraAccessException e)
        {
            e.PrintStackTrace();
        }

我正在调用Camera State Listener中的CreateCameraPreviewSession

public class CameraStateListener : CameraDevice.StateCallback
{
    public FaceTrainActivityFragment owner;
    public override void OnOpened(CameraDevice cameraDevice)
    {
        // This method is called when the camera is opened.  We start camera preview here.
        owner.mCameraOpenCloseLock.Release();
        owner.mCameraDevice = cameraDevice;
        owner.CreateCameraPreviewSession();
    }

1 个答案:

答案 0 :(得分:0)

  

它说(Java.Lang.Object - &gt; Android.Hardware.Camera.Params.Face [])此行适用于Android Studio但不适用于C#。

从您收到的错误中,您可能正在为Face使用错误的命名空间。请使用Android.Hardware.Camera.Params.Face

,而不是Android.Hardware.Camera2.Params.Face