Open rmarinho opened 6 months ago
Right now we are hitting this on Catalyst
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/17.2.8043/targets/Xamarin.Shared.Sdk.targets(3,3): Error: No matching framework found inside '/Users/ruimarinho/.nuget/packages/microsoft.ml.onnxruntime.extensions.dummy/0.10.0/runtimes/ios/native/onnxruntime_extensions.xcframework'. SupportedPlatform: '/Users/ruimarinho/.nuget/packages/microsoft.ml.onnxruntime.extensions.dummy/0.10.0/runtimes/ios/native/onnxruntime_extensions.xcframework', SupportedPlatformVariant: 'ios', SupportedArchitectures: 'maccatalyst'. (MauiVisionSample)
I have talked with @YUNQIUGUO and we identified the issue , we need to update the Microsoft.ML.Onnxruntime.Extensions.Dummy
package to support MacCatalyst too for x86 and arm
Update: We identified the issue that for this to work, the onnxruntime_extensions.xcframework requires catalyst build support to be added as well. And with that supported, @rmarinho helped verify with a Nuget ORT package contains catalyst support and Nuget ORT Extension package with catalyst support (manually replaced and tested for now), this .NET MAUI app works in MacCatalyst platform.
So next step is when the official/dev version dummy extensions nuget package is released, we can update the package dependency here in this project and should be good to go.
Yap sounds good . will wait for dev package
Hello, I just tested the sample with the latest version of the onxx runtime and seems to be working fine, can we merge this?
Thanks
@YUNQIUGUO do you think this can be merged?
@rmarinho & @YUNQIUGUO I think there is still a problem with the "net8.0-maccatalyst" (x64) target support for the "Microsoft.ML.OnnxRuntime.Extensions", and I mean with the full Runtime Extensions and not the "Microsoft.ML.OnnxRuntime.Extensions.Dummy" nugget (which has no real implementation, and is only needed to fullfill iOS build requirement).
With the latest prerelease version "0.11.0-dev-20240524-2333-8d8670f7" of "Microsoft.ML.OnnxRuntime.Extensions", I was able to run the "MAUISuperResolution" perfectly fine for the Android target and also all fine in the iOS-Simulator. But when running the same code with MacCatalyst x64 target, I get an runtime error at inference time:
[ErrorCode:Fail] Fatal error: com.microsoft.extensions:DecodeImage(-1) is not a registered function/op
In contrast to the "MauiVisionSample" which does NOT use a pre-/postprocessing pipeline in the ONNX model, the "MauiSuperResolution" sample DOES USE and need the Extensions support for custom pre-/post processing like DecodeImage() and EncodeImage() Vision Operators:
const std::vector<const OrtCustomOp*>& VisionLoader() {
static OrtOpLoader op_loader(CustomCpuStruct("EncodeImage", ort_extensions::KernelEncodeImage),
CustomCpuStruct("DecodeImage", ort_extensions::KernelDecodeImage),
CustomCpuStruct("DrawBoundingBoxes", ort_extensions::DrawBoundingBoxes));
return op_loader.GetCustomOps();
}
FxLoadCustomOpFactory LoadCustomOpClasses_Vision = VisionLoader;
But even as the code in "MauiSuperResolution" registers for the Runtime Extensions support with following code in "OrtInferenceSession.cs":
// enable pre/post processing custom operators from onnxruntime-extensions
L37: _sessionOptions.RegisterOrtExtensions();
that ORT extensions are only found at runtime for Android and iOS, but NOT for MacCatalyst-x64.
I checked the "bin/debug/net8-maccatalyst/maccatalyst-x64" directory, and there is a "onyxruntime_extensions" Unix Executable File, but somehow that is not found at runtime or it is the wrong version for maccatalyst-x64.
So I think it is not sufficient to test ORT Extensions support or .NET8 support with the "MauiVisionSample", which only needs the Dummy Extensions. The test should be done with "MauiSuperResolution", which DOES use (and need) the ONNX Runtime Extensions. The latest "0.11.0-dev-20240524-2333-8d8670f7" nugget package of "Microsoft.ML.OnnxRuntime.Extensions" now allows to compile without error against the "net8.0-maccatalyst" target, but it can not find the standard ONNX Runtime Extensions functions/ops at runtime at inference time.
Verified with: macOS Sonoma 14.6 on MacBookPro (Intel x64) OS: Darwin x64 23.6.0 Xcode-15.4.0 VSCode Version: 1.92.1 (Universal) .NET SDK 8.0.303 .NET MAUI workload:: Installation Source: SDK 8.0.300, Manifest Version: 8.0.61/8.0.100
MauiSuperResolution.csproj::
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.ML.OnnxRuntime" Version="1.18.1" />
<PackageReference Include="Microsoft.ML.OnnxRuntime.Extensions" Version="0.11.0-dev-20240524-2333-8d8670f7" />
<PackageReference Include="Microsoft.ML.OnnxRuntime.Managed" Version="1.18.1" />
The latest release of the extensions package should now have a mac-catalyst build.
https://www.nuget.org/packages/Microsoft.ML.OnnxRuntime.Extensions/0.12.0
yap I updated all packages and I also hit that error on MacCatalyst on MBP M3 using the MAUISuperResolution" wi
I do think we can merge this pr as it fixes and updates most for net8
Documents dotnet --info
.NET SDK:
Version: 9.0.100-rc.1.24452.12
Commit: 81a714c6d3
Workload version: 9.0.100-rc.1.24453.3
MSBuild version: 17.12.0-preview-24422-09+d17ec720d
Runtime Environment:
OS Name: Mac OS X
OS Version: 14.6
OS Platform: Darwin
RID: osx-arm64
Base Path: /usr/local/share/dotnet/sdk/9.0.100-rc.1.24452.12/
.NET workloads installed:
Configured to use workload sets when installing new manifests.
[maui]
Installation Source: SDK 9.0.100-rc.1
Manifest Version: 9.0.0-rc.1.24453.9/9.0.100-rc.1
Manifest Path: /usr/local/share/dotnet/sdk-manifests/9.0.100-rc.1/microsoft.net.sdk.maui/9.0.0-rc.1.24453.9/WorkloadManifest.json
Install Type: FileBased
Host:
Version: 9.0.0-rc.1.24431.7
Architecture: arm64
Commit: static
.NET SDKs installed:
7.0.317 [/usr/local/share/dotnet/sdk]
8.0.401 [/usr/local/share/dotnet/sdk]
9.0.100-rc.1.24452.12 [/usr/local/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.8 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.0-rc.1.24452.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.8 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.0-rc.1.24431.7 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
None
Environment variables:
Not set
global.json file:
Not found
Learn more:
https://aka.ms/dotnet/info
Download .NET:
https://aka.ms/dotnet/download
@skottmckay and @rmarinho The problem I have is NOT that I not get a valid build for Mac Catalyst, but that an App which actually really then USES the ORT-Extensions errors out at runtime, because of something is still missing.
Now with version 0.12 the error changed to "One or more errors occurred. (The type initializer for 'Microsoft.ML.OnnxRuntime.NativeMethods' threw an exception.)".
With v 0.11-dev it was another error I send here before/above. So with your example of the "Dummy" package it may be possible now to built for MacCatalyst, but when you actually use ORT-Extension v0.12 it does NOT work on MacCatalyst.
Unfortunately the build config for mac-catalyst is excluding the image decoding/encoding operators due to an issue with opencv. This PR should hopefully address that.
Any else I need to do to get this merged? Thanks
@skottmckay so basically your mentioned PR only is a different wording for a clearer error message like "NSImage is not supported on Mac Catalyst", but the image decoding/encoding operators will NOT be included for Mac Catalyst? Is there no hope that this issue with opencv can be fixed for Mac Catalyst?
This pull request primarily aims to update the MauiVisionSample project in the
mobile/examples/Maui
directory to support the MacCatalyst platform, along with some other improvements and updates. The most significant changes include updating the target frameworks in the project file, adding MacCatalyst-specific files, updating package references, and adding debug logging.This pull request primarily focuses on updating the MauiVisionSample application to support the MacCatalyst platform and updating the target frameworks to .NET 8.0. It also includes changes to improve debugging, and package updates.
The most important changes are:
This pull request includes several changes to enhance compatibility with .NET 8.0, add support for MacCatalyst, and update dependencies in the MauiVisionSample and MauiSuperResolution projects.
Compatibility and Platform Support:
mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml.cs
)mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiVisionSample.csproj
) [1] [2] [3]mobile/examples/super_resolution/MAUI/MauiSuperResolution/MauiSuperResolution.csproj
) [1] [2]Dependency Updates:
Microsoft.ML.OnnxRuntime
,SkiaSharp
, and added new references forMicrosoft.Maui.Controls
andMicrosoft.Extensions.Logging.Debug
. (mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiVisionSample.csproj
)Microsoft.ML.OnnxRuntime
and its extensions. (mobile/examples/super_resolution/MAUI/MauiSuperResolution/MauiSuperResolution.csproj
)Logging and Debugging:
mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiProgram.cs
)MacCatalyst Specific Files:
AppDelegate.cs
,Entitlements.plist
,Info.plist
, andProgram.cs
for both projects.mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/AppDelegate.cs
) [1] (mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/Entitlements.plist
) [2] (mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/Info.plist
) [3] (mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/Program.cs
) [4]mobile/examples/super_resolution/MAUI/MauiSuperResolution/Platforms/MacCatalyst/AppDelegate.cs
) [1] (mobile/examples/super_resolution/MAUI/MauiSuperResolution/Platforms/MacCatalyst/Entitlements.plist
) [2] (mobile/examples/super_resolution/MAUI/MauiSuperResolution/Platforms/MacCatalyst/Info.plist
) [3] (mobile/examples/super_resolution/MAUI/MauiSuperResolution/Platforms/MacCatalyst/Program.cs
) [4]Solution Files:
mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiVisionSample.sln
)mobile/examples/super_resolution/MAUI/MauiSuperResolution/MauiSuperResolution.sln
)