added license headers and overload functions
This commit is contained in:
Родитель
ff61225259
Коммит
5364a6824e
|
@ -0,0 +1,5 @@
|
||||||
|
extensions: designer.cs generated.cs
|
||||||
|
extensions: .cs
|
||||||
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
|
@ -132,11 +132,17 @@
|
||||||
<PackageReference Include="Newtonsoft.Json">
|
<PackageReference Include="Newtonsoft.Json">
|
||||||
<Version>13.0.1</Version>
|
<Version>13.0.1</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
<PackageReference Include="System.Text.Json">
|
||||||
|
<Version>5.0.2</Version>
|
||||||
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Assets\model.onnx" />
|
<Content Include="Assets\model.onnx" />
|
||||||
<Content Include="Assets\Labels.json" />
|
<Content Include="Assets\Labels.json" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="ImageClassifier.licenseheader" />
|
||||||
|
</ItemGroup>
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<package >
|
<package >
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>IntelligentAPI.ImageClassifier</id>
|
<id>IntelligentAPI_ImageClassifier</id>
|
||||||
<version>0.0.16</version>
|
<version>0.0.17</version>
|
||||||
<title>Cool nuget package for ML stuff</title>
|
<title>Cool nuget package for ML stuff</title>
|
||||||
<authors>Amrutha Srinivasan</authors>
|
<authors>Amrutha Srinivasan</authors>
|
||||||
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
<iconUrl>http://icon_url_here_or_delete_this_line/</iconUrl>
|
<iconUrl>http://icon_url_here_or_delete_this_line/</iconUrl>
|
||||||
<description>Nuget package that exposes APIs to perform image classification</description>
|
<description>Nuget package that exposes APIs to perform image classification</description>
|
||||||
<copyright>Cool nuget package for ML stuff</copyright>
|
<copyright>Cool nuget package for ML stuff</copyright>
|
||||||
|
<repository type="git" url="https://github.com/windows-toolkit/Labs-IntelligentAPIs.git"></repository>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
<file src="bin\Debug\*.dll" target="lib\uap10.0.17763" />
|
<file src="bin\Debug\*.dll" target="lib\uap10.0.17763" />
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
using System.Reflection;
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
using Newtonsoft.Json;
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
@ -12,6 +15,8 @@ using Windows.Media;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
using Windows.Storage.Streams;
|
using Windows.Storage.Streams;
|
||||||
using Windows.UI.Xaml.Media.Imaging;
|
using Windows.UI.Xaml.Media.Imaging;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
|
|
||||||
namespace IntelligentAPI.ImageClassification
|
namespace IntelligentAPI.ImageClassification
|
||||||
{
|
{
|
||||||
|
@ -19,8 +24,8 @@ namespace IntelligentAPI.ImageClassification
|
||||||
|
|
||||||
public class SqueezeNetImageClassifier
|
public class SqueezeNetImageClassifier
|
||||||
{
|
{
|
||||||
private const string _kModelFileName = "model.onnx";
|
private const string _modelFileName = "model.onnx";
|
||||||
private const string _kLabelsFileName = "Labels.json";
|
private const string _labelsFileName = "Labels.json";
|
||||||
private LearningModel _model = null;
|
private LearningModel _model = null;
|
||||||
private LearningModelSession _session;
|
private LearningModelSession _session;
|
||||||
private List<string> _labels = new List<string>();
|
private List<string> _labels = new List<string>();
|
||||||
|
@ -30,17 +35,53 @@ namespace IntelligentAPI.ImageClassification
|
||||||
private SqueezeNetImageClassifier()
|
private SqueezeNetImageClassifier()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public static async Task<List<ClassificationResult>> ClassifyImage(StorageFile selectedStorageFile, int top)
|
public static async Task<List<ClassificationResult>> ClassifyImage(StorageFile selectedStorageFile, int top=3)
|
||||||
|
{
|
||||||
|
CreateInstanceIfNone();
|
||||||
|
SoftwareBitmap softwareBitmap = await GenerateSoftwareBitmapFromStorageFile(selectedStorageFile);
|
||||||
|
VideoFrame videoFrame = await GenerateVideoFrameFromBitmap(softwareBitmap);
|
||||||
|
return await instance.EvaluateModel(videoFrame, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<List<ClassificationResult>> ClassifyImage(SoftwareBitmap softwareBitmap, int top=3)
|
||||||
|
{
|
||||||
|
CreateInstanceIfNone();
|
||||||
|
VideoFrame videoFrame = await GenerateVideoFrameFromBitmap(softwareBitmap);
|
||||||
|
return await instance.EvaluateModel(videoFrame, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<List<ClassificationResult>> ClassifyImage(VideoFrame videoFrame, int top=3)
|
||||||
|
{
|
||||||
|
CreateInstanceIfNone();
|
||||||
|
return await instance.EvaluateModel(videoFrame, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateInstanceIfNone()
|
||||||
{
|
{
|
||||||
if (instance == null)
|
if (instance == null)
|
||||||
{
|
{
|
||||||
instance = new SqueezeNetImageClassifier();
|
instance = new SqueezeNetImageClassifier();
|
||||||
}
|
}
|
||||||
return await instance.EvaluateModel(selectedStorageFile, top);
|
|
||||||
}
|
}
|
||||||
public async Task<List<ClassificationResult>> EvaluateModel(StorageFile selectedStorageFile, int top)
|
|
||||||
|
public async Task<List<ClassificationResult>> EvaluateModel(VideoFrame inputImage, int top)
|
||||||
{
|
{
|
||||||
await LoadModelAsync();
|
await LoadModelAsync();
|
||||||
|
return await EvaluateVideoFrameAsync(inputImage, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<VideoFrame> GenerateVideoFrameFromBitmap(SoftwareBitmap softwareBitmap)
|
||||||
|
{
|
||||||
|
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
|
||||||
|
await imageSource.SetBitmapAsync(softwareBitmap);
|
||||||
|
|
||||||
|
// Encapsulate the image within a VideoFrame to be bound and evaluated
|
||||||
|
VideoFrame videoFrame = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
|
||||||
|
return videoFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<SoftwareBitmap> GenerateSoftwareBitmapFromStorageFile(StorageFile selectedStorageFile)
|
||||||
|
{
|
||||||
SoftwareBitmap softwareBitmap;
|
SoftwareBitmap softwareBitmap;
|
||||||
using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
|
using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
|
||||||
{
|
{
|
||||||
|
@ -52,14 +93,7 @@ namespace IntelligentAPI.ImageClassification
|
||||||
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
|
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display the image
|
return softwareBitmap;
|
||||||
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
|
|
||||||
await imageSource.SetBitmapAsync(softwareBitmap);
|
|
||||||
|
|
||||||
// Encapsulate the image within a VideoFrame to be bound and evaluated
|
|
||||||
VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
|
|
||||||
|
|
||||||
return await EvaluateVideoFrameAsync(inputImage, top);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadModelAsync()
|
private async Task LoadModelAsync()
|
||||||
|
@ -71,11 +105,11 @@ namespace IntelligentAPI.ImageClassification
|
||||||
{
|
{
|
||||||
// Parse labels from label json file. We know the file's
|
// Parse labels from label json file. We know the file's
|
||||||
// entries are already sorted in order.
|
// entries are already sorted in order.
|
||||||
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///IntelligentAPI_ImageClassifier/Assets/Labels.json"));
|
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///IntelligentAPI_ImageClassifier/Assets/" + _labelsFileName));
|
||||||
|
|
||||||
var fileString = await FileIO.ReadTextAsync(file);
|
var fileString = await FileIO.ReadTextAsync(file);
|
||||||
|
|
||||||
var fileDict = JsonConvert.DeserializeObject<Dictionary<string, string>>(fileString);
|
var fileDict = JsonSerializer.Deserialize<Dictionary<string, string>>(fileString);
|
||||||
|
|
||||||
foreach (var kvp in fileDict)
|
foreach (var kvp in fileDict)
|
||||||
{
|
{
|
||||||
|
@ -83,7 +117,7 @@ namespace IntelligentAPI.ImageClassification
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///IntelligentAPI_ImageClassifier/Assets/model.onnx"));
|
var modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///IntelligentAPI_ImageClassifier/Assets/" + _modelFileName));
|
||||||
_model = await LearningModel.LoadFromStorageFileAsync(modelFile);
|
_model = await LearningModel.LoadFromStorageFileAsync(modelFile);
|
||||||
|
|
||||||
// Create the evaluation session with the model and device
|
// Create the evaluation session with the model and device
|
||||||
|
@ -167,7 +201,7 @@ namespace IntelligentAPI.ImageClassification
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
throw ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
// This file was automatically generated by VS extension Windows Machine Learning Code Generator v3
|
// This file was automatically generated by VS extension Windows Machine Learning Code Generator v3
|
||||||
// from model file model.onnx
|
// from model file model.onnx
|
||||||
// Warning: This file may get overwritten if you add add an onnx file with the same name
|
// Warning: This file may get overwritten if you add add an onnx file with the same name
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<clear />
|
||||||
|
<add key="github" value="https://nuget.pkg.github.com/windows-toolkit/index.json" />
|
||||||
|
</packageSources>
|
||||||
|
<packageSourceCredentials>
|
||||||
|
<github>
|
||||||
|
<add key="Username" value="amrutha95" />
|
||||||
|
<add key="ClearTextPassword" value="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" />
|
||||||
|
</github>
|
||||||
|
</packageSourceCredentials>
|
||||||
|
</configuration>
|
|
@ -64,6 +64,8 @@ Global
|
||||||
{F705B499-D0B5-408C-B1D1-D3F379D0FCD6}.Release|x86.ActiveCfg = Release|x86
|
{F705B499-D0B5-408C-B1D1-D3F379D0FCD6}.Release|x86.ActiveCfg = Release|x86
|
||||||
{F705B499-D0B5-408C-B1D1-D3F379D0FCD6}.Release|x86.Build.0 = Release|x86
|
{F705B499-D0B5-408C-B1D1-D3F379D0FCD6}.Release|x86.Build.0 = Release|x86
|
||||||
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|Any CPU.ActiveCfg = Debug|x86
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|Any CPU.ActiveCfg = Debug|x86
|
||||||
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|Any CPU.Build.0 = Debug|x86
|
||||||
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|Any CPU.Deploy.0 = Debug|x86
|
||||||
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.ActiveCfg = Debug|ARM
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.ActiveCfg = Debug|ARM
|
||||||
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.Build.0 = Debug|ARM
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.Build.0 = Debug|ARM
|
||||||
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.Deploy.0 = Debug|ARM
|
{47D87733-B357-4706-88BD-211FB7D8679D}.Debug|ARM.Deploy.0 = Debug|ARM
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<clear />
|
||||||
|
<add key="github" value="https://nuget.pkg.github.com/amrutha95/index.json" />
|
||||||
|
</packageSources>
|
||||||
|
<packageSourceCredentials>
|
||||||
|
<github>
|
||||||
|
<add key="Username" value="amrutha95" />
|
||||||
|
<add key="ClearTextPassword" value="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" />
|
||||||
|
</github>
|
||||||
|
</packageSourceCredentials>
|
||||||
|
</configuration>
|
|
@ -136,6 +136,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="IntelligentAPI_ObjectDetector.nuspec" />
|
<None Include="IntelligentAPI_ObjectDetector.nuspec" />
|
||||||
<None Include="IntelligentAPI_ObjectDetector.pri" />
|
<None Include="IntelligentAPI_ObjectDetector.pri" />
|
||||||
|
<None Include="ObjectDetector.licenseheader" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' ">
|
||||||
<VisualStudioVersion>14.0</VisualStudioVersion>
|
<VisualStudioVersion>14.0</VisualStudioVersion>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<license type="expression">MIT</license>
|
<license type="expression">MIT</license>
|
||||||
<description>Nuget package for real time object detection</description>
|
<description>Nuget package for real time object detection</description>
|
||||||
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
|
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
|
||||||
<tags>Tag1 Tag2</tags>
|
<repository type="git" url="https://github.com/windows-toolkit/Labs-IntelligentAPIs.git"></repository>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
||||||
<files>
|
<files>
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
extensions: designer.cs generated.cs
|
||||||
|
extensions: .cs
|
||||||
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
|
@ -1,4 +1,8 @@
|
||||||
using System.Reflection;
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System.Reflection;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
using System;
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
@ -111,18 +114,25 @@ namespace IntelligentAPI.ObjectDetection
|
||||||
|
|
||||||
public static async Task<List<DetectionResult>> DetectObjects(StorageFile file)
|
public static async Task<List<DetectionResult>> DetectObjects(StorageFile file)
|
||||||
{
|
{
|
||||||
VideoFrame inputImage = await convertToVideoFrame(file);
|
SoftwareBitmap bitmap = await GenerateSoftwareBitmapFromStorageFile(file);
|
||||||
return await DetectObjects(inputImage);
|
VideoFrame videoFrame = await GenerateVideoFrameFromBitmap(bitmap);
|
||||||
|
return await DetectObjects(videoFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<List<DetectionResult>> DetectObjects(VideoFrame file)
|
public static async Task<List<DetectionResult>> DetectObjects(SoftwareBitmap bitmap)
|
||||||
|
{
|
||||||
|
VideoFrame videoFrame = await GenerateVideoFrameFromBitmap(bitmap);
|
||||||
|
return await DetectObjects(videoFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task<List<DetectionResult>> DetectObjects(VideoFrame videoFrame)
|
||||||
{
|
{
|
||||||
if (instance == null)
|
if (instance == null)
|
||||||
{
|
{
|
||||||
instance = new YOLOObjectDetector();
|
instance = new YOLOObjectDetector();
|
||||||
}
|
}
|
||||||
|
|
||||||
return await instance.EvaluateFrame(file);
|
return await instance.EvaluateFrame(videoFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InitModelAsync()
|
private async Task InitModelAsync()
|
||||||
|
@ -150,6 +160,24 @@ namespace IntelligentAPI.ObjectDetection
|
||||||
{
|
{
|
||||||
await InitModelAsync();
|
await InitModelAsync();
|
||||||
SoftwareBitmap bitmap = inputImage.SoftwareBitmap;
|
SoftwareBitmap bitmap = inputImage.SoftwareBitmap;
|
||||||
|
inputImage = await ResizeImage(inputImage, bitmap);
|
||||||
|
_binding.Clear();
|
||||||
|
_binding.Bind("input_1:0", inputImage);
|
||||||
|
var results = await _session.EvaluateAsync(_binding, "");
|
||||||
|
|
||||||
|
TensorFloat result = results.Outputs["Identity:0"] as TensorFloat;
|
||||||
|
var data = result.GetAsVectorView();
|
||||||
|
|
||||||
|
List<DetectionResult> detections = ParseResult(data.ToList<float>().ToArray());
|
||||||
|
Comparer cp = new Comparer();
|
||||||
|
detections.Sort(cp);
|
||||||
|
List<DetectionResult> final_detections = NMS(detections);
|
||||||
|
|
||||||
|
return final_detections;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<VideoFrame> ResizeImage(VideoFrame inputImage, SoftwareBitmap bitmap)
|
||||||
|
{
|
||||||
using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
|
using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
|
||||||
{
|
{
|
||||||
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
|
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
|
||||||
|
@ -167,25 +195,24 @@ namespace IntelligentAPI.ObjectDetection
|
||||||
SoftwareBitmap newBitmap = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, bitmap.BitmapAlphaMode);
|
SoftwareBitmap newBitmap = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, bitmap.BitmapAlphaMode);
|
||||||
inputImage = VideoFrame.CreateWithSoftwareBitmap(newBitmap);
|
inputImage = VideoFrame.CreateWithSoftwareBitmap(newBitmap);
|
||||||
}
|
}
|
||||||
_binding.Clear();
|
|
||||||
_binding.Bind("input_1:0", inputImage);
|
|
||||||
var results = await _session.EvaluateAsync(_binding, "");
|
|
||||||
|
|
||||||
TensorFloat result = results.Outputs["Identity:0"] as TensorFloat;
|
return inputImage;
|
||||||
var data = result.GetAsVectorView();
|
|
||||||
|
|
||||||
List<DetectionResult> detections = ParseResult(data.ToList<float>().ToArray());
|
|
||||||
Comparer cp = new Comparer();
|
|
||||||
detections.Sort(cp);
|
|
||||||
List<DetectionResult> final_detections = NMS(detections);
|
|
||||||
|
|
||||||
return final_detections;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<VideoFrame> convertToVideoFrame(StorageFile file)
|
private static async Task<VideoFrame> GenerateVideoFrameFromBitmap(SoftwareBitmap softwareBitmap)
|
||||||
|
{
|
||||||
|
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
|
||||||
|
await imageSource.SetBitmapAsync(softwareBitmap);
|
||||||
|
|
||||||
|
// Encapsulate the image within a VideoFrame to be bound and evaluated
|
||||||
|
VideoFrame videoFrame = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
|
||||||
|
return videoFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static async Task<SoftwareBitmap> GenerateSoftwareBitmapFromStorageFile(StorageFile selectedStorageFile)
|
||||||
{
|
{
|
||||||
SoftwareBitmap softwareBitmap;
|
SoftwareBitmap softwareBitmap;
|
||||||
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
|
using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
|
||||||
{
|
{
|
||||||
// Create the decoder from the stream
|
// Create the decoder from the stream
|
||||||
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
|
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
|
||||||
|
@ -195,13 +222,7 @@ namespace IntelligentAPI.ObjectDetection
|
||||||
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
|
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display the image
|
return softwareBitmap;
|
||||||
SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
|
|
||||||
await imageSource.SetBitmapAsync(softwareBitmap);
|
|
||||||
|
|
||||||
// Encapsulate the image within a VideoFrame to be bound and evaluated
|
|
||||||
VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
|
|
||||||
return inputImage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Comparer : IComparer<DetectionResult>
|
class Comparer : IComparer<DetectionResult>
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
// Licensed to the .NET Foundation under one or more agreements.
|
||||||
|
// The .NET Foundation licenses this file to you under the MIT license.
|
||||||
|
// See the LICENSE file in the project root for more information.
|
||||||
|
|
||||||
// This file was automatically generated by VS extension Windows Machine Learning Code Generator v3
|
// This file was automatically generated by VS extension Windows Machine Learning Code Generator v3
|
||||||
// from model file Yolo.onnx
|
// from model file Yolo.onnx
|
||||||
// Warning: This file may get overwritten if you add add an onnx file with the same name
|
// Warning: This file may get overwritten if you add add an onnx file with the same name
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<packageSources>
|
||||||
|
<clear />
|
||||||
|
<add key="github" value="https://nuget.pkg.github.com/windows-toolkit/index.json" />
|
||||||
|
</packageSources>
|
||||||
|
<packageSourceCredentials>
|
||||||
|
<github>
|
||||||
|
<add key="Username" value="amrutha95" />
|
||||||
|
<add key="ClearTextPassword" value="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" />
|
||||||
|
</github>
|
||||||
|
</packageSourceCredentials>
|
||||||
|
</configuration>
|
Загрузка…
Ссылка в новой задаче