Не удалось найти FacesTopLevelMultiple - PullRequest
0 голосов
/ 27 февраля 2019

Возникла проблема с программой распознавания лиц, использующей API Visual Recognition, предоставляемый IBM Watson.Я написал программу на основе учебника, который нашел, но получаю сообщение об ошибке, из-за которого он не запускается.Ошибка выглядит следующим образом: https://i.stack.imgur.com/CBN0p.png

Вот код, который я запускаю для обнаружения лица:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using IBM.Watson.DeveloperCloud.Services.VisualRecognition.v3;
using IBM.Watson.DeveloperCloud.Logging;
using IBM.Watson.DeveloperCloud.Utilities;
using IBM.Watson.DeveloperCloud.Connection;


public class FaceDetector : MonoBehaviour
{
    public Text dataOutput;
    private VisualRecognition _visualRecognition;
    private string path = "C:\\Users\\Alberto\\Desktop\\Alberto.jpg";

    public string _serviceUrl;
    public string _iamApikey;

    void Start() {
        LogSystem.InstallDefaultReactors();
        Runnable.Run(CreateService());
    }

    private IEnumerator CreateService() {
        if (string.IsNullOrEmpty(_iamApikey)) {
            throw new WatsonException("Please provide IAM ApiKey for the service.");
        }

        Credentials credentials = null;

        TokenOptions tokenOptions = new TokenOptions() {
            IamApiKey = _iamApikey
        };

        credentials = new Credentials(tokenOptions, _serviceUrl);

        //wait for token
        while (!credentials.HasIamTokenData())
            yield return null;

        //create credentials
        _visualRecognition = new VisualRecognition(credentials);
        _visualRecognition.VersionDate = "2019-02-26";
    }

    public void DetectFaces(string path) {
        //classify using image url
        // if (!_visualRecognition.DetectFaces(picURL, OnDetectFaces, OnFail))
        //     Log.Debug("ExampleVisualRecognition.DetectFaces()", "Detect faces failed!");

        //classify using image path
        if(!_visualRecognition.DetectFaces(OnDetectFaces, OnFail, path)) {
            Debug.Log("ExampleVisualRecognition.DetectFaces()", "Detect faces failed!");
        } else {
            Debug.Log("Calling Watson");
            dataOutput.text = "";
        }
    }

    private void OnDetectFaces(FacesTopLevelMultiple multipleImages, Dictionary<string, object> customData) {
        var data = multipleImages.images[0].faces[0];
        dataOutput.text = "Age : " + data.age.min + "-" + data.age.max + " PROBABILITY: " + data.age.score + "\n";
        "Gender: " + data.gender.gender + " PROBABILITY: " + data.gender.score + "\n";
        Debug.Log("ExampleVisualRecognition.OnDetectFaces(): Detect faces result: " + customData["json"].ToString());
    }

    private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData) {
        Debug.LogError("ExampleVisualRecognition.OnFail(): Error received: " + error.ToString());
    }
}

Это скрипт, который позволяет веб-камере отслеживать мое лицо:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using IBM.Watson.DeveloperCloud.Services.VisualRecognition.v3;
using IBM.Watson.DeveloperCloud.Logging;
using IBM.Watson.DeveloperCloud.Utilities;

public class CameraRender : MonoBehaviour
{
    public Image overlay;
    public FaceDetector fd;
    // Start is called before the first frame update
    void Start()
    {
        WebCamTexture backCam = new WebCamTexture();
        backCam.Play();
        overlay.material.mainTexture = backCam;
    }

    public void CaptureImage() {
        ScreenCapture.CaptureScreenshot("screenshot.png");
        fd.DetectFaces(application.persistentDataPath + "/screenshot.png");

    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0)) {
            CaptureImage();
        }
    }

}

Надеюсь, это поможет понять, в чем проблема.FacesTopLevelMultiple используется в нижней части скрипта FaceDetector.

1 Ответ

0 голосов
/ 27 февраля 2019

Кажется, что обратный вызов detectFaces устарел (вероятно, из учебника, который необходимо обновить).Подпись метода должна быть

OnDetectFaces(DetectedFaces multipleImages, Dictionary<string, object> customData)

Вы должны быть в состоянии найти лица, используя

private void OnDetectFaces(DetectedFaces multipleImages, Dictionary<string, object> customData)
{
    Log.Debug("ExampleFaceDetection", "First face age: {0}", multipleImages.images[0].faces[0].age);
    Log.Debug("ExampleFaceDetection", "First face gender: {0}", multipleImages.images[0].faces[0].gender);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...