Распознавание лиц с помощью Unity и SDK Watson - PullRequest
0 голосов
/ 23 октября 2018

Я хотел бы сделать распознавание лиц с помощью камеры моего компьютера с Unity и SDK Watson.Я искал некоторые учебники и демонстрации в Интернете, и я думаю, наконец, получить его.Это один из моих первых проектов в Unity, поэтому я был бы очень признателен, если бы кто-нибудь помог мне исправить две ошибки, которые я не могу исправить.

Я использую этот код для рендеринга камеры и захвата изображения:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CameraRender : MonoBehaviour {
public Image overlay;
public FaceDetector fd;

// Use this for initialization
void Start () {
    WebCamTexture backCam = new WebCamTexture();
    backCam.Play();
    overlay.material.mainTexture = backCam;
}

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

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

И этот другой для обнаружения лица:

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

public class FaceDetector : MonoBehaviour {

public Text dataOutput;

private VisualRecognition _visualRecognition;

// Use this for initialization
void Start ()
{
    Credentials credentials = new Credentials(apiKey: "key", url: "url");
    _visualRecognition = new ExampleVisualRecognition(credentials)
    {
        VersionDate = "2016-05-20"
    };
}

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

    //  Classify using image path

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

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

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

// Update is called once per frame
void Update () {

}
}

Но я не могу исправить это дваошибки:

NotImplementedException: The requested feature is not implemented. IBM.Watson.DeveloperCloud.Services.VisualRecognition.v3.VisualRecognition.op_Implicit (.ExampleVisualRecognition v) (at Assets/Watson/Scripts/Services/VisualRecognition/v3/VisualRecognition.cs:1444)
FaceDetector.Start () (at Assets/FaceDetector.cs:21)

NullReferenceException: Object reference not set to an instance of an object
FaceDetector.DetectFaces (System.String path) (at Assets/FaceDetector.cs:35)
CameraRender.CaptureImage () (at Assets/CameraRender.cs:20)
CameraRender.Update () (at Assets/CameraRender.cs:27)

Может ли кто-нибудь помочь?Спасибо всем.

1 Ответ

0 голосов
/ 29 октября 2018

Вы создаете экземпляр ExampleVisualRecognition, когда должны быть созданы VisualRecognition.Пожалуйста, посмотрите эту суть .

private IEnumerator CreateService()
{
    //  Create tokenOptions
    TokenOptions visualRecognitionTokenOptions = new TokenOptions()
    {
        IamApiKey = visualRecognitionApiKey
    };

    //  Create credentials
    Credentials visualRecognitionCredentials = new Credentials(visualRecognitionTokenOptions, visualRecognitionServiceUrl);

    //  Wait for tokendata
    while (!visualRecognitionCredentials.HasIamTokenData())
        yield return null;

    //  Instantiate service
    visualRecognition = new VisualRecognition(visualRecognitionCredentials);

    //  Set version date
    visualRecognition.VersionDate = versionDate;

    //  Classify
    visualRecognition.DetectFaces(OnDetectFaces, OnFail, imagePath);
}


private void OnDetectFaces(DetectedFaces response, Dictionary<string, object> customData)
{
    //  Print response json to console
    Log.Debug("ClassifyExample", "{0}", customData["json"].ToString());

    //  Print gender, age and confidence
    Log.Debug("ClassifyExample", "gender: {0}, score: {1}, age: {2} - {3}, score: {4}", response.images[0].faces[0].gender.gender, response.images[0].faces[0].gender.score, response.images[0].faces[0].age.min, response.images[0].faces[0].age.max, response.images[0].faces[0].age.score);
}

//  Fail callback
private void OnFail(RESTConnector.Error error, Dictionary<string, object> customData)
{
    Log.Debug("ClassifyExample", "Failed to classify");
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...