| using System; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.ML.OnnxRuntime; |
| using Microsoft.ML.OnnxRuntime.Tensors; |
| using UnityEngine; |
|
|
| namespace Sky.OnnxRuntime.Samples |
| { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public sealed class BasicInferenceSample : MonoBehaviour |
| { |
| |
| |
| |
| |
| private const string ModelBase64 = |
| "CAk6rgEKGwoFaW5wdXQKBXNjYWxlEgZzY2FsZWQiA011bAobCgZzY2FsZWQKBGJpYXMSBm91dHB1dCIDQWRkEgpzY2FsZV9iaWFzKhkIAxABQgVzY2FsZUoMAAAAQAAAAEAAAABAKhgIAxABQgRiaWFzSgwAAIA/AACAPwAAgD9aFwoFaW5wdXQSDgoMCAESCAoCCAEKAggDYhgKBm91dHB1dBIOCgwIARIICgIIAQoCCANCBAoAEA0="; |
|
|
| private void Start() |
| { |
| RunInference(); |
| } |
|
|
| |
| public void RunInference() |
| { |
| byte[] modelBytes = Convert.FromBase64String(ModelBase64); |
|
|
| |
| using var session = new InferenceSession(modelBytes); |
|
|
| var inputData = new float[] { 1f, 2f, 3f }; |
| var inputTensor = new DenseTensor<float>(inputData, new int[] { 1, 3 }); |
|
|
| var inputs = new List<NamedOnnxValue> |
| { |
| NamedOnnxValue.CreateFromTensor("input", inputTensor) |
| }; |
|
|
| using IDisposableReadOnlyCollection<DisposableNamedOnnxValue> results = session.Run(inputs); |
|
|
| float[] output = results.First().AsTensor<float>().ToArray(); |
|
|
| Debug.Log($"[ONNX Runtime] input = [{string.Join(", ", inputData)}]"); |
| Debug.Log($"[ONNX Runtime] output = [{string.Join(", ", output)}] (expected [3, 5, 7])"); |
|
|
| var expected = new float[] { 3f, 5f, 7f }; |
| bool ok = output.Length == expected.Length |
| && output.Zip(expected, (a, b) => Mathf.Abs(a - b) < 1e-4f).All(x => x); |
|
|
| if (ok) |
| Debug.Log("[ONNX Runtime] Basic inference succeeded ✅"); |
| else |
| Debug.LogError("[ONNX Runtime] Basic inference produced an unexpected result ❌"); |
| } |
| } |
| } |
|
|