1

Luxand API を使用して Visual Studio 2010 で作業するにはどうすればよいですか? 特定の顔のあごのポイントを検出する必要があります。他の API で実行できますか?

このサンプルコードを試しました:

 OpenFileDialog openFileDialog1 = new OpenFileDialog();
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                FSDK.CImage image = new FSDK.CImage(openFileDialog1.FileName);

                // resize image to fit the window width
                double ratio = System.Math.Min((pictureBox1.Width + 0.4) / image.Width,
                    (pictureBox1.Height + 0.4) / image.Height);
                image = image.Resize(ratio);

                Image frameImage = image.ToCLRImage();
                Graphics gr = Graphics.FromImage(frameImage);

                FSDK.TFacePosition facePosition = image.DetectFace();
                if (0 == facePosition.w)
                    MessageBox.Show("No faces detected", "Face Detection");
                else
                {
                    int left = facePosition.xc - facePosition.w / 2;
                    int top = facePosition.yc - facePosition.w / 2;
                    gr.DrawRectangle(Pens.LightGreen, left, top, facePosition.w, facePosition.w);

                    FSDK.TPoint[] facialFeatures = image.DetectFacialFeaturesInRegion(ref facePosition);
                    int i = 0;
                    foreach (FSDK.TPoint point in facialFeatures)
                        gr.DrawEllipse((++i > 2) ? Pens.LightGreen : Pens.Blue, point.x, point.y, 3, 3);

                    gr.Flush();
                }

                // display image
                pictureBox1.Image = frameImage;
                pictureBox1.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Exception");
            }
        }

次のエラーが表示されます: ファイルまたはアセンブリ 'xquisite.application.exe' またはその依存関係の 1 つを読み込めませんでした。このアセンブリは、現在読み込まれているランタイムよりも新しいランタイムによってビルドされているため、読み込むことができません。

4

2 に答える 2

2


ターゲットの設定は何ですか?任意の CPU ? x86ランタイムを試してください!
app.config に追加しました<startup useLegacyV2RuntimeActivationPolicy="true"/> か? 私が忘れていたと思うこれらの2つは、あなたと同じ私のエラーの理由でした.

ここに私のコードの一部があります:

        private void DetectFace()
    {
        var failerCounter = 0;
        var cameraHandler = 0;
        try
        {
            const int failerLimit = 2;
            int failerLimitFaceDetection = Properties.Settings.Default.NotDetectedLimit;
            float similarityMinimum = Properties.Settings.Default.SimilarityLimit;

            var r = FSDKCam.OpenVideoCamera(ref CameraName, ref cameraHandler);
            if (r != FSDK.FSDKE_OK)
            {
                MessageBox.Show(StringHelper.ErrorCamera);
            }
            FSDK.SetFaceDetectionParameters(
                Properties.Settings.Default.DetectionHandleArbitaryRotations,
                Properties.Settings.Default.DetectionDetermineFaceRotationAngle,
                Properties.Settings.Default.DetectionInternalResizeWidth);
            FSDK.SetFaceDetectionThreshold(Properties.Settings.Default.DetectionFaceDetectionThreshold);

            while (IsFaceDetectionActive)
            {
                var imageHandle = 0;
                if (FSDK.FSDKE_OK != FSDKCam.GrabFrame(cameraHandler, ref imageHandle))
                {
                    Application.Current.Dispatcher.Invoke(delegate { }, DispatcherPriority.Background);
                    continue;
                }
                var image = new FSDK.CImage(imageHandle);
                var frameImage = image.ToCLRImage();
                FaceContent = frameImage;
                var gr = Graphics.FromImage(frameImage);
                var facePosition = image.DetectFace();

                IsFaceDetected = facePosition.w != 0;
                if (!IsFaceDetected)
                {
                    if (failerCounter++ > failerLimitFaceDetection)
                    {
                        failerCounter = 0;
                        OnFaceNotDetected();
                    }
                }
                // if a face is detected, we detect facial features
                if (IsFaceDetected)
                {
                    var facialFeatures = image.DetectFacialFeaturesInRegion(ref facePosition);
                    SmoothFacialFeatures(ref facialFeatures);
                    FaceTemplate = image.GetFaceTemplate();
                    // Similarity = 0.5f -> fin the right value ....
                    IsFaceRecognized = FaceMetricHandler.LooksLike(FaceTemplate, similarityMinimum).Any();

                    if (IsFaceRecognized)
                    {
                        foreach (var match in FaceMetricHandler.LooksLike(FaceTemplate, similarityMinimum))
                        {
                            failerCounter = 0;
                            GreetingMessage = match.Name;
                            IsFaceDetectionActive = false;
                            OnFaceRecognized();
                            break;
                        }
                    }
                    else
                    {
                        if (failerCounter++ > failerLimit)
                        {
                            failerCounter = 0;
                            IsFaceDetectionActive = false;
                            OnFaceNotRecognized();
                        }
                    }


                    if (IsFaceFrameActive)
                    {
                        gr.DrawRectangle(Pens.Red, facePosition.xc - 2*facePosition.w/3,
                                         facePosition.yc - facePosition.w/2,
                                         4*facePosition.w/3, 4*facePosition.w/3);
                    }
                }
                else
                {
                    ResetSmoothing();
                }
                FaceContent = frameImage;
                GC.Collect();
                Application.Current.Dispatcher.Invoke(delegate { }, DispatcherPriority.Background);
            }
        }
        catch(Exception e)
        {
            logger.Fatal(e.Message);
            InitializeCamera();
        }
        finally
        {
            FSDKCam.CloseVideoCamera(cameraHandler);
            FSDKCam.FinalizeCapturing();

        }
    }


于 2013-07-10T18:43:53.393 に答える