ML. NET 1.4.0 Механизм прогнозирования генерирует исключение PlatformNotSupportedException из-за System.Drawing в x64 UWP - PullRequest
1 голос
/ 09 января 2020

Я относительно свободен sh для машинного обучения, Xamarin и. NET в целом - впервые за все время использую ML. NET.

Недавно обучил модель обнаружения объектов в TensorFlow, я хотел интегрировать его с разрабатываемым приложением Xamarin. Нашел несколько руководств, объясняющих, как импортировать файл .pb с помощью ML. NET и выполнить вывод с помощью PredictionEngine (https://devblogs.microsoft.com/cesardelatorre/run-with-ml-net-c-code-a-tensorflow-model-exported-from-azure-cognitive-services-custom-vision/).

Я добился довольно стабильного прогресса, пока не нажал этот ошибка при вызове метода Predict для экземпляра PredictionEngine:

System.PlatformNotSupportedException: 'System.Drawing is not supported on this platform.'

This exception was originally thrown at this call stack:
    System.Drawing.Bitmap.Bitmap(string)
    Microsoft.ML.Data.ImageLoadingTransformer.Mapper.MakeGetterImageDataViewType.AnonymousMethod__0(ref System.Drawing.Bitmap)
    Microsoft.ML.Transforms.Image.ImageResizingTransformer.Mapper.MakeGetter.AnonymousMethod__1(ref System.Drawing.Bitmap)
    Microsoft.ML.Transforms.Image.ImagePixelExtractingTransformer.Mapper.GetGetterCore.AnonymousMethod__1(ref Microsoft.ML.Data.VBuffer<TValue>)
    Microsoft.ML.Transforms.TensorFlowTransformer.TensorValueGetterVec<T>.GetTensor()
    Microsoft.ML.Transforms.TensorFlowTransformer.Mapper.UpdateCacheIfNeeded(long, Microsoft.ML.Transforms.TensorFlowTransformer.ITensorValueGetter[], string[], Microsoft.ML.Transforms.TensorFlowTransformer.Mapper.OutputCache)
    Microsoft.ML.Transforms.TensorFlowTransformer.Mapper.MakeGetter.AnonymousMethod__4(ref Microsoft.ML.Data.VBuffer<T>)
    Microsoft.ML.Data.TypedCursorable<TRow>.TypedRowBase.CreateDirectVBufferSetter.AnonymousMethod__0(TRow)
    Microsoft.ML.Data.TypedCursorable<TRow>.TypedRowBase.FillValues(TRow)
    Microsoft.ML.PredictionEngineBase<TSrc, TDst>.Predict(TSrc)
    ...
    [Call Stack Truncated]

Ниже приведены некоторые из установленных мной пакетов NuGet:

  • Microsoft.ML 1.4.0
  • Microsoft.ML.TensorFlow 1.4.0
  • Microsoft.ML.ImageAnalytics 1.4.0
  • Microsoft.NETCore.UniversalWindowsPlatform 6.2.9
  • NETStandard.Library 2.0. 3
  • SciSharp.TensorFlow.Redist 1.15.0
  • Xamarin.Essentials 1.2.0
  • Xamarin.Forms 4.2.0.709249

I ' Я пытаюсь построить для x64 UWP. Не могу найти эту ошибку в этом контексте в другом месте онлайн. Этот вопрос является наиболее похожим, но он мне совсем не помогает: ML. NET не работает на uwp .

Я почти уверен, что понимаю, что говорит ошибка - как указано в ранее связанном вопросе SO:

Это стандартное исключение. NET, которое происходит, когда библиотека пытается получить доступ к API, который фактически не реализован на платформе.

Реальный вопрос в том, почему я бью это, если платформы, которые я использую, совместимы с ML. NET 1.4.0?

Из того, что я могу сказать, ML. NET должен быть в состоянии работать на платформах UWP (https://docs.microsoft.com/en-us/windows/ai/windows-ml/get-started-uwp) и x64 (https://github.com/dotnet/machinelearning), так чего мне не хватает?

Любой идеи / советы очень ценятся.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Окончательный ответ на данный момент: ML. NET не поддерживает изображения для UWP, и в настоящее время нет планов его предоставления.

https://github.com/dotnet/machinelearning/issues/3154#issuecomment -573178943

0 голосов
/ 09 января 2020

Microsoft.ML - это поддержка uwp платформы. Но System.Drawing - это пространство имен. NET для работы с GDI +. Эта технология недоступна для приложений Windows Store или универсальных Windows приложений. См. . NET для Windows apps . Вы можете рисовать с Win2D lib в Windows Магазине приложений и UWP. Пожалуйста, избегайте использования System.Drawing в проекте uwp.

...