From 0e28cb2273b6beb283430bfb60fb76144bd1e56a Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Tue, 4 Apr 2017 16:03:42 -0700 Subject: [PATCH 01/16] Start of ImageProcessing library and test app --- .gitattributes | 63 +++++ .gitignore | 260 ++++++++++++++++-- ImageProcessing/ImageProcessing.sln | 62 +++++ .../ProcessingLibrary/FaceInsights.cs | 12 + .../ProcessingLibrary/ImageInsights.cs | 15 + .../ImageProcessingLibrary.csproj | 97 +++++++ .../ProcessingLibrary/ImageProcessor.cs | 68 +++++ .../Properties/AssemblyInfo.cs | 30 ++ .../ServiceHelpers/CoreUtil.cs | 60 ++++ .../ServiceHelpers/EmotionServiceHelper.cs | 110 ++++++++ .../ServiceHelpers/ErrorTrackingHelper.cs | 16 ++ .../ServiceHelpers/FaceListManager.cs | 193 +++++++++++++ .../ServiceHelpers/FaceServiceHelper.cs | 193 +++++++++++++ .../ServiceHelpers/ImageAnalyzer.cs | 162 +++++++++++ .../ServiceHelpers/VisionServiceHelper.cs | 115 ++++++++ .../ProcessingLibrary/VisionInsights.cs | 8 + ImageProcessing/ProcessingLibrary/app.config | 11 + .../ProcessingLibrary/packages.config | 11 + ImageProcessing/TestApp/App.xaml | 8 + ImageProcessing/TestApp/App.xaml.cs | 106 +++++++ .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes .../TestApp/Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes ImageProcessing/TestApp/Assets/StoreLogo.png | Bin 0 -> 1451 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes ImageProcessing/TestApp/MainPage.xaml | 71 +++++ ImageProcessing/TestApp/MainPage.xaml.cs | 129 +++++++++ ImageProcessing/TestApp/Package.appxmanifest | 29 ++ .../TestApp/Properties/AssemblyInfo.cs | 29 ++ .../TestApp/Properties/Default.rd.xml | 31 +++ ImageProcessing/TestApp/TestApp.csproj | 149 ++++++++++ .../ViewModel/ImageInsightsViewModel.cs | 27 ++ .../TestApp/ViewModel/TagFilterViewModel.cs | 23 ++ ImageProcessing/TestApp/packages.config | 11 + ImageProcessing/TestApp/project.json | 17 ++ 37 files changed, 2090 insertions(+), 26 deletions(-) create mode 100644 .gitattributes create mode 100644 ImageProcessing/ImageProcessing.sln create mode 100644 ImageProcessing/ProcessingLibrary/FaceInsights.cs create mode 100644 ImageProcessing/ProcessingLibrary/ImageInsights.cs create mode 100644 ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj create mode 100644 ImageProcessing/ProcessingLibrary/ImageProcessor.cs create mode 100644 ImageProcessing/ProcessingLibrary/Properties/AssemblyInfo.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/EmotionServiceHelper.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceServiceHelper.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs create mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs create mode 100644 ImageProcessing/ProcessingLibrary/VisionInsights.cs create mode 100644 ImageProcessing/ProcessingLibrary/app.config create mode 100644 ImageProcessing/ProcessingLibrary/packages.config create mode 100644 ImageProcessing/TestApp/App.xaml create mode 100644 ImageProcessing/TestApp/App.xaml.cs create mode 100644 ImageProcessing/TestApp/Assets/LockScreenLogo.scale-200.png create mode 100644 ImageProcessing/TestApp/Assets/SplashScreen.scale-200.png create mode 100644 ImageProcessing/TestApp/Assets/Square150x150Logo.scale-200.png create mode 100644 ImageProcessing/TestApp/Assets/Square44x44Logo.scale-200.png create mode 100644 ImageProcessing/TestApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 ImageProcessing/TestApp/Assets/StoreLogo.png create mode 100644 ImageProcessing/TestApp/Assets/Wide310x150Logo.scale-200.png create mode 100644 ImageProcessing/TestApp/MainPage.xaml create mode 100644 ImageProcessing/TestApp/MainPage.xaml.cs create mode 100644 ImageProcessing/TestApp/Package.appxmanifest create mode 100644 ImageProcessing/TestApp/Properties/AssemblyInfo.cs create mode 100644 ImageProcessing/TestApp/Properties/Default.rd.xml create mode 100644 ImageProcessing/TestApp/TestApp.csproj create mode 100644 ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs create mode 100644 ImageProcessing/TestApp/ViewModel/TagFilterViewModel.cs create mode 100644 ImageProcessing/TestApp/packages.config create mode 100644 ImageProcessing/TestApp/project.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 5148e52..3a2238d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,37 +1,245 @@ -# Logs -logs +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj *.log -npm-debug.log* +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Microsoft Azure ApplicationInsights config file +ApplicationInsights.config + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf -# Runtime data -pids -*.pid -*.seed +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov +# Microsoft Fakes +FakesAssemblies/ -# Coverage directory used by tools like istanbul -coverage +# GhostDoc plugin setting file +*.GhostDoc.xml -# nyc test coverage -.nyc_output +# Node.js Tools for Visual Studio +.ntvs_analysis.dat -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt +# Visual Studio 6 build log +*.plg -# node-waf configuration -.lock-wscript +# Visual Studio 6 workspace options file +*.opt -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions -# Dependency directories -node_modules -jspm_packages +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml -# Optional npm cache directory -.npm +# Paket dependency manager +.paket/paket.exe -# Optional REPL history -.node_repl_history +# FAKE - F# Make +.fake/ \ No newline at end of file diff --git a/ImageProcessing/ImageProcessing.sln b/ImageProcessing/ImageProcessing.sln new file mode 100644 index 0000000..65abd98 --- /dev/null +++ b/ImageProcessing/ImageProcessing.sln @@ -0,0 +1,62 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{3A10B4A0-1C80-455A-A113-E393380D6F35}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageProcessingLibrary", "ProcessingLibrary\ImageProcessingLibrary.csproj", "{C0EE790E-E0F8-4942-A269-749E1EDD1809}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.ActiveCfg = Debug|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Build.0 = Debug|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Deploy.0 = Debug|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x64.ActiveCfg = Debug|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x64.Build.0 = Debug|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x64.Deploy.0 = Debug|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x86.ActiveCfg = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x86.Build.0 = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|x86.Deploy.0 = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|Any CPU.ActiveCfg = Release|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|ARM.ActiveCfg = Release|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|ARM.Build.0 = Release|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|ARM.Deploy.0 = Release|ARM + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x64.ActiveCfg = Release|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x64.Build.0 = Release|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x64.Deploy.0 = Release|x64 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x86.ActiveCfg = Release|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x86.Build.0 = Release|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Release|x86.Deploy.0 = Release|x86 + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|ARM.ActiveCfg = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|ARM.Build.0 = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|x64.ActiveCfg = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|x64.Build.0 = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|x86.ActiveCfg = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Debug|x86.Build.0 = Debug|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|Any CPU.Build.0 = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|ARM.ActiveCfg = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|ARM.Build.0 = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|x64.ActiveCfg = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|x64.Build.0 = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|x86.ActiveCfg = Release|Any CPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/ImageProcessing/ProcessingLibrary/FaceInsights.cs b/ImageProcessing/ProcessingLibrary/FaceInsights.cs new file mode 100644 index 0000000..e3a8dc7 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/FaceInsights.cs @@ -0,0 +1,12 @@ +using Microsoft.ProjectOxford.Face.Contract; +using System; + +namespace ImageProcessingLibrary +{ + public class FaceInsights + { + public Guid UniqueFaceId { get; set; } + public FaceRectangle FaceRectangle { get; set; } + public string TopEmotion { get; set; } + } +} diff --git a/ImageProcessing/ProcessingLibrary/ImageInsights.cs b/ImageProcessing/ProcessingLibrary/ImageInsights.cs new file mode 100644 index 0000000..8807ef5 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ImageInsights.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ImageProcessingLibrary +{ + public class ImageInsights + { + public string ImageId { get; set; } + public FaceInsights[] FaceInsights { get; set; } + public VisionInsights VisionInsights { get; set; } + } +} diff --git a/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj b/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj new file mode 100644 index 0000000..fd3a106 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj @@ -0,0 +1,97 @@ + + + + + 11.0 + Debug + AnyCPU + {C0EE790E-E0F8-4942-A269-749E1EDD1809} + Library + Properties + ImageProcessingLibrary + ImageProcessingLibrary + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Profile7 + v4.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + ..\packages\Microsoft.ProjectOxford.Common.1.0.324\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\Microsoft.ProjectOxford.Common.dll + True + + + ..\packages\Microsoft.ProjectOxford.Emotion.1.0.336\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\Microsoft.ProjectOxford.Emotion.dll + True + + + ..\packages\Microsoft.ProjectOxford.Face.1.2.5\lib\portable-net45+wp80+win8+wpa81+aspnetcore50\Microsoft.ProjectOxford.Face.dll + True + + + ..\packages\Microsoft.ProjectOxford.Vision.1.0.372\lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10\Microsoft.ProjectOxford.Vision.dll + True + + + ..\packages\Newtonsoft.Json.9.0.1\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll + True + + + ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net45+win8\System.Net.Http.Extensions.dll + True + + + ..\packages\Microsoft.Net.Http.2.2.29\lib\portable-net45+win8\System.Net.Http.Primitives.dll + True + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/ProcessingLibrary/ImageProcessor.cs b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs new file mode 100644 index 0000000..6294afb --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs @@ -0,0 +1,68 @@ +using Microsoft.ProjectOxford.Common.Contract; +using ServiceHelpers; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace ImageProcessingLibrary +{ + public class ImageProcessor + { + static ImageProcessor() + { + FaceServiceHelper.ApiKey = ""; + EmotionServiceHelper.ApiKey = ""; + VisionServiceHelper.ApiKey = ""; + } + + public static Task ProcessImageAsync(Func> imageStream, string imageId) + { + return Task.Run(async () => + { + ImageAnalyzer analyzer = new ImageAnalyzer(imageStream); + + // trigger vision, face and emotion requests + await Task.WhenAll(analyzer.AnalyzeImageAsync(), analyzer.DetectFacesAsync(detectFaceAttributes: true), analyzer.DetectEmotionAsync()); + + // trigger face match against previously seen faces + await analyzer.FindSimilarPersistedFacesAsync(); + + ImageInsights result = new ImageInsights { ImageId = imageId }; + + // assign computer vision results + result.VisionInsights = new VisionInsights + { + Caption = analyzer.AnalysisResult.Description?.Captions[0].Text, + Tags = analyzer.AnalysisResult.Tags.Select(t => t.Name).ToArray() + }; + + // assign face api and emotion api results + List faceInsightsList = new List(); + foreach (var face in analyzer.DetectedFaces) + { + FaceInsights faceInsights = new FaceInsights { FaceRectangle = face.FaceRectangle }; + + SimilarFaceMatch similarFaceMatch = analyzer.SimilarFaceMatches.FirstOrDefault(s => s.Face.FaceId == face.FaceId); + if (similarFaceMatch != null) + { + faceInsights.UniqueFaceId = similarFaceMatch.SimilarPersistedFace.PersistedFaceId; + } + + Emotion faceEmotion = CoreUtil.FindFaceClosestToRegion(analyzer.DetectedEmotion, face.FaceRectangle); + if (faceEmotion != null) + { + faceInsights.TopEmotion = faceEmotion.Scores.ToRankedList().First().Key; + } + + faceInsightsList.Add(faceInsights); + } + + result.FaceInsights = faceInsightsList.ToArray(); + + return result; + }); + } + } +} diff --git a/ImageProcessing/ProcessingLibrary/Properties/AssemblyInfo.cs b/ImageProcessing/ProcessingLibrary/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9987f9f --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ImageProcessingLibrary")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ImageProcessingLibrary")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs new file mode 100644 index 0000000..3cca940 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs @@ -0,0 +1,60 @@ +using Microsoft.ProjectOxford.Common; +using Microsoft.ProjectOxford.Common.Contract; +using Microsoft.ProjectOxford.Face.Contract; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace ServiceHelpers +{ + public class CoreUtil + { + public static uint MinDetectableFaceCoveragePercentage = 0; + + public static bool IsFaceBigEnoughForDetection(int faceHeight, int imageHeight) + { + if (imageHeight == 0) + { + // sometimes we don't know the size of the image, so we assume the face is big enough + return true; + } + + double faceHeightPercentage = 100 * ((double) faceHeight / imageHeight); + + return faceHeightPercentage >= MinDetectableFaceCoveragePercentage; + } + + public static Emotion FindFaceClosestToRegion(IEnumerable emotion, FaceRectangle region) + { + return emotion?.Where(e => CoreUtil.AreFacesPotentiallyTheSame(e.FaceRectangle, region)) + .OrderBy(e => Math.Abs(region.Left - e.FaceRectangle.Left) + Math.Abs(region.Top - e.FaceRectangle.Top)).FirstOrDefault(); + } + + public static bool AreFacesPotentiallyTheSame(Rectangle face1, FaceRectangle face2) + { + return AreFacesPotentiallyTheSame((int)face1.Left, (int)face1.Top, (int)face1.Width, (int)face1.Height, face2.Left, face2.Top, face2.Width, face2.Height); + } + + public static bool AreFacesPotentiallyTheSame(int face1X, int face1Y, int face1Width, int face1Height, + int face2X, int face2Y, int face2Width, int face2Height) + { + double distanceThresholdFactor = 1; + double sizeThresholdFactor = 0.5; + + // See if faces are close enough from each other to be considered the "same" + if (Math.Abs(face1X - face2X) <= face1Width * distanceThresholdFactor && + Math.Abs(face1Y - face2Y) <= face1Height * distanceThresholdFactor) + { + // See if faces are shaped similarly enough to be considered the "same" + if (Math.Abs(face1Width - face2Width) <= face1Width * sizeThresholdFactor && + Math.Abs(face1Height - face2Height) <= face1Height * sizeThresholdFactor) + { + return true; + } + } + + return false; + } + + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/EmotionServiceHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/EmotionServiceHelper.cs new file mode 100644 index 0000000..fd57bb8 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/EmotionServiceHelper.cs @@ -0,0 +1,110 @@ +using Microsoft.ProjectOxford.Common; +using Microsoft.ProjectOxford.Common.Contract; +using Microsoft.ProjectOxford.Emotion; +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.Http; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + public class EmotionData + { + public string EmotionName { get; set; } + public float EmotionScore { get; set; } + } + + public static class EmotionServiceHelper + { + public static int RetryCountOnQuotaLimitError = 6; + public static int RetryDelayOnQuotaLimitError = 500; + + private static EmotionServiceClient emotionClient { get; set; } + + static EmotionServiceHelper() + { + InitializeEmotionService(); + } + + public static Action Throttled; + + private static string apiKey; + public static string ApiKey { + get{ return apiKey; } + set { + var changed = apiKey != value; + apiKey = value; + if (changed) + InitializeEmotionService(); + } + } + + private static void InitializeEmotionService() + { + emotionClient = new EmotionServiceClient(apiKey); + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func> action) + { + int retriesLeft = FaceServiceHelper.RetryCountOnQuotaLimitError; + int delay = FaceServiceHelper.RetryDelayOnQuotaLimitError; + + TResponse response = default(TResponse); + + while (true) + { + try + { + response = await action(); + break; + } + catch (ClientException exception) when (exception.HttpStatus == (System.Net.HttpStatusCode)429 && retriesLeft > 0) + { + ErrorTrackingHelper.TrackException(exception, "Emotion API throttling error"); + if (retriesLeft == 1 && Throttled != null) + { + Throttled(); + } + + await Task.Delay(delay); + retriesLeft--; + delay *= 2; + continue; + } + } + + return response; + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func action) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => { await action(); return null; } ); + } + + public static async Task RecognizeAsync(Func> imageStreamCallback) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await emotionClient.RecognizeAsync(await imageStreamCallback())); + } + + public static async Task RecognizeAsync(string url) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await emotionClient.RecognizeAsync(url)); + } + + public static IEnumerable ScoresToEmotionData(EmotionScores scores) + { + List result = new List(); + result.Add(new EmotionData { EmotionName = "Anger", EmotionScore = scores.Anger }); + result.Add(new EmotionData { EmotionName = "Contempt", EmotionScore = scores.Contempt }); + result.Add(new EmotionData { EmotionName = "Disgust", EmotionScore = scores.Disgust }); + result.Add(new EmotionData { EmotionName = "Fear", EmotionScore = scores.Fear }); + result.Add(new EmotionData { EmotionName = "Happiness", EmotionScore = scores.Happiness }); + result.Add(new EmotionData { EmotionName = "Neutral", EmotionScore = scores.Neutral }); + result.Add(new EmotionData { EmotionName = "Sadness", EmotionScore = scores.Sadness }); + result.Add(new EmotionData { EmotionName = "Surprise", EmotionScore = scores.Surprise }); + + return result; + } + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs new file mode 100644 index 0000000..7d2d9ce --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs @@ -0,0 +1,16 @@ +using System; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + public static class ErrorTrackingHelper + { + // callbacks for exception tracking + public static Action TrackException { get; set; } + = (exception, message) => { }; + + // callbacks for blocking UI error message + public static Func GenericApiCallExceptionHandler { get; set; } + = (ex, errorTitle) => Task.FromResult(0); + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs new file mode 100644 index 0000000..6c2ccd6 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs @@ -0,0 +1,193 @@ +using Microsoft.ProjectOxford.Face; +using Microsoft.ProjectOxford.Face.Contract; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + class FaceListInfo + { + public string FaceListId { get; set; } + public DateTime LastMatchTimestamp { get;set; } + public bool IsFull { get; set; } + } + + public class FaceListManager + { + private static Dictionary faceLists; + + public static string FaceListsUserDataFilter { get; set; } + + private FaceListManager() { } + + public static async Task ResetFaceLists() + { + faceLists = new Dictionary(); + + try + { + IEnumerable metadata = await FaceServiceHelper.GetFaceListsAsync(FaceListsUserDataFilter); + foreach (var item in metadata) + { + await FaceServiceHelper.DeleteFaceListAsync(item.FaceListId); + } + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Error resetting face lists"); + } + } + + public static async Task Initialize() + { + faceLists = new Dictionary(); + + try + { + IEnumerable metadata = await FaceServiceHelper.GetFaceListsAsync(FaceListsUserDataFilter); + foreach (var item in metadata) + { + faceLists.Add(item.FaceListId, new FaceListInfo { FaceListId = item.FaceListId, LastMatchTimestamp = DateTime.Now }); + } + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Face API GetFaceListsAsync error"); + } + } + + public static async Task FindSimilarPersistedFaceAsync(Func> imageStreamCallback, Guid faceId, Face face) + { + if (faceLists == null) + { + await Initialize(); + } + + Tuple bestMatch = null; + + bool foundMatch = false; + foreach (var faceListId in faceLists.Keys) + { + try + { + SimilarPersistedFace similarFace = (await FaceServiceHelper.FindSimilarAsync(faceId, faceListId))?.FirstOrDefault(); + if (similarFace == null) + { + continue; + } + + foundMatch = true; + + if (bestMatch != null) + { + // We already found a match for this face in another list. Replace the previous one if the new confidence is higher. + if (bestMatch.Item1.Confidence < similarFace.Confidence) + { + bestMatch = new Tuple(similarFace, faceListId); + } + } + else + { + bestMatch = new Tuple(similarFace, faceListId); + } + } + catch (Exception e) + { + // Catch errors with individual face lists so we can continue looping through all lists. Maybe an answer will come from + // another one. + ErrorTrackingHelper.TrackException(e, "Face API FindSimilarAsync error"); + } + } + + if (!foundMatch) + { + // If we are here we didnt' find a match, so let's add the face to the first FaceList that we can add it to. We + // might create a new list if none exist, and if all lists are full we will delete the oldest face list (based on when we + // last match anything on) so that we can add the new one. + + double maxAngle = 30; + if (face.FaceAttributes.HeadPose != null && + (Math.Abs(face.FaceAttributes.HeadPose.Yaw) > maxAngle || + Math.Abs(face.FaceAttributes.HeadPose.Pitch) > maxAngle || + Math.Abs(face.FaceAttributes.HeadPose.Roll) > maxAngle)) + { + // This isn't a good frontal shot, so let's not use it as the primary example face for this person + return null; + } + + if (!faceLists.Any()) + { + // We don't have any FaceLists yet. Create one + string newFaceListId = Guid.NewGuid().ToString(); + await FaceServiceHelper.CreateFaceListAsync(newFaceListId, "ManagedFaceList", FaceListsUserDataFilter); + + faceLists.Add(newFaceListId, new FaceListInfo { FaceListId = newFaceListId, LastMatchTimestamp = DateTime.Now }); + } + + AddPersistedFaceResult addResult = null; + bool failedToAddToNonFullList = false; + foreach (var faceList in faceLists) + { + if (faceList.Value.IsFull) + { + continue; + } + + try + { + addResult = await FaceServiceHelper.AddFaceToFaceListAsync(faceList.Key, imageStreamCallback, face.FaceRectangle); + break; + } + catch (Exception ex) + { + if (ex is FaceAPIException && ((FaceAPIException)ex).ErrorCode == "403") + { + // FaceList is full. Continue so we can try again with the next FaceList + faceList.Value.IsFull = true; + continue; + } + else + { + failedToAddToNonFullList = true; + break; + } + } + } + + if (addResult == null && !failedToAddToNonFullList) + { + // We were not able to add the face to an existing list because they were all full. + + // If possible, let's create a new list now and add the new face to it. If we can't (e.g. we already maxed out on list count), + // let's delete an old list, create a new one and add the new face to it. + + if (faceLists.Count == 64) + { + // delete oldest face list + var oldestFaceList = faceLists.OrderBy(fl => fl.Value.LastMatchTimestamp).FirstOrDefault(); + faceLists.Remove(oldestFaceList.Key); + await FaceServiceHelper.DeleteFaceListAsync(oldestFaceList.Key); + } + + // create new list + string newFaceListId = Guid.NewGuid().ToString(); + await FaceServiceHelper.CreateFaceListAsync(newFaceListId, "ManagedFaceList", FaceListsUserDataFilter); + faceLists.Add(newFaceListId, new FaceListInfo { FaceListId = newFaceListId, LastMatchTimestamp = DateTime.Now }); + + // Add face to new list + addResult = await FaceServiceHelper.AddFaceToFaceListAsync(newFaceListId, imageStreamCallback, face.FaceRectangle); + } + + if (addResult != null) + { + bestMatch = new Tuple(new SimilarPersistedFace { Confidence = 1, PersistedFaceId = addResult.PersistedFaceId }, null); + } + } + + return bestMatch?.Item1; + } + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceServiceHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceServiceHelper.cs new file mode 100644 index 0000000..0244284 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceServiceHelper.cs @@ -0,0 +1,193 @@ +using Microsoft.ProjectOxford.Common; +using Microsoft.ProjectOxford.Face; +using Microsoft.ProjectOxford.Face.Contract; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + public class FaceServiceHelper + { + public static int RetryCountOnQuotaLimitError = 6; + public static int RetryDelayOnQuotaLimitError = 500; + + private static FaceServiceClient faceClient { get; set; } + + public static Action Throttled; + + private static string apiKey; + public static string ApiKey + { + get { return apiKey; } + set + { + var changed = apiKey != value; + apiKey = value; + if (changed) + InitializeFaceServiceClient(); + } + } + + static FaceServiceHelper() + { + InitializeFaceServiceClient(); + } + + private static void InitializeFaceServiceClient() + { + faceClient = new FaceServiceClient(apiKey); + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func> action) + { + int retriesLeft = FaceServiceHelper.RetryCountOnQuotaLimitError; + int delay = FaceServiceHelper.RetryDelayOnQuotaLimitError; + + TResponse response = default(TResponse); + + while (true) + { + try + { + response = await action(); + break; + } + catch (FaceAPIException exception) when (exception.HttpStatus == (System.Net.HttpStatusCode)429 && retriesLeft > 0) + { + ErrorTrackingHelper.TrackException(exception, "Face API throttling error"); + if (retriesLeft == 1 && Throttled != null) + { + Throttled(); + } + + await Task.Delay(delay); + retriesLeft--; + delay *= 2; + continue; + } + } + + return response; + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func action) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => { await action(); return null; } ); + } + + public static async Task CreatePersonGroupAsync(string personGroupId, string name, string userData) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.CreatePersonGroupAsync(personGroupId, name, userData)); + } + + public static async Task GetPersonsAsync(string personGroupId) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.GetPersonsAsync(personGroupId)); + } + + public static async Task DetectAsync(Func> imageStreamCallback, bool returnFaceId = true, bool returnFaceLandmarks = false, IEnumerable returnFaceAttributes = null) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await faceClient.DetectAsync(await imageStreamCallback(), returnFaceId, returnFaceLandmarks, returnFaceAttributes)); + } + + public static async Task DetectAsync(string url, bool returnFaceId = true, bool returnFaceLandmarks = false, IEnumerable returnFaceAttributes = null) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.DetectAsync(url, returnFaceId, returnFaceLandmarks, returnFaceAttributes)); + } + + public static async Task GetPersonFaceAsync(string personGroupId, Guid personId, Guid face) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.GetPersonFaceAsync(personGroupId, personId, face)); + } + + public static async Task> ListPersonGroupsAsync(string userDataFilter = null) + { + return (await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.ListPersonGroupsAsync())).Where(group => string.Equals(group.UserData, userDataFilter)); + } + + public static async Task> GetFaceListsAsync(string userDataFilter = null) + { + return (await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.ListFaceListsAsync())).Where(list => string.Equals(list.UserData, userDataFilter)); + } + + public static async Task FindSimilarAsync(Guid faceId, string faceListId, int maxNumOfCandidatesReturned = 1) + { + return (await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.FindSimilarAsync(faceId, faceListId, maxNumOfCandidatesReturned))); + } + + public static async Task AddFaceToFaceListAsync(string faceListId, Func> imageStreamCallback, FaceRectangle targetFace) + { + return (await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await faceClient.AddFaceToFaceListAsync(faceListId, await imageStreamCallback(), null, targetFace))); + } + + public static async Task CreateFaceListAsync(string faceListId, string name, string userData) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.CreateFaceListAsync(faceListId, name, userData)); + } + + public static async Task DeleteFaceListAsync(string faceListId) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.DeleteFaceListAsync(faceListId)); + } + + public static async Task UpdatePersonGroupsAsync(string personGroupId, string name, string userData) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.UpdatePersonGroupAsync(personGroupId, name, userData)); + } + + public static async Task AddPersonFaceAsync(string personGroupId, Guid personId, string imageUrl, string userData, FaceRectangle targetFace) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await faceClient.AddPersonFaceAsync(personGroupId, personId, imageUrl, userData, targetFace)); + } + + public static async Task AddPersonFaceAsync(string personGroupId, Guid personId, Func> imageStreamCallback, string userData, FaceRectangle targetFace) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await faceClient.AddPersonFaceAsync(personGroupId, personId, await imageStreamCallback(), userData, targetFace)); + } + + public static async Task IdentifyAsync(string personGroupId, Guid[] detectedFaceIds) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.IdentifyAsync(personGroupId, detectedFaceIds)); + } + + public static async Task DeletePersonAsync(string personGroupId, Guid personId) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.DeletePersonAsync(personGroupId, personId)); + } + + public static async Task CreatePersonAsync(string personGroupId, string name) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await faceClient.CreatePersonAsync(personGroupId, name)); + } + + public static async Task GetPersonAsync(string personGroupId, Guid personId) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.GetPersonAsync(personGroupId, personId)); + } + + public static async Task TrainPersonGroupAsync(string personGroupId) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.TrainPersonGroupAsync(personGroupId)); + } + + public static async Task DeletePersonGroupAsync(string personGroupId) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.DeletePersonGroupAsync(personGroupId)); + } + + public static async Task DeletePersonFaceAsync(string personGroupId, Guid personId, Guid faceId) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.DeletePersonFaceAsync(personGroupId, personId, faceId)); + } + + public static async Task GetPersonGroupTrainingStatusAsync(string personGroupId) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => faceClient.GetPersonGroupTrainingStatusAsync(personGroupId)); + } + + + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs new file mode 100644 index 0000000..6dad03c --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs @@ -0,0 +1,162 @@ +using Microsoft.ProjectOxford.Common.Contract; +using Microsoft.ProjectOxford.Face; +using Microsoft.ProjectOxford.Face.Contract; +using Microsoft.ProjectOxford.Vision; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + public class ImageAnalyzer + { + private static FaceAttributeType[] DefaultFaceAttributeTypes = new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Gender, FaceAttributeType.HeadPose }; + + public Func> GetImageStreamCallback { get; set; } + + public IEnumerable DetectedFaces { get; set; } + + public IEnumerable DetectedEmotion { get; set; } + + public IEnumerable SimilarFaceMatches { get; set; } + + public Microsoft.ProjectOxford.Vision.Contract.AnalysisResult AnalysisResult { get; set; } + + public bool ShowDialogOnFaceApiErrors { get; set; } = false; + + public ImageAnalyzer(Func> getStreamCallback) + { + this.GetImageStreamCallback = getStreamCallback; + } + + public async Task DetectFacesAsync(bool detectFaceAttributes = false, bool detectFaceLandmarks = false) + { + try + { + this.DetectedFaces = await FaceServiceHelper.DetectAsync( + this.GetImageStreamCallback, + returnFaceId: true, + returnFaceLandmarks: detectFaceLandmarks, + returnFaceAttributes: detectFaceAttributes ? DefaultFaceAttributeTypes : null); + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Face API DetectAsync error"); + + this.DetectedFaces = Enumerable.Empty(); + + if (this.ShowDialogOnFaceApiErrors) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Face API failed."); + } + } + } + + public async Task DetectEmotionAsync() + { + try + { + this.DetectedEmotion = await EmotionServiceHelper.RecognizeAsync(this.GetImageStreamCallback); + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Emotion API RecognizeAsync error"); + + this.DetectedEmotion = Enumerable.Empty(); + + if (this.ShowDialogOnFaceApiErrors) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Emotion API failed."); + } + } + } + + public async Task DescribeAsync() + { + try + { + this.AnalysisResult = await VisionServiceHelper.DescribeAsync(this.GetImageStreamCallback); + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Vision API DescribeAsync error"); + + this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); + + if (this.ShowDialogOnFaceApiErrors) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Vision API failed."); + } + } + } + + public async Task AnalyzeImageAsync() + { + try + { + this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync(this.GetImageStreamCallback, new VisualFeature[] { VisualFeature.Tags, VisualFeature.Description }); + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "Vision API AnalyzeImageAsync error"); + + this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); + + if (this.ShowDialogOnFaceApiErrors) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Vision API failed."); + } + } + } + + public async Task FindSimilarPersistedFacesAsync() + { + this.SimilarFaceMatches = Enumerable.Empty(); + + if (this.DetectedFaces == null || !this.DetectedFaces.Any()) + { + return; + } + + List result = new List(); + + foreach (Face detectedFace in this.DetectedFaces) + { + try + { + SimilarPersistedFace similarPersistedFace = await FaceListManager.FindSimilarPersistedFaceAsync(this.GetImageStreamCallback, detectedFace.FaceId, detectedFace); + if (similarPersistedFace != null) + { + result.Add(new SimilarFaceMatch { Face = detectedFace, SimilarPersistedFace = similarPersistedFace }); + } + } + catch (Exception e) + { + ErrorTrackingHelper.TrackException(e, "FaceListManager.FindSimilarPersistedFaceAsync error"); + + if (this.ShowDialogOnFaceApiErrors) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Failure finding similar faces"); + } + } + } + + this.SimilarFaceMatches = result; + } + } + + public class SimilarFaceMatch + { + public Face Face + { + get; set; + } + + public SimilarPersistedFace SimilarPersistedFace + { + get; set; + } + } +} diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs new file mode 100644 index 0000000..2fdd266 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs @@ -0,0 +1,115 @@ +using Microsoft.ProjectOxford.Vision; +using Microsoft.ProjectOxford.Vision.Contract; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace ServiceHelpers +{ + public static class VisionServiceHelper + { + public static int RetryCountOnQuotaLimitError = 6; + public static int RetryDelayOnQuotaLimitError = 500; + + private static VisionServiceClient visionClient { get; set; } + + static VisionServiceHelper() + { + InitializeEmotionService(); + } + + public static Action Throttled; + + private static string apiKey; + public static string ApiKey + { + get + { + return apiKey; + } + + set + { + var changed = apiKey != value; + apiKey = value; + if (changed) + { + InitializeEmotionService(); + } + } + } + + private static void InitializeEmotionService() + { + visionClient = new VisionServiceClient(apiKey); + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func> action) + { + int retriesLeft = FaceServiceHelper.RetryCountOnQuotaLimitError; + int delay = FaceServiceHelper.RetryDelayOnQuotaLimitError; + + TResponse response = default(TResponse); + + while (true) + { + try + { + response = await action(); + break; + } + catch (Microsoft.ProjectOxford.Vision.ClientException exception) when (exception.HttpStatus == (System.Net.HttpStatusCode)429 && retriesLeft > 0) + { + ErrorTrackingHelper.TrackException(exception, "Vision API throttling error"); + if (retriesLeft == 1 && Throttled != null) + { + Throttled(); + } + + await Task.Delay(delay); + retriesLeft--; + delay *= 2; + continue; + } + } + + return response; + } + + private static async Task RunTaskWithAutoRetryOnQuotaLimitExceededError(Func action) + { + await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => { await action(); return null; } ); + } + + public static async Task DescribeAsync(Func> imageStreamCallback) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await visionClient.DescribeAsync(await imageStreamCallback())); + } + + public static async Task AnalyzeImageAsync(string imageUrl, IEnumerable visualFeatures = null, IEnumerable details = null) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => visionClient.AnalyzeImageAsync(imageUrl, visualFeatures, details)); + } + + public static async Task AnalyzeImageAsync(Func> imageStreamCallback, IEnumerable visualFeatures = null, IEnumerable details = null) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await visionClient.AnalyzeImageAsync(await imageStreamCallback(), visualFeatures, details )); + } + + public static async Task DescribeAsync(string imageUrl) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => visionClient.DescribeAsync(imageUrl)); + } + + public static async Task RecognizeTextAsync(string imageUrl) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(() => visionClient.RecognizeTextAsync(imageUrl)); + } + + public static async Task RecognizeTextAsync(Func> imageStreamCallback) + { + return await RunTaskWithAutoRetryOnQuotaLimitExceededError(async () => await visionClient.RecognizeTextAsync(await imageStreamCallback())); + } + } +} diff --git a/ImageProcessing/ProcessingLibrary/VisionInsights.cs b/ImageProcessing/ProcessingLibrary/VisionInsights.cs new file mode 100644 index 0000000..b54e53a --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/VisionInsights.cs @@ -0,0 +1,8 @@ +namespace ImageProcessingLibrary +{ + public class VisionInsights + { + public string Caption { get; set; } + public string[] Tags { get; set; } + } +} diff --git a/ImageProcessing/ProcessingLibrary/app.config b/ImageProcessing/ProcessingLibrary/app.config new file mode 100644 index 0000000..8460dd4 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/ProcessingLibrary/packages.config b/ImageProcessing/ProcessingLibrary/packages.config new file mode 100644 index 0000000..0bcf035 --- /dev/null +++ b/ImageProcessing/ProcessingLibrary/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/TestApp/App.xaml b/ImageProcessing/TestApp/App.xaml new file mode 100644 index 0000000..940c1f8 --- /dev/null +++ b/ImageProcessing/TestApp/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/ImageProcessing/TestApp/App.xaml.cs b/ImageProcessing/TestApp/App.xaml.cs new file mode 100644 index 0000000..ee032de --- /dev/null +++ b/ImageProcessing/TestApp/App.xaml.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace TestApp +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + sealed partial class App : Application + { + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { +#if DEBUG + if (System.Diagnostics.Debugger.IsAttached) + { + this.DebugSettings.EnableFrameRateCounter = true; + } +#endif + Frame rootFrame = Window.Current.Content as Frame; + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) + { + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + //TODO: Load state from previously suspended application + } + + // Place the frame in the current Window + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Ensure the current window is active + Window.Current.Activate(); + } + } + + /// + /// Invoked when Navigation to a certain page fails + /// + /// The Frame which failed navigation + /// Details about the navigation failure + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// + /// The source of the suspend request. + /// Details about the suspend request. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Save application state and stop any background activity + deferral.Complete(); + } + } +} diff --git a/ImageProcessing/TestApp/Assets/LockScreenLogo.scale-200.png b/ImageProcessing/TestApp/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/SplashScreen.scale-200.png b/ImageProcessing/TestApp/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 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 literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/Square150x150Logo.scale-200.png b/ImageProcessing/TestApp/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/Square44x44Logo.scale-200.png b/ImageProcessing/TestApp/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/ImageProcessing/TestApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/StoreLogo.png b/ImageProcessing/TestApp/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/ImageProcessing/TestApp/Assets/Wide310x150Logo.scale-200.png b/ImageProcessing/TestApp/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs new file mode 100644 index 0000000..162e1a8 --- /dev/null +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -0,0 +1,129 @@ +using ImageProcessingLibrary; +using ServiceHelpers; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.Storage; +using Windows.Storage.Pickers; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 + +namespace TestApp +{ + ///

