IBM Watson Visual Recognition在Unity3d中训练自己的分类器

时间:2017-01-09 14:51:51

标签: c# unity3d watson visual-recognition

我正在尝试训练/创建自己的分类器,我将此代码附加到主摄像头,我没有从控制台得到任何响应,也没有收到任何错误。或者我只是以错误的方式做到了?

public class VisualRecog : MonoBehaviour{
private VisualRecognition m_VisualRecognition = new VisualRecognition();

    void Start()
    {
        string m_positiveExamplesPath = Application.dataPath + "/testData/cpu_positive_examples.zip";
        string m_negativeExamplesPath = Application.dataPath + "/testData/negative_examples.zip";

        Dictionary<string, string> positiveExamples = new Dictionary<string, string>();
        positiveExamples.Add("cpu", m_positiveExamplesPath);
        if (!m_VisualRecognition.TrainClassifier(OnTrainClassifier, "compClassifier", positiveExamples, m_negativeExamplesPath))
            Log.Debug("ExampleVisualRecognition", "Train classifier failed!");
    }

    private void OnTrainClassifier(GetClassifiersPerClassifierVerbose classifier, string data)
    {

        if (classifier != null)
        {
            Log.Debug("ExampleVisualRecognition", "Classifier is training! " + classifier);
        }
        else
        {
            Log.Debug("ExampleVisualRecognition", "Failed to train classifier!");
        }
    }
}

顺便提一下here是Unity SDK的链接。谢谢!

2 个答案:

答案 0 :(得分:2)

如果m_positiveExamplesPathm_negativeExamplesPath不是有效路径,您将获得以下异常:

  

DirectoryNotFoundException:找不到路径的一部分

如果您没有设置凭据,则会收到错误:

  

未找到API密钥!

消除了这两个问题。

运行此代码时,从IBM服务器获取回复大约需要10秒。 请等待至少15秒以获得回复。 等待时间实际上取决于 cpu_positive_examples.zip negative_examples.zip 文件的大小。有时,可能需要几分钟。

  

我没有从控制台得到任何回复,也没有收到任何错误。

问题来自Log功能。如果仔细观察,您会发现IBM正在使用Log.Debug而不是Debug.Log。 IBM的Log.Debug来自IBM.Watson.DeveloperCloud.Logging命名空间,它不会显示在“编辑器控制台”选项卡中。我无法判断这是一个错误或功能,但用Debug.Log替换所有Log.Debug应该可以解决您的问题。

我在10秒内收到了以下代码的回复(使用Debug.Log):

private VisualRecognition m_VisualRecognition = new VisualRecognition();

void Start()
{
    string positiveExamplesPath = Application.dataPath + "/Watson/Examples/ServiceExamples/TestData/visual-recognition-classifiers/giraffe_positive_examples.zip";
    string negativeExamplesPath = Application.dataPath + "/Watson/Examples/ServiceExamples/TestData/visual-recognition-classifiers/negative_examples.zip";

    Dictionary<string, string> positiveExamples = new Dictionary<string, string>();
    positiveExamples.Add("giraffe", positiveExamplesPath);

    if (!m_VisualRecognition.TrainClassifier(OnTrainClassifier, "unity-test-classifier-example", positiveExamples, negativeExamplesPath))
        Debug.Log("Train classifier failed!");
}

private void OnTrainClassifier(GetClassifiersPerClassifierVerbose classifier, string data)
{

    if (classifier != null)
    {
        Debug.Log("Classifier is training! " + classifier);
    }
    else
    {
        Debug.Log("Failed to train classifier!" + data);
    }
}

答案 1 :(得分:0)

如果您使用的是Log.Debug(),请使用

Start()Awake()函数的开头初始化反应堆
LogSystem.InstallDefaultReactors();

或者,像程序员说的那样,使用Unity的Debug.Log()