2017-01-09 10 views
1

Я пытаюсь обучить/создать свой собственный классификатор, я привязал этот код к основной камере, и я не получил никакого ответа от консоли и не получил никаких ошибок. Или я просто делаю это неправильно?IBM Watson Visual Recognition поставляет собственный классификатор в Unity3d

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 ссылка на SDK Unity. Благодаря!

+0

Привет, пожалуйста, укажите все в этом классе, включая имя класса. Это было бы полезно, чтобы помочь вам. Вы можете захотеть пометить C#, чтобы помочь вам другим людям. – Programmer

+0

отредактировал * спасибо за голову! можешь мне помочь? Я не знаю, почему я не получаю никакого ответа в консоли, и у меня нет никаких ошибок. Мне действительно нужно сделать эту работу. Благодаря! – MDLots

ответ

2

Если m_positiveExamplesPath и m_negativeExamplesPath не правильный путь, вы получите исключение, которое говорит:

DirectoryNotFoundException: Could not find a part of the path

Если вы не сделали настройки учетных данных, то вы получите сообщение об ошибке:

No API Key was found!

Те два проблемы устранены.

Требуется около 10 секунд, чтобы получить ответ от сервера IBM при запуске этого кода. Пожалуйста, подождите не менее 15 секунд для ответа. Время ожидания на самом деле зависит от того, насколько велики ваши cpu_positive_examples.zip и negative_examples.zip файлы есть. Иногда это может занять несколько минут.

I didnt got any response from the console nor getting any errors.

Проблема заключается в функции Log. Если вы посмотрите внимательно, вы поймете, что IBM использует Log.Debug вместо Debug.Log. IBM Log.Debug исходит из пространства имен IBM.Watson.DeveloperCloud.Logging и не отображается на вкладке «Консоль редактора». Я не могу сказать, является ли это ошибкой или функцией, но заменяя все Log.Debug на Debug.Log, вы должны исправить свою проблему.

я получил ответ с кодом ниже в течение 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); 
    } 
} 
0

Если вы используете Log.Debug(), инициализировать реакторы в начале ваших Start() или Awake() функций с помощью

LogSystem.InstallDefaultReactors(); 

Как и программист, используйте Unity's Debug.Log().