mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-16 21:00:14 +00:00
* Update InferenceSample so the mobile app is more user friendly. Remove fasterrcnn xamarin sample. Adding a more complete xamarin sample targeted at end users to the inference examples repo. See https://github.com/microsoft/onnxruntime-inference-examples/pull/58
88 lines
3.6 KiB
C#
88 lines
3.6 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Xamarin.Essentials;
|
|
using Xamarin.Forms;
|
|
|
|
namespace Microsoft.ML.OnnxRuntime.InferenceSample.Forms
|
|
{
|
|
public partial class MainPage : ContentPage
|
|
{
|
|
public MainPage()
|
|
{
|
|
InitializeComponent();
|
|
|
|
// in general create the inference session (which loads and optimizes the model) once and not per inference
|
|
// as it can be expensive and time consuming.
|
|
inferenceSampleApi = new InferenceSampleApi();
|
|
}
|
|
|
|
protected override void OnAppearing()
|
|
{
|
|
base.OnAppearing();
|
|
|
|
OutputLabel.Text = "Press 'Run Tests'.\n";
|
|
}
|
|
|
|
private readonly InferenceSampleApi inferenceSampleApi;
|
|
|
|
private async Task ExecuteTests()
|
|
{
|
|
Action<Label, string> addOutput = (label, text) =>
|
|
{
|
|
Device.BeginInvokeOnMainThread(() => { label.Text += text; });
|
|
Console.Write(text);
|
|
};
|
|
|
|
OutputLabel.Text = "Testing execution\nComplete output is written to Console in this trivial example.\n\n";
|
|
|
|
// run the testing in a background thread so updates to the UI aren't blocked
|
|
await Task.Run(() =>
|
|
{
|
|
addOutput(OutputLabel, "Testing using default platform-specific session options... ");
|
|
inferenceSampleApi.Execute();
|
|
addOutput(OutputLabel, "done.\n");
|
|
Thread.Sleep(1000); // artificial delay so the UI updates gradually
|
|
|
|
// demonstrate a range of usages by recreating the inference session with different session options.
|
|
addOutput(OutputLabel, "Testing using default platform-specific session options... ");
|
|
inferenceSampleApi.CreateInferenceSession(SessionOptionsContainer.Create());
|
|
inferenceSampleApi.Execute();
|
|
addOutput(OutputLabel, "done.\n");
|
|
Thread.Sleep(1000);
|
|
|
|
addOutput(OutputLabel, "Testing using named platform-specific session options... ");
|
|
inferenceSampleApi.CreateInferenceSession(SessionOptionsContainer.Create("ort_with_npu"));
|
|
inferenceSampleApi.Execute();
|
|
addOutput(OutputLabel, "done.\n");
|
|
Thread.Sleep(1000);
|
|
|
|
addOutput(OutputLabel, "Testing using default platform-specific session options via ApplyConfiguration extension... ");
|
|
inferenceSampleApi.CreateInferenceSession(new SessionOptions().ApplyConfiguration());
|
|
inferenceSampleApi.Execute();
|
|
addOutput(OutputLabel, "done.\n");
|
|
Thread.Sleep(1000);
|
|
|
|
addOutput(OutputLabel, "Testing using named platform-specific session options via ApplyConfiguration extension... ");
|
|
inferenceSampleApi.CreateInferenceSession(new SessionOptions().ApplyConfiguration("ort_with_npu"));
|
|
inferenceSampleApi.Execute();
|
|
addOutput(OutputLabel, "done.\n\n");
|
|
Thread.Sleep(1000);
|
|
});
|
|
|
|
addOutput(OutputLabel, "Testing successfully completed! See the Console log for more info.");
|
|
}
|
|
|
|
private async void Start_Clicked(object sender, EventArgs e)
|
|
{
|
|
await ExecuteTests()
|
|
.ContinueWith(
|
|
(task) =>
|
|
{
|
|
if (task.IsFaulted)
|
|
MainThread.BeginInvokeOnMainThread(() => DisplayAlert("Error", task.Exception.Message, "OK"));
|
|
})
|
|
.ConfigureAwait(false);
|
|
}
|
|
}
|
|
}
|