+ /// An empty page that can be used on its own or navigated to within a Frame. + /// + public sealed partial class MainPage : Page + { + public List AllResults { get; set; } = new List(); + public ObservableCollection FilteredResults { get; set; } = new ObservableCollection(); + public ObservableCollection TagFilters { get; set; } = new ObservableCollection(); + + public IEnumerable Tags { get; set; } + + public MainPage() + { + this.InitializeComponent(); + } + + private async void ProcessImagesClicked(object sender, RoutedEventArgs e) + { + try + { + FolderPicker folderPicker = new FolderPicker(); + folderPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; + folderPicker.FileTypeFilter.Add(".jpeg"); + folderPicker.FileTypeFilter.Add(".bmp"); + StorageFolder folder = await folderPicker.PickSingleFolderAsync(); + + if (folder != null) + { + await ProcessImagesAsync(folder); + } + } + catch (Exception ex) + { + await ErrorTrackingHelper.GenericApiCallExceptionHandler(ex, "Error picking the target folder."); + } + } + + private async Task ProcessImagesAsync(StorageFolder rootFolder) + { + this.AllResults.Clear(); + this.FilteredResults.Clear(); + + foreach (var item in await rootFolder.GetFilesAsync()) + { + ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Path); + + this.AllResults.Add(new ImageInsightsViewModel(insights, await item.OpenStreamForReadAsync())); + } + + this.ApplyFilters(); + + this.TagFilters.Clear(); + foreach (var tag in this.FilteredResults.SelectMany(r => r.Insights.VisionInsights.Tags).Distinct().OrderBy(t => t)) + { + this.TagFilters.Add(new TagFilterViewModel(tag)); + } + } + + private void TagFilterChanged(object sender, RoutedEventArgs e) + { + this.ApplyFilters(); + } + + private void ApplyFilters() + { + this.FilteredResults.Clear(); + + var checkedTags = this.TagFilters.Where(t => t.IsChecked); + if (checkedTags.Any()) + { + this.FilteredResults.AddRange(this.AllResults.Where(r => HasTag(checkedTags, r.Insights.VisionInsights.Tags))); + } + else + { + this.FilteredResults.AddRange(this.AllResults); + } + } + + private bool HasTag(IEnumerable checkedTags, string[] tags) + { + foreach (var item in checkedTags) + { + if (tags.Any(t => t == item.Tag)) + { + return true; + } + } + + return false; + } + } + + public static class Extensions + { + public static void AddRange(this IList list, IEnumerable items) + { + foreach (var item in items) + { + list.Add(item); + } + } + + } +} diff --git a/ImageProcessing/TestApp/Package.appxmanifest b/ImageProcessing/TestApp/Package.appxmanifest new file mode 100644 index 0000000..d7b4b32 --- /dev/null +++ b/ImageProcessing/TestApp/Package.appxmanifest @@ -0,0 +1,29 @@ + + + + + + TestApp + carlosp + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/TestApp/Properties/AssemblyInfo.cs b/ImageProcessing/TestApp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..954c1fb --- /dev/null +++ b/ImageProcessing/TestApp/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TestApp")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TestApp")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/ImageProcessing/TestApp/Properties/Default.rd.xml b/ImageProcessing/TestApp/Properties/Default.rd.xml new file mode 100644 index 0000000..80a960c --- /dev/null +++ b/ImageProcessing/TestApp/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/TestApp/TestApp.csproj b/ImageProcessing/TestApp/TestApp.csproj new file mode 100644 index 0000000..8110e9a --- /dev/null +++ b/ImageProcessing/TestApp/TestApp.csproj @@ -0,0 +1,149 @@ + + + + + Debug + x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35} + AppContainerExe + Properties + TestApp + TestApp + en-US + UAP + 10.0.14393.0 + 10.0.10586.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + TestApp_TemporaryKey.pfx + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + + + + + + + App.xaml + + + MainPage.xaml + + + + + + + + Designer + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + {c0ee790e-e0f8-4942-a269-749e1edd1809} + ImageProcessingLibrary + + + + 14.0 + + + + \ No newline at end of file diff --git a/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs new file mode 100644 index 0000000..92ac9c8 --- /dev/null +++ b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs @@ -0,0 +1,27 @@ +using ImageProcessingLibrary; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; + +namespace TestApp +{ + public class ImageInsightsViewModel + { + public ImageInsights Insights { get; set; } + public ImageSource ImageSource { get; set; } + + public ImageInsightsViewModel(ImageInsights insights, Stream stream) + { + this.Insights = insights; + + BitmapImage bitmapImage = new BitmapImage(); + bitmapImage.SetSource(stream.AsRandomAccessStream()); + this.ImageSource = bitmapImage; + } + } +} diff --git a/ImageProcessing/TestApp/ViewModel/TagFilterViewModel.cs b/ImageProcessing/TestApp/ViewModel/TagFilterViewModel.cs new file mode 100644 index 0000000..2e0a69d --- /dev/null +++ b/ImageProcessing/TestApp/ViewModel/TagFilterViewModel.cs @@ -0,0 +1,23 @@ +using ImageProcessingLibrary; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; + +namespace TestApp +{ + public class TagFilterViewModel + { + public bool IsChecked { get; set; } + public string Tag { get; set; } + + public TagFilterViewModel(string tag) + { + this.Tag = tag; + } + } +} diff --git a/ImageProcessing/TestApp/packages.config b/ImageProcessing/TestApp/packages.config new file mode 100644 index 0000000..1b9fdc6 --- /dev/null +++ b/ImageProcessing/TestApp/packages.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ImageProcessing/TestApp/project.json b/ImageProcessing/TestApp/project.json new file mode 100644 index 0000000..d89d199 --- /dev/null +++ b/ImageProcessing/TestApp/project.json @@ -0,0 +1,17 @@ +{ + "dependencies": { + "Microsoft.Bcl.Build": "1.0.21", + "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0" + }, + "frameworks": { + "uap10.0": {} + }, + "runtimes": { + "win10-arm": {}, + "win10-arm-aot": {}, + "win10-x86": {}, + "win10-x86-aot": {}, + "win10-x64": {}, + "win10-x64-aot": {} + } +} \ No newline at end of file From a835fd64126812191e5e9b5428aae765209ab092 Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Wed, 5 Apr 2017 13:07:30 -0700 Subject: [PATCH 02/16] Json serialization/deserialization --- .../ServiceHelpers/ImageAnalyzer.cs | 2 +- ImageProcessing/TestApp/App.xaml.cs | 14 +- ImageProcessing/TestApp/MainPage.xaml | 21 ++- ImageProcessing/TestApp/MainPage.xaml.cs | 140 ++++++++++++++++-- ImageProcessing/TestApp/TestApp.csproj | 3 + ImageProcessing/TestApp/Util.cs | 131 ++++++++++++++++ .../ViewModel/EmotionFilterViewModel.cs | 23 +++ .../TestApp/ViewModel/FaceFilterViewModel.cs | 24 +++ .../ViewModel/ImageInsightsViewModel.cs | 5 +- ImageProcessing/TestApp/project.json | 4 +- 10 files changed, 340 insertions(+), 27 deletions(-) create mode 100644 ImageProcessing/TestApp/Util.cs create mode 100644 ImageProcessing/TestApp/ViewModel/EmotionFilterViewModel.cs create mode 100644 ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs index 6dad03c..e3371c1 100644 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs @@ -96,7 +96,7 @@ public async Task AnalyzeImageAsync() { try { - this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync(this.GetImageStreamCallback, new VisualFeature[] { VisualFeature.Tags, VisualFeature.Description }); + this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync(this.GetImageStreamCallback, new VisualFeature[] { VisualFeature.Tags /*, VisualFeature.Description */}); } catch (Exception e) { diff --git a/ImageProcessing/TestApp/App.xaml.cs b/ImageProcessing/TestApp/App.xaml.cs index ee032de..1334590 100644 --- a/ImageProcessing/TestApp/App.xaml.cs +++ b/ImageProcessing/TestApp/App.xaml.cs @@ -39,12 +39,6 @@ public App() /// Details about the launch request and process. protected override void OnLaunched(LaunchActivatedEventArgs e) { -#if DEBUG - if (System.Diagnostics.Debugger.IsAttached) - { - this.DebugSettings.EnableFrameRateCounter = true; - } -#endif Frame rootFrame = Window.Current.Content as Frame; // Do not repeat app initialization when the Window already has content, @@ -63,6 +57,14 @@ protected override void OnLaunched(LaunchActivatedEventArgs e) // Place the frame in the current Window Window.Current.Content = rootFrame; + + // Set the TitleBar to Dark Theme + var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView(); + var titleBar = appView.TitleBar; + titleBar.BackgroundColor = Windows.UI.Colors.Black; + titleBar.ForegroundColor = Windows.UI.Colors.White; + titleBar.ButtonBackgroundColor = Windows.UI.Colors.Black; + titleBar.ButtonForegroundColor = Windows.UI.Colors.White; } if (e.PrelaunchActivated == false) diff --git a/ImageProcessing/TestApp/MainPage.xaml b/ImageProcessing/TestApp/MainPage.xaml index f2f1852..5d3bdda 100644 --- a/ImageProcessing/TestApp/MainPage.xaml +++ b/ImageProcessing/TestApp/MainPage.xaml @@ -6,6 +6,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Name="mainPage" + RequestedTheme="Dark" mc:Ignorable="d"> @@ -19,7 +20,7 @@ - + @@ -32,7 +33,19 @@ - + + + + + + + + + + + + + @@ -52,7 +65,6 @@ - - + + diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs index 162e1a8..db7fd4d 100644 --- a/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -1,4 +1,5 @@ using ImageProcessingLibrary; +using Newtonsoft.Json; using ServiceHelpers; using System; using System.Collections.Generic; @@ -31,6 +32,8 @@ public sealed partial class MainPage : Page public List AllResults { get; set; } = new List(); public ObservableCollection FilteredResults { get; set; } = new ObservableCollection(); public ObservableCollection TagFilters { get; set; } = new ObservableCollection(); + public ObservableCollection FaceFilters { get; set; } = new ObservableCollection(); + public ObservableCollection EmotionFilters { get; set; } = new ObservableCollection(); public IEnumerable Tags { get; set; } @@ -62,28 +65,92 @@ private async void ProcessImagesClicked(object sender, RoutedEventArgs e) private async Task ProcessImagesAsync(StorageFolder rootFolder) { + this.progressRing.IsActive = true; + this.AllResults.Clear(); this.FilteredResults.Clear(); + this.TagFilters.Clear(); - foreach (var item in await rootFolder.GetFilesAsync()) - { - ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Path); + List insightsList = new List(); - this.AllResults.Add(new ImageInsightsViewModel(insights, await item.OpenStreamForReadAsync())); + // see if we have pre-computed results and if so load it from the json file + try + { + StorageFile insightsResultFile = (await rootFolder.TryGetItemAsync("ImageInsights.json")) as StorageFile; + if (insightsResultFile != null) + { + using (StreamReader reader = new StreamReader(await insightsResultFile.OpenStreamForReadAsync())) + { + insightsList = JsonConvert.DeserializeObject>(await reader.ReadToEndAsync()); + foreach (var insights in insightsList) + { + await AddImageInsightsToViewModel(rootFolder, insights); + } + } + } + } + catch + { + // We will just compute everything again in case of errors } - this.ApplyFilters(); - - this.TagFilters.Clear(); - foreach (var tag in this.FilteredResults.SelectMany(r => r.Insights.VisionInsights.Tags).Distinct().OrderBy(t => t)) + if (!insightsList.Any()) { - this.TagFilters.Add(new TagFilterViewModel(tag)); + // compute the insights from the images + foreach (var item in await rootFolder.GetFilesAsync()) + { + ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Name); + insightsList.Add(insights); + await AddImageInsightsToViewModel(rootFolder, insights); + } + + // save to json + StorageFile jsonFile = await rootFolder.CreateFileAsync("ImageInsights.json", CreationCollisionOption.ReplaceExisting); + using (StreamWriter writer = new StreamWriter(await jsonFile.OpenStreamForWriteAsync())) + { + string jsonStr = JsonConvert.SerializeObject(insightsList, Formatting.Indented); + await writer.WriteAsync(jsonStr); + } } + + var sortedTags = this.TagFilters.OrderBy(t => t.Tag).ToArray(); + this.TagFilters.Clear(); + this.TagFilters.AddRange(sortedTags); + + var sortedEmotions = this.EmotionFilters.OrderBy(t => t.Emotion).ToArray(); + this.EmotionFilters.Clear(); + this.EmotionFilters.AddRange(sortedEmotions); + + this.progressRing.IsActive = false; } - private void TagFilterChanged(object sender, RoutedEventArgs e) + private async Task AddImageInsightsToViewModel(StorageFolder rootFolder, ImageInsights insights) { - this.ApplyFilters(); + ImageInsightsViewModel insightsViewModel = new ImageInsightsViewModel(insights, await (await rootFolder.GetFileAsync(insights.ImageId)).OpenStreamForReadAsync()); + + this.AllResults.Add(insightsViewModel); + this.FilteredResults.Add(insightsViewModel); + + foreach (var tag in insights.VisionInsights.Tags) + { + if (!this.TagFilters.Any(t => t.Tag == tag)) + { + this.TagFilters.Add(new TagFilterViewModel(tag)); + } + } + + foreach (var faceInsights in insights.FaceInsights) + { + if (!this.FaceFilters.Any(f => f.FaceId == faceInsights.UniqueFaceId)) + { + this.FaceFilters.Add(new FaceFilterViewModel(faceInsights.UniqueFaceId)); + } + + if (!this.EmotionFilters.Any(f => f.Emotion == faceInsights.TopEmotion)) + { + this.EmotionFilters.Add(new EmotionFilterViewModel(faceInsights.TopEmotion)); + } + } } private void ApplyFilters() @@ -91,9 +158,15 @@ private void ApplyFilters() this.FilteredResults.Clear(); var checkedTags = this.TagFilters.Where(t => t.IsChecked); - if (checkedTags.Any()) + var checkedFaces = this.FaceFilters.Where(f => f.IsChecked); + var checkedEmotions = this.EmotionFilters.Where(e => e.IsChecked); + if (checkedTags.Any() || checkedFaces.Any() || checkedEmotions.Any()) { - this.FilteredResults.AddRange(this.AllResults.Where(r => HasTag(checkedTags, r.Insights.VisionInsights.Tags))); + var fromTags = this.AllResults.Where(r => HasTag(checkedTags, r.Insights.VisionInsights.Tags)); + var fromFaces = this.AllResults.Where(r => HasFace(checkedFaces, r.Insights.FaceInsights)); + var fromEmotion = this.AllResults.Where(r => HasEmotion(checkedEmotions, r.Insights.FaceInsights)); + + this.FilteredResults.AddRange((fromTags.Concat(fromFaces).Concat(fromEmotion)).Distinct()); } else { @@ -101,6 +174,32 @@ private void ApplyFilters() } } + private bool HasFace(IEnumerable checkedFaces, FaceInsights[] faceInsights) + { + foreach (var item in checkedFaces) + { + if (faceInsights.Any(f => f.UniqueFaceId == item.FaceId)) + { + return true; + } + } + + return false; + } + + private bool HasEmotion(IEnumerable checkedEmotions, FaceInsights[] faceInsights) + { + foreach (var item in checkedEmotions) + { + if (faceInsights.Any(f => f.TopEmotion == item.Emotion)) + { + return true; + } + } + + return false; + } + private bool HasTag(IEnumerable checkedTags, string[] tags) { foreach (var item in checkedTags) @@ -113,6 +212,21 @@ private bool HasTag(IEnumerable checkedTags, string[] tags) return false; } + + private void TagFilterChanged(object sender, RoutedEventArgs e) + { + this.ApplyFilters(); + } + + private void FaceFilterChanged(object sender, RoutedEventArgs e) + { + this.ApplyFilters(); + } + + private void EmotionFilterChanged(object sender, RoutedEventArgs e) + { + this.ApplyFilters(); + } } public static class Extensions diff --git a/ImageProcessing/TestApp/TestApp.csproj b/ImageProcessing/TestApp/TestApp.csproj index 8110e9a..6ebf897 100644 --- a/ImageProcessing/TestApp/TestApp.csproj +++ b/ImageProcessing/TestApp/TestApp.csproj @@ -100,6 +100,9 @@ MainPage.xaml + + + diff --git a/ImageProcessing/TestApp/Util.cs b/ImageProcessing/TestApp/Util.cs new file mode 100644 index 0000000..b231e57 --- /dev/null +++ b/ImageProcessing/TestApp/Util.cs @@ -0,0 +1,131 @@ +//using Microsoft.ProjectOxford.Common; +//using ServiceHelpers; +//using System; +//using System.Collections.Generic; +//using System.IO; +//using System.Linq; +//using System.Runtime.InteropServices.WindowsRuntime; +//using System.Threading; +//using System.Threading.Tasks; +//using Windows.Devices.Enumeration; +//using Windows.Graphics.Display; +//using Windows.Graphics.Imaging; +//using Windows.Networking.BackgroundTransfer; +//using Windows.Storage; +//using Windows.Storage.Streams; +//using Windows.UI; +//using Windows.UI.Popups; +//using Windows.UI.Xaml.Media; +//using Windows.UI.Xaml.Media.Imaging; + +//namespace TestApp +//{ +// class Util +// { +// async public static Task GetCroppedBitmapAsync(IRandomAccessStream stream, Rectangle rectangle) +// { +// var pixels = await GetCroppedPixelsAsync(stream, rectangle); + +// // Stream the bytes into a WriteableBitmap +// WriteableBitmap cropBmp = new WriteableBitmap(rectangle.Width, rectangle.Height); +// cropBmp.FromByteArray(pixels); + +// return cropBmp; +// } + +// async private static Task CropBitmapAsync(Stream localFileStream, Rectangle rectangle, StorageFile resultFile) +// { +// //Get pixels of the crop region +// var pixels = await GetCroppedPixelsAsync(localFileStream.AsRandomAccessStream(), rectangle); + +// // Save result to new image +// using (Stream resultStream = await resultFile.OpenStreamForWriteAsync()) +// { +// IRandomAccessStream randomAccessStream = resultStream.AsRandomAccessStream(); +// BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, randomAccessStream); + +// encoder.SetPixelData(BitmapPixelFormat.Bgra8, +// BitmapAlphaMode.Ignore, +// (uint)rectangle.Width, (uint)rectangle.Height, +// DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, pixels); + +// await encoder.FlushAsync(); +// } +// } + +// async public static Task CropBitmapAsync(Func> localFile, Microsoft.ProjectOxford.Common.Rectangle rectangle, StorageFile resultFile) +// { +// await CropBitmapAsync(await localFile(), rectangle, resultFile); +// } + +// async private static Task GetCroppedPixelsAsync(IRandomAccessStream stream, Microsoft.ProjectOxford.Common.Rectangle rectangle) +// { +// // Create a decoder from the stream. With the decoder, we can get +// // the properties of the image. +// BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); + +// // Create cropping BitmapTransform and define the bounds. +// BitmapTransform transform = new BitmapTransform(); +// BitmapBounds bounds = new BitmapBounds(); +// bounds.X = (uint)rectangle.Left; +// bounds.Y = (uint)rectangle.Top; +// bounds.Height = (uint)rectangle.Height; +// bounds.Width = (uint)rectangle.Width; +// transform.Bounds = bounds; + +// // Get the cropped pixels within the bounds of transform. +// PixelDataProvider pix = await decoder.GetPixelDataAsync( +// BitmapPixelFormat.Bgra8, +// BitmapAlphaMode.Straight, +// transform, +// ExifOrientationMode.IgnoreExifOrientation, +// ColorManagementMode.ColorManageToSRgb); + +// return pix.DetachPixelData(); +// } + +// internal static async Task GetPixelBytesFromSoftwareBitmapAsync(SoftwareBitmap softwareBitmap) +// { +// using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream()) +// { +// BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); +// encoder.SetSoftwareBitmap(softwareBitmap); +// await encoder.FlushAsync(); + +// // Read the pixel bytes from the memory stream +// using (var reader = new DataReader(stream.GetInputStreamAt(0))) +// { +// var bytes = new byte[stream.Size]; +// await reader.LoadAsync((uint)stream.Size); +// reader.ReadBytes(bytes); +// return bytes; +// } +// } +// } + +// internal static async Task ResizePhoto(Stream photo, int height) +// { +// WriteableBitmap wb = new WriteableBitmap(1, 1); +// wb = await wb.FromStream(photo.AsRandomAccessStream()); +// if (wb.PixelHeight <= height) +// { +// // no need to resize +// return photo; +// } + +// wb = wb.Resize((int)(((double)wb.PixelWidth / wb.PixelHeight) * height), height, WriteableBitmapExtensions.Interpolation.Bilinear); + +// InMemoryRandomAccessStream result = new InMemoryRandomAccessStream(); +// var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, result); + +// encoder.SetPixelData(BitmapPixelFormat.Bgra8, +// BitmapAlphaMode.Ignore, +// (uint)wb.PixelWidth, (uint)wb.PixelHeight, +// DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, wb.PixelBuffer.ToArray()); + +// await encoder.FlushAsync(); + +// return result.AsStream(); +// } +// } +//} diff --git a/ImageProcessing/TestApp/ViewModel/EmotionFilterViewModel.cs b/ImageProcessing/TestApp/ViewModel/EmotionFilterViewModel.cs new file mode 100644 index 0000000..9615d1a --- /dev/null +++ b/ImageProcessing/TestApp/ViewModel/EmotionFilterViewModel.cs @@ -0,0 +1,23 @@ +using ImageProcessingLibrary; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; + +namespace TestApp +{ + public class EmotionFilterViewModel + { + public bool IsChecked { get; set; } + public string Emotion { get; set; } + + public EmotionFilterViewModel(string emotion) + { + this.Emotion = emotion; + } + } +} diff --git a/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs b/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs new file mode 100644 index 0000000..9fd1253 --- /dev/null +++ b/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs @@ -0,0 +1,24 @@ +using ImageProcessingLibrary; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; + +namespace TestApp +{ + public class FaceFilterViewModel + { + public bool IsChecked { get; set; } + public Guid FaceId { get; set; } + public ImageSource ImageSource { get; set; } + + public FaceFilterViewModel(Guid faceId) + { + this.FaceId = faceId; + } + } +} diff --git a/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs index 92ac9c8..c15ac3e 100644 --- a/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs +++ b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Windows.Storage; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging; @@ -15,12 +16,12 @@ public class ImageInsightsViewModel public ImageInsights Insights { get; set; } public ImageSource ImageSource { get; set; } - public ImageInsightsViewModel(ImageInsights insights, Stream stream) + public ImageInsightsViewModel(ImageInsights insights, Stream imageStream) { this.Insights = insights; BitmapImage bitmapImage = new BitmapImage(); - bitmapImage.SetSource(stream.AsRandomAccessStream()); + bitmapImage.SetSource(imageStream.AsRandomAccessStream()); this.ImageSource = bitmapImage; } } diff --git a/ImageProcessing/TestApp/project.json b/ImageProcessing/TestApp/project.json index d89d199..5c0035a 100644 --- a/ImageProcessing/TestApp/project.json +++ b/ImageProcessing/TestApp/project.json @@ -1,7 +1,9 @@ { "dependencies": { "Microsoft.Bcl.Build": "1.0.21", - "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0" + "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0", + "Newtonsoft.Json": "9.0.1", + "WriteableBitmapEx": "1.5.0" }, "frameworks": { "uap10.0": {} From 190f498ffca08c0ab3c99373b88163126abe7ff1 Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Wed, 5 Apr 2017 13:55:20 -0700 Subject: [PATCH 03/16] Showing cropped faces in the Faces filter, plus adding error handling callbacks --- .../ProcessingLibrary/ImageProcessor.cs | 7 - ImageProcessing/TestApp/MainPage.xaml | 5 +- ImageProcessing/TestApp/MainPage.xaml.cs | 35 ++- ImageProcessing/TestApp/Util.cs | 259 +++++++++--------- .../TestApp/ViewModel/FaceFilterViewModel.cs | 3 +- ImageProcessing/TestApp/project.json | 4 +- 6 files changed, 162 insertions(+), 151 deletions(-) diff --git a/ImageProcessing/ProcessingLibrary/ImageProcessor.cs b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs index 6294afb..8f83ddd 100644 --- a/ImageProcessing/ProcessingLibrary/ImageProcessor.cs +++ b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs @@ -10,13 +10,6 @@ namespace ImageProcessingLibrary { public class ImageProcessor { - static ImageProcessor() - { - FaceServiceHelper.ApiKey = ""; - EmotionServiceHelper.ApiKey = ""; - VisionServiceHelper.ApiKey = ""; - } - public static Task ProcessImageAsync(Func> imageStream, string imageId) { return Task.Run(async () => diff --git a/ImageProcessing/TestApp/MainPage.xaml b/ImageProcessing/TestApp/MainPage.xaml index 5d3bdda..3213946 100644 --- a/ImageProcessing/TestApp/MainPage.xaml +++ b/ImageProcessing/TestApp/MainPage.xaml @@ -33,7 +33,10 @@ - + + + + diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs index db7fd4d..b9bc450 100644 --- a/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -4,19 +4,15 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; -using Windows.Foundation; -using Windows.Foundation.Collections; using Windows.Storage; using Windows.Storage.Pickers; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Controls.Primitives; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; @@ -35,13 +31,30 @@ public sealed partial class MainPage : Page public ObservableCollection FaceFilters { get; set; } = new ObservableCollection(); public ObservableCollection EmotionFilters { get; set; } = new ObservableCollection(); - public IEnumerable Tags { get; set; } - public MainPage() { this.InitializeComponent(); } + protected override async void OnNavigatedTo(NavigationEventArgs e) + { + // callbacks for core library + FaceServiceHelper.Throttled = () => Util.ShowToastNotification("The Face API is throttling your requests. Consider upgrading to a Premium Key."); + EmotionServiceHelper.Throttled = () => Util.ShowToastNotification("The Emotion API is throttling your requests. Consider upgrading to a Premium Key."); + VisionServiceHelper.Throttled = () => Util.ShowToastNotification("The Vision API is throttling your requests. Consider upgrading to a Premium Key."); + ErrorTrackingHelper.TrackException = (exception, message) => { Debug.WriteLine("ImageProcessingLibrary exception: {0}", message); }; + ErrorTrackingHelper.GenericApiCallExceptionHandler = Util.GenericApiCallExceptionHandler; + + // Enter API Keys here + FaceServiceHelper.ApiKey = ""; + EmotionServiceHelper.ApiKey = ""; + VisionServiceHelper.ApiKey = ""; + + await FaceListManager.ResetFaceLists(); + + base.OnNavigatedTo(e); + } + private async void ProcessImagesClicked(object sender, RoutedEventArgs e) { try @@ -96,8 +109,8 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) if (!insightsList.Any()) { - // compute the insights from the images - foreach (var item in await rootFolder.GetFilesAsync()) + // enumerate through the first 50 files and extract the insights + foreach (var item in (await rootFolder.GetFilesAsync()).Take(50)) { ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Name); insightsList.Add(insights); @@ -143,7 +156,9 @@ private async Task AddImageInsightsToViewModel(StorageFolder rootFolder, ImageIn { if (!this.FaceFilters.Any(f => f.FaceId == faceInsights.UniqueFaceId)) { - this.FaceFilters.Add(new FaceFilterViewModel(faceInsights.UniqueFaceId)); + var imageStream = (await (await rootFolder.GetFileAsync(insights.ImageId)).OpenStreamForReadAsync()).AsRandomAccessStream(); + ImageSource croppedFaced = await Util.GetCroppedBitmapAsync(imageStream, faceInsights.FaceRectangle); + this.FaceFilters.Add(new FaceFilterViewModel(faceInsights.UniqueFaceId, croppedFaced)); } if (!this.EmotionFilters.Any(f => f.Emotion == faceInsights.TopEmotion)) diff --git a/ImageProcessing/TestApp/Util.cs b/ImageProcessing/TestApp/Util.cs index b231e57..9a666c8 100644 --- a/ImageProcessing/TestApp/Util.cs +++ b/ImageProcessing/TestApp/Util.cs @@ -1,131 +1,128 @@ -//using Microsoft.ProjectOxford.Common; -//using ServiceHelpers; -//using System; -//using System.Collections.Generic; -//using System.IO; -//using System.Linq; -//using System.Runtime.InteropServices.WindowsRuntime; -//using System.Threading; -//using System.Threading.Tasks; -//using Windows.Devices.Enumeration; -//using Windows.Graphics.Display; -//using Windows.Graphics.Imaging; -//using Windows.Networking.BackgroundTransfer; -//using Windows.Storage; -//using Windows.Storage.Streams; -//using Windows.UI; -//using Windows.UI.Popups; -//using Windows.UI.Xaml.Media; -//using Windows.UI.Xaml.Media.Imaging; - -//namespace TestApp -//{ -// class Util -// { -// async public static Task GetCroppedBitmapAsync(IRandomAccessStream stream, Rectangle rectangle) -// { -// var pixels = await GetCroppedPixelsAsync(stream, rectangle); - -// // Stream the bytes into a WriteableBitmap -// WriteableBitmap cropBmp = new WriteableBitmap(rectangle.Width, rectangle.Height); -// cropBmp.FromByteArray(pixels); - -// return cropBmp; -// } - -// async private static Task CropBitmapAsync(Stream localFileStream, Rectangle rectangle, StorageFile resultFile) -// { -// //Get pixels of the crop region -// var pixels = await GetCroppedPixelsAsync(localFileStream.AsRandomAccessStream(), rectangle); - -// // Save result to new image -// using (Stream resultStream = await resultFile.OpenStreamForWriteAsync()) -// { -// IRandomAccessStream randomAccessStream = resultStream.AsRandomAccessStream(); -// BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, randomAccessStream); - -// encoder.SetPixelData(BitmapPixelFormat.Bgra8, -// BitmapAlphaMode.Ignore, -// (uint)rectangle.Width, (uint)rectangle.Height, -// DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, pixels); - -// await encoder.FlushAsync(); -// } -// } - -// async public static Task CropBitmapAsync(Func> localFile, Microsoft.ProjectOxford.Common.Rectangle rectangle, StorageFile resultFile) -// { -// await CropBitmapAsync(await localFile(), rectangle, resultFile); -// } - -// async private static Task GetCroppedPixelsAsync(IRandomAccessStream stream, Microsoft.ProjectOxford.Common.Rectangle rectangle) -// { -// // Create a decoder from the stream. With the decoder, we can get -// // the properties of the image. -// BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); - -// // Create cropping BitmapTransform and define the bounds. -// BitmapTransform transform = new BitmapTransform(); -// BitmapBounds bounds = new BitmapBounds(); -// bounds.X = (uint)rectangle.Left; -// bounds.Y = (uint)rectangle.Top; -// bounds.Height = (uint)rectangle.Height; -// bounds.Width = (uint)rectangle.Width; -// transform.Bounds = bounds; - -// // Get the cropped pixels within the bounds of transform. -// PixelDataProvider pix = await decoder.GetPixelDataAsync( -// BitmapPixelFormat.Bgra8, -// BitmapAlphaMode.Straight, -// transform, -// ExifOrientationMode.IgnoreExifOrientation, -// ColorManagementMode.ColorManageToSRgb); - -// return pix.DetachPixelData(); -// } - -// internal static async Task GetPixelBytesFromSoftwareBitmapAsync(SoftwareBitmap softwareBitmap) -// { -// using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream()) -// { -// BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); -// encoder.SetSoftwareBitmap(softwareBitmap); -// await encoder.FlushAsync(); - -// // Read the pixel bytes from the memory stream -// using (var reader = new DataReader(stream.GetInputStreamAt(0))) -// { -// var bytes = new byte[stream.Size]; -// await reader.LoadAsync((uint)stream.Size); -// reader.ReadBytes(bytes); -// return bytes; -// } -// } -// } - -// internal static async Task ResizePhoto(Stream photo, int height) -// { -// WriteableBitmap wb = new WriteableBitmap(1, 1); -// wb = await wb.FromStream(photo.AsRandomAccessStream()); -// if (wb.PixelHeight <= height) -// { -// // no need to resize -// return photo; -// } - -// wb = wb.Resize((int)(((double)wb.PixelWidth / wb.PixelHeight) * height), height, WriteableBitmapExtensions.Interpolation.Bilinear); - -// InMemoryRandomAccessStream result = new InMemoryRandomAccessStream(); -// var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, result); - -// encoder.SetPixelData(BitmapPixelFormat.Bgra8, -// BitmapAlphaMode.Ignore, -// (uint)wb.PixelWidth, (uint)wb.PixelHeight, -// DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, wb.PixelBuffer.ToArray()); - -// await encoder.FlushAsync(); - -// return result.AsStream(); -// } -// } -//} +using Microsoft.ProjectOxford.Common; +using Microsoft.ProjectOxford.Face; +using Microsoft.ProjectOxford.Face.Contract; +using System; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using Windows.Data.Xml.Dom; +using Windows.Graphics.Display; +using Windows.Graphics.Imaging; +using Windows.Storage.Streams; +using Windows.UI.Notifications; +using Windows.UI.Popups; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; + +namespace TestApp +{ + class Util + { + internal static void ShowToastNotification(string errorMessage) + { + ToastTemplateType toastTemplate = ToastTemplateType.ToastText02; + XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); + XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text"); + toastTextElements[0].AppendChild(toastXml.CreateTextNode("Image Processing Test App")); + toastTextElements[1].AppendChild(toastXml.CreateTextNode(errorMessage)); + + ToastNotification toast = new ToastNotification(toastXml); + ToastNotificationManager.CreateToastNotifier().Show(toast); + } + + internal static async Task GenericApiCallExceptionHandler(Exception ex, string errorTitle) + { + string errorDetails = GetMessageFromException(ex); + + await new MessageDialog(errorDetails, errorTitle).ShowAsync(); + } + + internal static string GetMessageFromException(Exception ex) + { + string errorDetails = ex.Message; + + FaceAPIException faceApiException = ex as FaceAPIException; + if (faceApiException?.ErrorMessage != null) + { + errorDetails = faceApiException.ErrorMessage; + } + + ClientException commonException = ex as ClientException; + if (commonException?.Error?.Message != null) + { + errorDetails = commonException.Error.Message; + } + + Microsoft.ProjectOxford.Vision.ClientException visionException = ex as Microsoft.ProjectOxford.Vision.ClientException; + if (visionException?.Error?.Message != null) + { + errorDetails = visionException.Error.Message; + } + + return errorDetails; + } + + async public static Task GetCroppedBitmapAsync(IRandomAccessStream stream, FaceRectangle rectangle) + { + var pixels = await GetCroppedPixelsAsync(stream, rectangle); + + // Stream the bytes into a WriteableBitmap + WriteableBitmap cropBmp = new WriteableBitmap(rectangle.Width, rectangle.Height); + cropBmp.FromByteArray(pixels); + + return cropBmp; + } + + async private static Task GetCroppedPixelsAsync(IRandomAccessStream stream, FaceRectangle rectangle) + { + // Create a decoder from the stream. With the decoder, we can get + // the properties of the image. + BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream); + + // Create cropping BitmapTransform and define the bounds. + BitmapTransform transform = new BitmapTransform(); + BitmapBounds bounds = new BitmapBounds(); + bounds.X = (uint)rectangle.Left; + bounds.Y = (uint)rectangle.Top; + bounds.Height = (uint)rectangle.Height; + bounds.Width = (uint)rectangle.Width; + transform.Bounds = bounds; + + // Get the cropped pixels within the bounds of transform. + PixelDataProvider pix = await decoder.GetPixelDataAsync( + BitmapPixelFormat.Bgra8, + BitmapAlphaMode.Straight, + transform, + ExifOrientationMode.IgnoreExifOrientation, + ColorManagementMode.ColorManageToSRgb); + + return pix.DetachPixelData(); + } + + internal static async Task ResizePhoto(Stream photo, int height) + { + WriteableBitmap wb = new WriteableBitmap(1, 1); + wb = await wb.FromStream(photo.AsRandomAccessStream()); + if (wb.PixelHeight <= height) + { + // no need to resize + return photo; + } + + wb = wb.Resize((int)(((double)wb.PixelWidth / wb.PixelHeight) * height), height, WriteableBitmapExtensions.Interpolation.Bilinear); + + InMemoryRandomAccessStream result = new InMemoryRandomAccessStream(); + var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, result); + + encoder.SetPixelData(BitmapPixelFormat.Bgra8, + BitmapAlphaMode.Ignore, + (uint)wb.PixelWidth, (uint)wb.PixelHeight, + DisplayInformation.GetForCurrentView().LogicalDpi, DisplayInformation.GetForCurrentView().LogicalDpi, wb.PixelBuffer.ToArray()); + + await encoder.FlushAsync(); + + return result.AsStream(); + } + } +} diff --git a/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs b/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs index 9fd1253..e1c107e 100644 --- a/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs +++ b/ImageProcessing/TestApp/ViewModel/FaceFilterViewModel.cs @@ -16,9 +16,10 @@ public class FaceFilterViewModel public Guid FaceId { get; set; } public ImageSource ImageSource { get; set; } - public FaceFilterViewModel(Guid faceId) + public FaceFilterViewModel(Guid faceId, ImageSource croppedFace) { this.FaceId = faceId; + this.ImageSource = croppedFace; } } } diff --git a/ImageProcessing/TestApp/project.json b/ImageProcessing/TestApp/project.json index 5c0035a..f4bab55 100644 --- a/ImageProcessing/TestApp/project.json +++ b/ImageProcessing/TestApp/project.json @@ -1,7 +1,9 @@ { "dependencies": { - "Microsoft.Bcl.Build": "1.0.21", "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0", + "Microsoft.ProjectOxford.Common": "1.0.324", + "Microsoft.ProjectOxford.Face": "1.2.5", + "Microsoft.ProjectOxford.Vision": "1.0.372", "Newtonsoft.Json": "9.0.1", "WriteableBitmapEx": "1.5.0" }, From 7edc8ec3f932337365c6ebebab893e447ba8bfe2 Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Wed, 5 Apr 2017 15:47:23 -0700 Subject: [PATCH 04/16] Sikipping images with errors during processing loop, plus couple of bug fixes --- ImageProcessing/TestApp/MainPage.xaml.cs | 34 +++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs index b9bc450..0864a65 100644 --- a/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -11,6 +11,7 @@ using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.Pickers; +using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; @@ -36,7 +37,7 @@ public MainPage() this.InitializeComponent(); } - protected override async void OnNavigatedTo(NavigationEventArgs e) + protected override void OnNavigatedTo(NavigationEventArgs e) { // callbacks for core library FaceServiceHelper.Throttled = () => Util.ShowToastNotification("The Face API is throttling your requests. Consider upgrading to a Premium Key."); @@ -50,8 +51,6 @@ protected override async void OnNavigatedTo(NavigationEventArgs e) EmotionServiceHelper.ApiKey = ""; VisionServiceHelper.ApiKey = ""; - await FaceListManager.ResetFaceLists(); - base.OnNavigatedTo(e); } @@ -62,6 +61,9 @@ private async void ProcessImagesClicked(object sender, RoutedEventArgs e) FolderPicker folderPicker = new FolderPicker(); folderPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; folderPicker.FileTypeFilter.Add(".jpeg"); + folderPicker.FileTypeFilter.Add(".jpg"); + folderPicker.FileTypeFilter.Add(".png"); + folderPicker.FileTypeFilter.Add(".gif"); folderPicker.FileTypeFilter.Add(".bmp"); StorageFolder folder = await folderPicker.PickSingleFolderAsync(); @@ -83,6 +85,8 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) this.AllResults.Clear(); this.FilteredResults.Clear(); this.TagFilters.Clear(); + this.EmotionFilters.Clear(); + this.FaceFilters.Clear(); List insightsList = new List(); @@ -107,14 +111,27 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) // We will just compute everything again in case of errors } + bool foundErrors = false; + if (!insightsList.Any()) { + // start with fresh face lists + await FaceListManager.ResetFaceLists(); + // enumerate through the first 50 files and extract the insights foreach (var item in (await rootFolder.GetFilesAsync()).Take(50)) { - ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Name); - insightsList.Add(insights); - await AddImageInsightsToViewModel(rootFolder, insights); + try + { + ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Name); + insightsList.Add(insights); + await AddImageInsightsToViewModel(rootFolder, insights); + } + catch (Exception) + { + // Ignore the error with this image but continue so we try process as many as we can. + foundErrors = true; + } } // save to json @@ -135,6 +152,11 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) this.EmotionFilters.AddRange(sortedEmotions); this.progressRing.IsActive = false; + + if (foundErrors) + { + await new MessageDialog("Error processing some of the photos. We skipped the errors and did what we could.").ShowAsync(); + } } private async Task AddImageInsightsToViewModel(StorageFolder rootFolder, ImageInsights insights) From b861f6a6e2787b9847e41c81bf28b42a0a4163fb Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Thu, 6 Apr 2017 10:49:38 -0700 Subject: [PATCH 05/16] Updating the file enumeration code in the test app, plus changes to library code based on last PR feedback. --- .../ServiceHelpers/FaceListManager.cs | 3 ++- .../ServiceHelpers/VisionServiceHelper.cs | 6 +++--- ImageProcessing/TestApp/MainPage.xaml.cs | 13 ++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs index 6c2ccd6..04ea309 100644 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/FaceListManager.cs @@ -17,6 +17,7 @@ class FaceListInfo public class FaceListManager { + private const int MaxFaceListCount = 64; private static Dictionary faceLists; public static string FaceListsUserDataFilter { get; set; } @@ -164,7 +165,7 @@ public static async Task FindSimilarPersistedFaceAsync(Fun // If possible, let's create a new list now and add the new face to it. If we can't (e.g. we already maxed out on list count), // let's delete an old list, create a new one and add the new face to it. - if (faceLists.Count == 64) + if (faceLists.Count == MaxFaceListCount) { // delete oldest face list var oldestFaceList = faceLists.OrderBy(fl => fl.Value.LastMatchTimestamp).FirstOrDefault(); diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs index 2fdd266..66dabb8 100644 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/VisionServiceHelper.cs @@ -16,7 +16,7 @@ public static class VisionServiceHelper static VisionServiceHelper() { - InitializeEmotionService(); + InitializeVisionService(); } public static Action Throttled; @@ -35,12 +35,12 @@ public static string ApiKey apiKey = value; if (changed) { - InitializeEmotionService(); + InitializeVisionService(); } } } - private static void InitializeEmotionService() + private static void InitializeVisionService() { visionClient = new VisionServiceClient(apiKey); } diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs index 0864a65..cbaba7c 100644 --- a/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -11,6 +11,7 @@ using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.Pickers; +using Windows.Storage.Search; using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -60,11 +61,7 @@ private async void ProcessImagesClicked(object sender, RoutedEventArgs e) { FolderPicker folderPicker = new FolderPicker(); folderPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; - folderPicker.FileTypeFilter.Add(".jpeg"); - folderPicker.FileTypeFilter.Add(".jpg"); - folderPicker.FileTypeFilter.Add(".png"); - folderPicker.FileTypeFilter.Add(".gif"); - folderPicker.FileTypeFilter.Add(".bmp"); + folderPicker.FileTypeFilter.Add("*"); StorageFolder folder = await folderPicker.PickSingleFolderAsync(); if (folder != null) @@ -118,8 +115,10 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) // start with fresh face lists await FaceListManager.ResetFaceLists(); - // enumerate through the first 50 files and extract the insights - foreach (var item in (await rootFolder.GetFilesAsync()).Take(50)) + // enumerate through the first 50 images and extract the insights + QueryOptions fileQueryOptions = new QueryOptions(CommonFileQuery.DefaultQuery, new[] { ".png", ".jpg", ".bmp", ".jpeg", ".gif" }); + StorageFileQueryResult queryResult = rootFolder.CreateFileQueryWithOptions(fileQueryOptions); + foreach (var item in (await queryResult.GetFilesAsync(0, 50))) { try { From d5565deaa85f96874f5d081d4983cfbad84e482e Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Wed, 12 Apr 2017 13:17:25 -0700 Subject: [PATCH 06/16] - Removed ImageAnalyzer class and moved relevant code into ImageProcessor - Updated test app for better error handling and to automatically resize photos before passing to APIs --- .../ProcessingLibrary/FaceInsights.cs | 2 + .../ImageProcessingLibrary.csproj | 1 - .../ProcessingLibrary/ImageProcessor.cs | 87 ++++++---- .../ServiceHelpers/CoreUtil.cs | 16 -- .../ServiceHelpers/ErrorTrackingHelper.cs | 4 - .../ServiceHelpers/ImageAnalyzer.cs | 162 ------------------ ImageProcessing/TestApp/MainPage.xaml.cs | 47 +++-- ImageProcessing/TestApp/Util.cs | 28 ++- .../ViewModel/ImageInsightsViewModel.cs | 7 +- 9 files changed, 107 insertions(+), 247 deletions(-) delete mode 100644 ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs diff --git a/ImageProcessing/ProcessingLibrary/FaceInsights.cs b/ImageProcessing/ProcessingLibrary/FaceInsights.cs index e3a8dc7..907ecf5 100644 --- a/ImageProcessing/ProcessingLibrary/FaceInsights.cs +++ b/ImageProcessing/ProcessingLibrary/FaceInsights.cs @@ -8,5 +8,7 @@ public class FaceInsights public Guid UniqueFaceId { get; set; } public FaceRectangle FaceRectangle { get; set; } public string TopEmotion { get; set; } + public string Gender { get; set; } + public double Age { get; set; } } } diff --git a/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj b/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj index fd3a106..3ac1263 100644 --- a/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj +++ b/ImageProcessing/ProcessingLibrary/ImageProcessingLibrary.csproj @@ -35,7 +35,6 @@ - diff --git a/ImageProcessing/ProcessingLibrary/ImageProcessor.cs b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs index 8f83ddd..5a835a2 100644 --- a/ImageProcessing/ProcessingLibrary/ImageProcessor.cs +++ b/ImageProcessing/ProcessingLibrary/ImageProcessor.cs @@ -1,4 +1,7 @@ using Microsoft.ProjectOxford.Common.Contract; +using Microsoft.ProjectOxford.Face; +using Microsoft.ProjectOxford.Face.Contract; +using Microsoft.ProjectOxford.Vision; using ServiceHelpers; using System; using System.Collections.Generic; @@ -10,52 +13,70 @@ namespace ImageProcessingLibrary { public class ImageProcessor { - public static Task ProcessImageAsync(Func> imageStream, string imageId) + private static FaceAttributeType[] DefaultFaceAttributeTypes = new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Gender }; + private static VisualFeature[] DefaultVisualFeatureTypes = new VisualFeature[] { VisualFeature.Tags, VisualFeature.Description }; + + public static async Task ProcessImageAsync(Func> imageStreamCallback, string imageId) { - return Task.Run(async () => - { - ImageAnalyzer analyzer = new ImageAnalyzer(imageStream); + ImageInsights result = new ImageInsights { ImageId = imageId }; + + // trigger computer vision, face and emotion analysis + List emotionResult = new List(); + await Task.WhenAll(AnalyzeImageFeaturesAsync(imageStreamCallback, result), AnalyzeFacesAsync(imageStreamCallback, result), AnalyzeEmotionAsync(imageStreamCallback, emotionResult)); - // trigger vision, face and emotion requests - await Task.WhenAll(analyzer.AnalyzeImageAsync(), analyzer.DetectFacesAsync(detectFaceAttributes: true), analyzer.DetectEmotionAsync()); + // Combine emotion and face results based on face rectangle location/size similarity + foreach (var faceInsights in result.FaceInsights) + { + Emotion faceEmotion = CoreUtil.FindFaceClosestToRegion(emotionResult, faceInsights.FaceRectangle); + if (faceEmotion != null) + { + faceInsights.TopEmotion = faceEmotion.Scores.ToRankedList().First().Key; + } + } - // trigger face match against previously seen faces - await analyzer.FindSimilarPersistedFacesAsync(); + return result; + } - ImageInsights result = new ImageInsights { ImageId = imageId }; + private static async Task AnalyzeImageFeaturesAsync(Func> imageStreamCallback, ImageInsights result) + { + var imageAnalysisResult = await VisionServiceHelper.AnalyzeImageAsync(imageStreamCallback, DefaultVisualFeatureTypes); - // assign computer vision results - result.VisionInsights = new VisionInsights + result.VisionInsights = new VisionInsights { - Caption = analyzer.AnalysisResult.Description?.Captions[0].Text, - Tags = analyzer.AnalysisResult.Tags.Select(t => t.Name).ToArray() + Caption = imageAnalysisResult.Description.Captions[0].Text, + Tags = imageAnalysisResult.Tags.Select(t => t.Name).ToArray() }; + } - // assign face api and emotion api results - List faceInsightsList = new List(); - foreach (var face in analyzer.DetectedFaces) - { - FaceInsights faceInsights = new FaceInsights { FaceRectangle = face.FaceRectangle }; - - SimilarFaceMatch similarFaceMatch = analyzer.SimilarFaceMatches.FirstOrDefault(s => s.Face.FaceId == face.FaceId); - if (similarFaceMatch != null) - { - faceInsights.UniqueFaceId = similarFaceMatch.SimilarPersistedFace.PersistedFaceId; - } + private static async Task AnalyzeFacesAsync(Func> imageStreamCallback, ImageInsights result) + { + var faces = await FaceServiceHelper.DetectAsync(imageStreamCallback, returnFaceId: true, returnFaceLandmarks: false, returnFaceAttributes: DefaultFaceAttributeTypes); - Emotion faceEmotion = CoreUtil.FindFaceClosestToRegion(analyzer.DetectedEmotion, face.FaceRectangle); - if (faceEmotion != null) - { - faceInsights.TopEmotion = faceEmotion.Scores.ToRankedList().First().Key; - } + List faceInsightsList = new List(); + foreach (Face detectedFace in faces) + { + FaceInsights faceInsights = new FaceInsights + { + FaceRectangle = detectedFace.FaceRectangle, + Age = detectedFace.FaceAttributes.Age, + Gender = detectedFace.FaceAttributes.Gender + }; - faceInsightsList.Add(faceInsights); + SimilarPersistedFace similarPersistedFace = await FaceListManager.FindSimilarPersistedFaceAsync(imageStreamCallback, detectedFace.FaceId, detectedFace); + if (similarPersistedFace != null) + { + faceInsights.UniqueFaceId = similarPersistedFace.PersistedFaceId; } - result.FaceInsights = faceInsightsList.ToArray(); + faceInsightsList.Add(faceInsights); + } + + result.FaceInsights = faceInsightsList.ToArray(); + } - return result; - }); + private static async Task AnalyzeEmotionAsync(Func> imageStreamCallback, List faceEmotions) + { + faceEmotions.AddRange(await EmotionServiceHelper.RecognizeAsync(imageStreamCallback)); } } } diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs index 3cca940..506cb4c 100644 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/CoreUtil.cs @@ -9,21 +9,6 @@ namespace ServiceHelpers { public class CoreUtil { - public static uint MinDetectableFaceCoveragePercentage = 0; - - public static bool IsFaceBigEnoughForDetection(int faceHeight, int imageHeight) - { - if (imageHeight == 0) - { - // sometimes we don't know the size of the image, so we assume the face is big enough - return true; - } - - double faceHeightPercentage = 100 * ((double) faceHeight / imageHeight); - - return faceHeightPercentage >= MinDetectableFaceCoveragePercentage; - } - public static Emotion FindFaceClosestToRegion(IEnumerable emotion, FaceRectangle region) { return emotion?.Where(e => CoreUtil.AreFacesPotentiallyTheSame(e.FaceRectangle, region)) @@ -55,6 +40,5 @@ public static bool AreFacesPotentiallyTheSame(int face1X, int face1Y, int face1W return false; } - } } diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs index 7d2d9ce..10026b2 100644 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs +++ b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ErrorTrackingHelper.cs @@ -8,9 +8,5 @@ public static class ErrorTrackingHelper // callbacks for exception tracking public static Action TrackException { get; set; } = (exception, message) => { }; - - // callbacks for blocking UI error message - public static Func GenericApiCallExceptionHandler { get; set; } - = (ex, errorTitle) => Task.FromResult(0); } } diff --git a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs b/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs deleted file mode 100644 index e3371c1..0000000 --- a/ImageProcessing/ProcessingLibrary/ServiceHelpers/ImageAnalyzer.cs +++ /dev/null @@ -1,162 +0,0 @@ -using Microsoft.ProjectOxford.Common.Contract; -using Microsoft.ProjectOxford.Face; -using Microsoft.ProjectOxford.Face.Contract; -using Microsoft.ProjectOxford.Vision; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; - -namespace ServiceHelpers -{ - public class ImageAnalyzer - { - private static FaceAttributeType[] DefaultFaceAttributeTypes = new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Gender, FaceAttributeType.HeadPose }; - - public Func> GetImageStreamCallback { get; set; } - - public IEnumerable DetectedFaces { get; set; } - - public IEnumerable DetectedEmotion { get; set; } - - public IEnumerable SimilarFaceMatches { get; set; } - - public Microsoft.ProjectOxford.Vision.Contract.AnalysisResult AnalysisResult { get; set; } - - public bool ShowDialogOnFaceApiErrors { get; set; } = false; - - public ImageAnalyzer(Func> getStreamCallback) - { - this.GetImageStreamCallback = getStreamCallback; - } - - public async Task DetectFacesAsync(bool detectFaceAttributes = false, bool detectFaceLandmarks = false) - { - try - { - this.DetectedFaces = await FaceServiceHelper.DetectAsync( - this.GetImageStreamCallback, - returnFaceId: true, - returnFaceLandmarks: detectFaceLandmarks, - returnFaceAttributes: detectFaceAttributes ? DefaultFaceAttributeTypes : null); - } - catch (Exception e) - { - ErrorTrackingHelper.TrackException(e, "Face API DetectAsync error"); - - this.DetectedFaces = Enumerable.Empty(); - - if (this.ShowDialogOnFaceApiErrors) - { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Face API failed."); - } - } - } - - public async Task DetectEmotionAsync() - { - try - { - this.DetectedEmotion = await EmotionServiceHelper.RecognizeAsync(this.GetImageStreamCallback); - } - catch (Exception e) - { - ErrorTrackingHelper.TrackException(e, "Emotion API RecognizeAsync error"); - - this.DetectedEmotion = Enumerable.Empty(); - - if (this.ShowDialogOnFaceApiErrors) - { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Emotion API failed."); - } - } - } - - public async Task DescribeAsync() - { - try - { - this.AnalysisResult = await VisionServiceHelper.DescribeAsync(this.GetImageStreamCallback); - } - catch (Exception e) - { - ErrorTrackingHelper.TrackException(e, "Vision API DescribeAsync error"); - - this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); - - if (this.ShowDialogOnFaceApiErrors) - { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Vision API failed."); - } - } - } - - public async Task AnalyzeImageAsync() - { - try - { - this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync(this.GetImageStreamCallback, new VisualFeature[] { VisualFeature.Tags /*, VisualFeature.Description */}); - } - catch (Exception e) - { - ErrorTrackingHelper.TrackException(e, "Vision API AnalyzeImageAsync error"); - - this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); - - if (this.ShowDialogOnFaceApiErrors) - { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Vision API failed."); - } - } - } - - public async Task FindSimilarPersistedFacesAsync() - { - this.SimilarFaceMatches = Enumerable.Empty(); - - if (this.DetectedFaces == null || !this.DetectedFaces.Any()) - { - return; - } - - List result = new List(); - - foreach (Face detectedFace in this.DetectedFaces) - { - try - { - SimilarPersistedFace similarPersistedFace = await FaceListManager.FindSimilarPersistedFaceAsync(this.GetImageStreamCallback, detectedFace.FaceId, detectedFace); - if (similarPersistedFace != null) - { - result.Add(new SimilarFaceMatch { Face = detectedFace, SimilarPersistedFace = similarPersistedFace }); - } - } - catch (Exception e) - { - ErrorTrackingHelper.TrackException(e, "FaceListManager.FindSimilarPersistedFaceAsync error"); - - if (this.ShowDialogOnFaceApiErrors) - { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Failure finding similar faces"); - } - } - } - - this.SimilarFaceMatches = result; - } - } - - public class SimilarFaceMatch - { - public Face Face - { - get; set; - } - - public SimilarPersistedFace SimilarPersistedFace - { - get; set; - } - } -} diff --git a/ImageProcessing/TestApp/MainPage.xaml.cs b/ImageProcessing/TestApp/MainPage.xaml.cs index cbaba7c..ff61532 100644 --- a/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/ImageProcessing/TestApp/MainPage.xaml.cs @@ -12,10 +12,10 @@ using Windows.Storage; using Windows.Storage.Pickers; using Windows.Storage.Search; -using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 @@ -42,10 +42,8 @@ protected override void OnNavigatedTo(NavigationEventArgs e) { // callbacks for core library FaceServiceHelper.Throttled = () => Util.ShowToastNotification("The Face API is throttling your requests. Consider upgrading to a Premium Key."); - EmotionServiceHelper.Throttled = () => Util.ShowToastNotification("The Emotion API is throttling your requests. Consider upgrading to a Premium Key."); VisionServiceHelper.Throttled = () => Util.ShowToastNotification("The Vision API is throttling your requests. Consider upgrading to a Premium Key."); - ErrorTrackingHelper.TrackException = (exception, message) => { Debug.WriteLine("ImageProcessingLibrary exception: {0}", message); }; - ErrorTrackingHelper.GenericApiCallExceptionHandler = Util.GenericApiCallExceptionHandler; + ErrorTrackingHelper.TrackException = (exception, message) => { Debug.WriteLine("ImageProcessingLibrary exception: {0}", message); }; // Enter API Keys here FaceServiceHelper.ApiKey = ""; @@ -71,7 +69,7 @@ private async void ProcessImagesClicked(object sender, RoutedEventArgs e) } catch (Exception ex) { - await ErrorTrackingHelper.GenericApiCallExceptionHandler(ex, "Error picking the target folder."); + await Util.GenericApiCallExceptionHandler(ex, "Error picking the target folder."); } } @@ -108,8 +106,6 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) // We will just compute everything again in case of errors } - bool foundErrors = false; - if (!insightsList.Any()) { // start with fresh face lists @@ -122,14 +118,31 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) { try { - ImageInsights insights = await ImageProcessor.ProcessImageAsync(item.OpenStreamForReadAsync, item.Name); + // Resize (if needed) in order to reduce network latency and errors due to large files. Then store the result in a temporary file. + StorageFile resizedFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("ImageCollectionInsights.jpg", CreationCollisionOption.GenerateUniqueName); + var resizeTransform = await Util.ResizePhoto(await item.OpenStreamForReadAsync(), 720, resizedFile); + + // Send the file for processing + ImageInsights insights = await ImageProcessor.ProcessImageAsync(resizedFile.OpenStreamForReadAsync, item.Name); + + // Delete resized file + await resizedFile.DeleteAsync(); + + // Adjust all FaceInsights coordinates based on the transform function between the original and resized photos + foreach (var faceInsight in insights.FaceInsights) + { + faceInsight.FaceRectangle.Left = (int)(faceInsight.FaceRectangle.Left * resizeTransform.Item1); + faceInsight.FaceRectangle.Top = (int)(faceInsight.FaceRectangle.Top * resizeTransform.Item2); + faceInsight.FaceRectangle.Width = (int)(faceInsight.FaceRectangle.Width * resizeTransform.Item1); + faceInsight.FaceRectangle.Height = (int)(faceInsight.FaceRectangle.Height * resizeTransform.Item2); + } + insightsList.Add(insights); await AddImageInsightsToViewModel(rootFolder, insights); } - catch (Exception) + catch (Exception ex) { - // Ignore the error with this image but continue so we try process as many as we can. - foundErrors = true; + await Util.GenericApiCallExceptionHandler(ex, "Error processing image."); } } @@ -151,17 +164,17 @@ private async Task ProcessImagesAsync(StorageFolder rootFolder) this.EmotionFilters.AddRange(sortedEmotions); this.progressRing.IsActive = false; - - if (foundErrors) - { - await new MessageDialog("Error processing some of the photos. We skipped the errors and did what we could.").ShowAsync(); - } } private async Task AddImageInsightsToViewModel(StorageFolder rootFolder, ImageInsights insights) { - ImageInsightsViewModel insightsViewModel = new ImageInsightsViewModel(insights, await (await rootFolder.GetFileAsync(insights.ImageId)).OpenStreamForReadAsync()); + // Load image from file + BitmapImage bitmapImage = new BitmapImage(); + await bitmapImage.SetSourceAsync((await (await rootFolder.GetFileAsync(insights.ImageId)).OpenStreamForReadAsync()).AsRandomAccessStream()); + bitmapImage.DecodePixelHeight = 360; + // Create the view models + ImageInsightsViewModel insightsViewModel = new ImageInsightsViewModel(insights, bitmapImage); this.AllResults.Add(insightsViewModel); this.FilteredResults.Add(insightsViewModel); diff --git a/ImageProcessing/TestApp/Util.cs b/ImageProcessing/TestApp/Util.cs index 9a666c8..c48b04d 100644 --- a/ImageProcessing/TestApp/Util.cs +++ b/ImageProcessing/TestApp/Util.cs @@ -9,6 +9,7 @@ using Windows.Data.Xml.Dom; using Windows.Graphics.Display; using Windows.Graphics.Imaging; +using Windows.Storage; using Windows.Storage.Streams; using Windows.UI.Notifications; using Windows.UI.Popups; @@ -100,20 +101,29 @@ async private static Task GetCroppedPixelsAsync(IRandomAccessStream stre return pix.DetachPixelData(); } - internal static async Task ResizePhoto(Stream photo, int height) + internal static async Task> ResizePhoto(Stream photo, int height, StorageFile resultFile) + { + var resultStream = (await resultFile.OpenStreamForWriteAsync()).AsRandomAccessStream(); + var result = await ResizePhoto(photo, height, resultStream); + resultStream.Dispose(); + + return result; + } + + private static async Task> ResizePhoto(Stream photo, int height, IRandomAccessStream resultStream) { WriteableBitmap wb = new WriteableBitmap(1, 1); wb = await wb.FromStream(photo.AsRandomAccessStream()); - if (wb.PixelHeight <= height) + + int originalWidth = wb.PixelWidth; + int originalHeight = wb.PixelHeight; + + if (wb.PixelHeight > height) { - // no need to resize - return photo; + wb = wb.Resize((int)(((double)wb.PixelWidth / wb.PixelHeight) * height), height, WriteableBitmapExtensions.Interpolation.Bilinear); } - wb = wb.Resize((int)(((double)wb.PixelWidth / wb.PixelHeight) * height), height, WriteableBitmapExtensions.Interpolation.Bilinear); - - InMemoryRandomAccessStream result = new InMemoryRandomAccessStream(); - var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, result); + var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, resultStream); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, @@ -122,7 +132,7 @@ internal static async Task ResizePhoto(Stream photo, int height) await encoder.FlushAsync(); - return result.AsStream(); + return new Tuple((double)originalWidth / wb.PixelWidth, (double)originalHeight / wb.PixelHeight); } } } diff --git a/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs index c15ac3e..82540f6 100644 --- a/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs +++ b/ImageProcessing/TestApp/ViewModel/ImageInsightsViewModel.cs @@ -16,13 +16,10 @@ public class ImageInsightsViewModel public ImageInsights Insights { get; set; } public ImageSource ImageSource { get; set; } - public ImageInsightsViewModel(ImageInsights insights, Stream imageStream) + public ImageInsightsViewModel(ImageInsights insights, ImageSource imageSource) { this.Insights = insights; - - BitmapImage bitmapImage = new BitmapImage(); - bitmapImage.SetSource(imageStream.AsRandomAccessStream()); - this.ImageSource = bitmapImage; + this.ImageSource = imageSource; } } } From cb1aa89652182c10cbd1894f56733c4601acf8d3 Mon Sep 17 00:00:00 2001 From: CarlosP-MS Date: Wed, 3 May 2017 14:32:50 -0700 Subject: [PATCH 07/16] Update LabManual.md --- LabManual.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/LabManual.md b/LabManual.md index b17fca4..6f6636e 100644 --- a/LabManual.md +++ b/LabManual.md @@ -46,7 +46,7 @@ We'll also be using other APIs within the Computer Vision family, so take this o Since we'll be using [LUIS](https://www.microsoft.com/cognitive-services/en-us/language-understanding-intelligent-service-luis) later in the tutorial, let's take this opportunity to create our LUIS subscription here as well. It's created in the exact same fashion as above, but choose Language Understanding Intelligent Service from the API drop-down, and re-use the same Resource Group you created above. Once again, _Pin to Dashboard_ so once we get to that stage of the tutorial you'll find it easy to get access. -## Settings up Storage ## +## Setting up Storage ## We'll be using two different stores in Azure for this project - one for storing the raw images, and the other for storing the results of our Cognitive Service calls. Azure Blob Storage is made for storing large amounts of data in a format that looks similar to a file-system, and is a great choice for storing data like images. Azure DocumentDB is our resilient NoSQL PaaS solution, and is incredibly useful for storing loosely structured data like we have with our image metadata results. There are other possible choices (Azure Table Storage, SQL Server), but DocumentDB gives us the flexibility to evolve our schema freely (like adding data for new services), query it easily, and can be quickly integrated into Azure Search. @@ -84,6 +84,12 @@ Once creation is complete, open the panel for your new database and select the _ You'll need the **URI** and the **PRIMARY KEY** for your _TestCLI's_ `settings.json` file, so copy those into there and you're now ready to store images and data into the cloud. +## Exploring Cognitive Services and Image Processing Library ## + +When you open the `ImageProcessing.sln` solution, from either the `Starting` or `Finished` directory, you will find a UWP application (`TestApp`) that allows you to load your images and call the various cognitive services on them, then explore the results. It is useful for experimentation and exploration of your images. This app is built on top of the `ImageProcessingLibrary` project. + + + ## Exploring DocumentDB ## ### Implementing DocumentDBHelper ### From 83d005a3634d53a4549672d636df9c518bf20333 Mon Sep 17 00:00:00 2001 From: carlosp-ms Date: Wed, 3 May 2017 15:27:06 -0700 Subject: [PATCH 08/16] Updating TestApp to load keys from settings.json file, and adding asset in preperation for documentation content --- Finished/ImageProcessing/ImageProcessing.sln | 4 +++- .../ImageProcessing/TestApp/MainPage.xaml.cs | 19 +++++++++++------ .../ImageProcessing/TestApp/TestApp.csproj | 1 + .../ImageProcessing/TestApp/settings.json | 17 +++++++++++++++ Starting/ImageProcessing/ImageProcessing.sln | 4 +++- .../ImageProcessing/TestApp/MainPage.xaml.cs | 20 ++++++++++++------ .../ImageProcessing/TestApp/TestApp.csproj | 1 + .../ImageProcessing/TestApp/settings.json | 17 +++++++++++++++ assets/UWPTestApp.JPG | Bin 0 -> 466212 bytes 9 files changed, 68 insertions(+), 15 deletions(-) create mode 100644 Finished/ImageProcessing/TestApp/settings.json create mode 100644 Starting/ImageProcessing/TestApp/settings.json create mode 100644 assets/UWPTestApp.JPG diff --git a/Finished/ImageProcessing/ImageProcessing.sln b/Finished/ImageProcessing/ImageProcessing.sln index 4cbce91..f10793e 100644 --- a/Finished/ImageProcessing/ImageProcessing.sln +++ b/Finished/ImageProcessing/ImageProcessing.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26403.3 +VisualStudioVersion = 15.0.26403.7 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{3A10B4A0-1C80-455A-A113-E393380D6F35}" EndProject @@ -24,6 +24,8 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.Build.0 = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.Deploy.0 = Debug|x86 {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.ActiveCfg = Debug|ARM {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Build.0 = Debug|ARM {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Deploy.0 = Debug|ARM diff --git a/Finished/ImageProcessing/TestApp/MainPage.xaml.cs b/Finished/ImageProcessing/TestApp/MainPage.xaml.cs index ff61532..d8fda1b 100644 --- a/Finished/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/Finished/ImageProcessing/TestApp/MainPage.xaml.cs @@ -35,22 +35,29 @@ public sealed partial class MainPage : Page public MainPage() { + InitializeServiceHelpers(); + this.InitializeComponent(); } - protected override void OnNavigatedTo(NavigationEventArgs e) + private static void InitializeServiceHelpers() { // callbacks for core library FaceServiceHelper.Throttled = () => Util.ShowToastNotification("The Face API is throttling your requests. Consider upgrading to a Premium Key."); VisionServiceHelper.Throttled = () => Util.ShowToastNotification("The Vision API is throttling your requests. Consider upgrading to a Premium Key."); ErrorTrackingHelper.TrackException = (exception, message) => { Debug.WriteLine("ImageProcessingLibrary exception: {0}", message); }; - // Enter API Keys here - FaceServiceHelper.ApiKey = ""; - EmotionServiceHelper.ApiKey = ""; - VisionServiceHelper.ApiKey = ""; + // API Keys + using (FileStream fileStream = File.OpenRead(Path.Combine(Directory.GetCurrentDirectory(), "settings.json"))) + using (var settingsReader = new StreamReader(fileStream)) + using (var textReader = new JsonTextReader(settingsReader)) + { + dynamic settings = new JsonSerializer().Deserialize(textReader); - base.OnNavigatedTo(e); + FaceServiceHelper.ApiKey = settings.CognitiveServicesKeys.Face; + EmotionServiceHelper.ApiKey = settings.CognitiveServicesKeys.Emotion; + VisionServiceHelper.ApiKey = settings.CognitiveServicesKeys.Vision; + } } private async void ProcessImagesClicked(object sender, RoutedEventArgs e) diff --git a/Finished/ImageProcessing/TestApp/TestApp.csproj b/Finished/ImageProcessing/TestApp/TestApp.csproj index 6ebf897..b7128a3 100644 --- a/Finished/ImageProcessing/TestApp/TestApp.csproj +++ b/Finished/ImageProcessing/TestApp/TestApp.csproj @@ -110,6 +110,7 @@ Designer + diff --git a/Finished/ImageProcessing/TestApp/settings.json b/Finished/ImageProcessing/TestApp/settings.json new file mode 100644 index 0000000..c99b9df --- /dev/null +++ b/Finished/ImageProcessing/TestApp/settings.json @@ -0,0 +1,17 @@ +{ + "CognitiveServicesKeys": { + "Face": "", + "Emotion": "", + "Vision": "" + }, + "AzureStorage": { + "ConnectionString": "", + "BlobContainer": "images" + }, + "DocumentDB": { + "EndpointURI": "", + "Key": "", + "DatabaseName": "images", + "CollectionName": "metadata" + } +} \ No newline at end of file diff --git a/Starting/ImageProcessing/ImageProcessing.sln b/Starting/ImageProcessing/ImageProcessing.sln index 4cbce91..f10793e 100644 --- a/Starting/ImageProcessing/ImageProcessing.sln +++ b/Starting/ImageProcessing/ImageProcessing.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26403.3 +VisualStudioVersion = 15.0.26403.7 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{3A10B4A0-1C80-455A-A113-E393380D6F35}" EndProject @@ -24,6 +24,8 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.ActiveCfg = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.Build.0 = Debug|x86 + {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|Any CPU.Deploy.0 = Debug|x86 {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.ActiveCfg = Debug|ARM {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Build.0 = Debug|ARM {3A10B4A0-1C80-455A-A113-E393380D6F35}.Debug|ARM.Deploy.0 = Debug|ARM diff --git a/Starting/ImageProcessing/TestApp/MainPage.xaml.cs b/Starting/ImageProcessing/TestApp/MainPage.xaml.cs index ff61532..5cc5898 100644 --- a/Starting/ImageProcessing/TestApp/MainPage.xaml.cs +++ b/Starting/ImageProcessing/TestApp/MainPage.xaml.cs @@ -35,24 +35,30 @@ public sealed partial class MainPage : Page public MainPage() { + InitializeServiceHelpers(); + this.InitializeComponent(); } - protected override void OnNavigatedTo(NavigationEventArgs e) + private static void InitializeServiceHelpers() { // callbacks for core library FaceServiceHelper.Throttled = () => Util.ShowToastNotification("The Face API is throttling your requests. Consider upgrading to a Premium Key."); VisionServiceHelper.Throttled = () => Util.ShowToastNotification("The Vision API is throttling your requests. Consider upgrading to a Premium Key."); ErrorTrackingHelper.TrackException = (exception, message) => { Debug.WriteLine("ImageProcessingLibrary exception: {0}", message); }; - // Enter API Keys here - FaceServiceHelper.ApiKey = ""; - EmotionServiceHelper.ApiKey = ""; - VisionServiceHelper.ApiKey = ""; + // API Keys + using (FileStream fileStream = File.OpenRead(Path.Combine(Directory.GetCurrentDirectory(), "settings.json"))) + using (var settingsReader = new StreamReader(fileStream)) + using (var textReader = new JsonTextReader(settingsReader)) + { + dynamic settings = new JsonSerializer().Deserialize(textReader); - base.OnNavigatedTo(e); + FaceServiceHelper.ApiKey = settings.CognitiveServicesKeys.Face; + EmotionServiceHelper.ApiKey = settings.CognitiveServicesKeys.Emotion; + VisionServiceHelper.ApiKey = settings.CognitiveServicesKeys.Vision; + } } - private async void ProcessImagesClicked(object sender, RoutedEventArgs e) { try diff --git a/Starting/ImageProcessing/TestApp/TestApp.csproj b/Starting/ImageProcessing/TestApp/TestApp.csproj index 6ebf897..b7128a3 100644 --- a/Starting/ImageProcessing/TestApp/TestApp.csproj +++ b/Starting/ImageProcessing/TestApp/TestApp.csproj @@ -110,6 +110,7 @@ Designer + diff --git a/Starting/ImageProcessing/TestApp/settings.json b/Starting/ImageProcessing/TestApp/settings.json new file mode 100644 index 0000000..c99b9df --- /dev/null +++ b/Starting/ImageProcessing/TestApp/settings.json @@ -0,0 +1,17 @@ +{ + "CognitiveServicesKeys": { + "Face": "", + "Emotion": "", + "Vision": "" + }, + "AzureStorage": { + "ConnectionString": "", + "BlobContainer": "images" + }, + "DocumentDB": { + "EndpointURI": "", + "Key": "", + "DatabaseName": "images", + "CollectionName": "metadata" + } +} \ No newline at end of file diff --git a/assets/UWPTestApp.JPG b/assets/UWPTestApp.JPG new file mode 100644 index 0000000000000000000000000000000000000000..8b3be2624d0b1e07c0a5786dc8733b3466842215 GIT binary patch literal 466212 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�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≺H+1&sC{{wPWI4io3pi4*B_b<;(!vP8gHhky>&} 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

b&A;I5peD2FrD@{B9~ah8p=4UV#GRy!4x$R@Qc9 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

DLgwg#Zk>k?w|RrjPoep4nD_4qP7 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