Archivio Mensile: giugno 2018

How to fix error loading onnx file from filesystem

The default use of trained machine learning model in UWP apps is to add onnx file to your solution and leave Visual Studio to generate the corresponding class and load the file directly in the solution, but in some case can be useful to load the file from other sources, like the filesystem.

This is not a problem, the CreateXXXXXModel generate take a StorageFile so you can use a FilePicker to take a file, but if you try a code like this

FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.FileTypeFilter.Add(".onnx");
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(selectedStorageFile);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message).ShowAsync();
}

You can see that an exception is thown in the calling of method LearningModelPreview.LoadModelFromStorageFileAsync in the generated class

public static async Task CreateCustomVisionModel(StorageFile file)
{
	LearningModelPreview learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file);
	CustomVisionModel model = new CustomVisionModel();
	model.learningModel = learningModel;
	return model;
}

The exception does not give us more info about the problem

Exception from HRESULT: 0x88900103
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.CustomVisionModel.d__1.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.Views.MainPage.d__6.MoveNext()

it seems that file doesn’t have some permission for made WinML works, the solution is quite simple, before creating the model we need to copy the file in the app local folder and then use this file instead of the other.

We need only few lines of codes for do this

FileOpenPicker fileOpenPicker = new FileOpenPicker(); 
fileOpenPicker.FileTypeFilter.Add(".onnx"); 
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync(); 
//Fix for loading file
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sf2 = await selectedStorageFile.CopyAsync(storageFolder, selectedStorageFile.Name, NameCollisionOption.ReplaceExisting);
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(sf2);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message);
}

Now your code work without problem

I have also created a new project on github for help to test your machine learning model created with Custom Vision service available on https://github.com/a-iafrate/WinMLTester that can be used to test this fix

happy coding!!

Insider Dev Tour Roma – un evento fantastico

Qualche giorno fà (il 14 giugno 2018 per l’esattezza) si è tenuta la tappa di Roma dell’Insider Dev Tour, un Tour mondiale organizzato da Microsoft in collaborazione con gli MVP locali in 42 città per far conoscere tutte le novità Insider che ci aspetteranno all’interno di Windows nel futuro prossimo.

Per quanto mi riguarda ho avuto la fortuna di partecipare all’organizzazione di questo evento insieme a Marco Dal Pino e tutta la squadra di DotNetToscana e tutti gli amici di sempre e devo dire di essere veramente soddisfatto della riuscita dell’evento.

idt3

Nonostante qualche piccolo intoppo nella giornata precedente di preparazione all’evento, come il drone che faceva le bizze o problemi con la prenotazione delle stanze d’albergo :P, la giornata dell’evento è stata perfetta il tutto è andato nel modo giusto e la giornata è stata un successo con un afflusso ottimo di persone e drop delle resenze rispetto alle prenotazioni inferiore alle nostre aspettative.

Eventi come questi ti fanno essere ancora più orgoglioso di essere parte di un mondo community che riesce a fare grandi cose mettendoci impegno, passione e quel pizzico di follia che rende il tutto meno pesante e riesce a spezzare il clima in alcuni momenti in cui ti sembra ci siano problemi molto grandi

Sò che molti purtroppo non capiranno quello di cui sto parlando ma vi rinnovo come sempre il consiglio che dò quando parlo con le persone che incontro, se avete una passione cercate sempre di condividerla con gli altri, in questo modo il vostro cammino sarà sempre una crescita in comune dove tutti avranno modo di far migliorare gli altri e migliorarsi.

 

Se vi siete perso questo evento mi consiglio di seguire i vari canali social delle community intorno a voi in modo da essere sempre aggiornati su quello che bolle in pentola, e vi posso assicurare che ce ne saranno ancora delle belle 😀

A questo punto non mi resta altro da fare che augurarvi buon coding come sempre e sperare di vedervi al prossimo evento!

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi