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!");
        }
    }
}

кстати вот ссылка на Unity SDK. Спасибо!

2 ответа

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

DirectoryNotFoundException: не удалось найти часть пути

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

Ключ API не найден!

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

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

Я не получил ни ответа от консоли, ни получения каких-либо ошибок.

Проблема от 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);
    }
}

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

LogSystem.InstallDefaultReactors();

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

Другие вопросы по тегам