From ea5b111728fbf1963faa582573567ca4444401e0 Mon Sep 17 00:00:00 2001 From: Yuriy Lyeshchenko Date: Tue, 26 Dec 2017 12:42:59 -0600 Subject: [PATCH 01/10] Fixing ParallelRecognizerControl per request in https://jeremybytes.blogspot.com/2017/12/your-ideas-needed-other-ways-to-run.html --- .../ParallelRecognizerControl.xaml.cs | 155 ++++++++---------- 1 file changed, 67 insertions(+), 88 deletions(-) diff --git a/DigitDisplay/ParallelRecognizerControl.xaml.cs b/DigitDisplay/ParallelRecognizerControl.xaml.cs index bb447ab..47cf897 100644 --- a/DigitDisplay/ParallelRecognizerControl.xaml.cs +++ b/DigitDisplay/ParallelRecognizerControl.xaml.cs @@ -1,10 +1,7 @@ using DigitLoader; using Microsoft.FSharp.Core; using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; +using System.Globalization; using System.Threading; using System.Threading.Tasks; using System.Windows; @@ -15,15 +12,14 @@ namespace DigitDisplay { public partial class ParallelRecognizerControl : UserControl { - string classifierName; - FSharpFunc classifier; - string[] rawData; - //ConcurrentQueue predictions = new ConcurrentQueue(); + readonly string classifierName; + readonly FSharpFunc classifier; + readonly string[] rawData; DateTimeOffset startTime; - SolidColorBrush redBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 150, 150)); - SolidColorBrush whiteBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255)); - int errors = 0; + readonly SolidColorBrush redBrush = new SolidColorBrush(Color.FromRgb(255, 150, 150)); + readonly SolidColorBrush whiteBrush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); + int errors; public ParallelRecognizerControl(string classifierName, FSharpFunc classifier, string[] rawData) @@ -37,113 +33,96 @@ public ParallelRecognizerControl(string classifierName, FSharpFunc Parallel.ForEach(input, data => + { + var stringInts = data.Split(','); + var result = Recognizer.predict(StringArrayToIntArraySkippingFirstElement(stringInts), classifier); + uiContext.Post(_ => CreateUIElements(result, stringInts[0], data, DigitsBox), null); + })); } - private void PopulatePanel(string[] rawData) + private static int[] StringArrayToIntArraySkippingFirstElement(string[] stringInts) { - startTime = DateTime.Now; - - var options = new ParallelOptions(); - options.TaskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); - - var loopResult = Parallel.ForEach(rawData, s => + var result = new int[stringInts.Length - 1]; + for (int intIdx = 0, strIdx = 1; intIdx < result.Length; intIdx++, strIdx++) { - int act = s.Split(',').Select(x => Convert.ToInt32(x)).First(); - int[] ints = s.Split(',').Select(x => Convert.ToInt32(x)).Skip(1).ToArray(); - var result = Recognizer.predict(ints, classifier); - - //predictions.Enqueue(new PredictionData() { - // prediction = result, actual = act.ToString(), imageData = s }); - - Task.Factory.StartNew(() => - CreateUIElements(result, act.ToString(), s, DigitsBox), - CancellationToken.None, - TaskCreationOptions.None, - options.TaskScheduler - ); - }); - - //Parallel.Invoke(options, () => - //{ - // PredictionData d; - // while (predictions.TryDequeue(out d)) - // { - // if (d.imageData != null) - // CreateUIElements(d.prediction, d.actual, d.imageData, DigitsBox); - // } - //}); + result[intIdx] = int.Parse(stringInts[strIdx], NumberStyles.Integer); + } + return result; } private void CreateUIElements(string prediction, string actual, string imageData, Panel panel) { - Bitmap image = DigitBitmap.GetBitmapFromRawData(imageData); - - var multiplier = 1.5; - var imageControl = new System.Windows.Controls.Image(); - imageControl.Source = image.ToWpfBitmap(); - imageControl.Stretch = Stretch.UniformToFill; - imageControl.Width = imageControl.Source.Width * multiplier; - imageControl.Height = imageControl.Source.Height * multiplier; + var imageSource = DigitBitmap.GetBitmapFromRawData(imageData).ToWpfBitmap(); + var scaledSize = new Size(imageSource.Width * 1.5, imageSource.Height * 1.5); + var imageControl = new Image + { + Source = imageSource, + Stretch = Stretch.UniformToFill, + Width = scaledSize.Width, + Height = scaledSize.Height + }; - var textBlock = new TextBlock(); - textBlock.Height = imageControl.Height; - textBlock.Width = imageControl.Width; - textBlock.FontSize = 12; // * multiplier; - textBlock.TextAlignment = TextAlignment.Center; - textBlock.Text = prediction; + var textBlock = new TextBlock + { + Height = scaledSize.Height, + Width = scaledSize.Width, + FontSize = 12, + TextAlignment = TextAlignment.Center, + Text = prediction + }; var button = new Button(); - var backgroundBrush = whiteBrush; - button.Background = backgroundBrush; button.Click += ToggleCorrectness; - - var buttonContent = new StackPanel(); - buttonContent.Orientation = Orientation.Horizontal; - button.Content = buttonContent; - - if (prediction != actual) + if (prediction == actual) + { + button.Background = whiteBrush; + } + else { button.Background = redBrush; - errors++; - ErrorBlock.Text = $"Errors: {errors}"; + ChangeErrorsCount(1); } + var buttonContent = new StackPanel {Orientation = Orientation.Horizontal}; buttonContent.Children.Add(imageControl); buttonContent.Children.Add(textBlock); - + button.Content = buttonContent; panel.Children.Add(button); - - TimeSpan duration = DateTimeOffset.Now - startTime; - TimingBlock.Text = $"Duration (seconds): {duration.TotalSeconds:0}"; + + TimingBlock.Text = "Duration (seconds): " + (DateTimeOffset.Now - startTime).TotalSeconds.ToString("0"); } private void ToggleCorrectness(object sender, RoutedEventArgs e) { - var button = sender as Button; - if (button == null) return; - - if (button.Background == whiteBrush) + switch (sender) { - button.Background = redBrush; - errors++; + case Button whiteButton when ReferenceEquals(whiteButton.Background, whiteBrush): + whiteButton.Background = redBrush; + ChangeErrorsCount(1); + break; + case Button redButton when ReferenceEquals(redButton.Background, redBrush): + redButton.Background = whiteBrush; + ChangeErrorsCount(-1); + break; + default: + return; } - else - { - button.Background = whiteBrush; - errors--; - } - ErrorBlock.Text = $"Errors: {errors}"; + } + + private void ChangeErrorsCount(int errorDiff) + { + errors += errorDiff; + ErrorBlock.Text = "Errors: " + errors.ToString("0"); } } -} +} \ No newline at end of file From 7b9fffd719865928c0a8a7203493f47e252b0eae Mon Sep 17 00:00:00 2001 From: Yuriy Lyeshchenko Date: Tue, 26 Dec 2017 13:15:28 -0600 Subject: [PATCH 02/10] Using ThreadPool.QueueUserWorkItem instead of Task.Run --- DigitDisplay/ParallelRecognizerControl.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DigitDisplay/ParallelRecognizerControl.xaml.cs b/DigitDisplay/ParallelRecognizerControl.xaml.cs index 47cf897..8d219a4 100644 --- a/DigitDisplay/ParallelRecognizerControl.xaml.cs +++ b/DigitDisplay/ParallelRecognizerControl.xaml.cs @@ -41,7 +41,7 @@ private void PopulatePanel(string[] input) { startTime = DateTimeOffset.Now; var uiContext = SynchronizationContext.Current; - Task.Run(() => Parallel.ForEach(input, data => + ThreadPool.QueueUserWorkItem(state => Parallel.ForEach(input, data => { var stringInts = data.Split(','); var result = Recognizer.predict(StringArrayToIntArraySkippingFirstElement(stringInts), classifier); From 191e53a66012cee2dbc0e9f9b29313b560513dec Mon Sep 17 00:00:00 2001 From: Yuriy Lyeshchenko Date: Sun, 31 Dec 2017 18:14:45 -0600 Subject: [PATCH 03/10] Refactoring observation loading into a separate project --- DigitDisplay.sln | 13 ++++++- DigitDisplay/App.xaml.cs | 8 +--- DigitDisplay/ImageHelper.cs | 7 +--- DigitDisplay/MainWindow.xaml.cs | 26 +------------ DigitDisplay/Properties/AssemblyInfo.cs | 2 - DigitLoader.Test/DigitBitmapTest.cs | 3 +- DigitLoader.Test/Properties/AssemblyInfo.cs | 1 - DigitLoader/DigitBitmap.cs | 1 - DigitLoader/FileLoader.cs | 1 - DigitLoader/Properties/AssemblyInfo.cs | 1 - ObservationLoader/DataReader.cs | 36 +++++++++++++++++ ObservationLoader/Observation.cs | 14 +++++++ ObservationLoader/ObservationLoader.csproj | 11 ++++++ Recognizer/App.config | 6 +-- Recognizer/BasicClassifier.cs | 4 +- Recognizer/DataReader.cs | 43 --------------------- Recognizer/Evaluator.cs | 6 +-- Recognizer/IClassifier.cs | 7 +--- Recognizer/IDistance.cs | 8 +--- Recognizer/ManhattanDistance.cs | 4 -- Recognizer/Observation.cs | 20 ---------- Recognizer/Program.cs | 6 +-- Recognizer/Properties/AssemblyInfo.cs | 1 - Recognizer/Recognizer.csproj | 11 ++++-- 24 files changed, 96 insertions(+), 144 deletions(-) create mode 100644 ObservationLoader/DataReader.cs create mode 100644 ObservationLoader/Observation.cs create mode 100644 ObservationLoader/ObservationLoader.csproj delete mode 100644 Recognizer/DataReader.cs delete mode 100644 Recognizer/Observation.cs diff --git a/DigitDisplay.sln b/DigitDisplay.sln index bd2b6a4..9842dc5 100644 --- a/DigitDisplay.sln +++ b/DigitDisplay.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DigitDisplay", "DigitDisplay\DigitDisplay.csproj", "{8E1C0000-6DD5-42E0-8DAD-D75AF1FC249F}" EndProject @@ -13,6 +13,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FunctionalRecognizer", "Fun EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Recognizer", "Recognizer\Recognizer.csproj", "{F15E6F19-7B0D-48A5-B505-7C9658D208CC}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ObservationLoader", "ObservationLoader\ObservationLoader.csproj", "{301EC918-D5E6-4C89-9CD0-84C35FC7413C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,8 +41,15 @@ Global {F15E6F19-7B0D-48A5-B505-7C9658D208CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {F15E6F19-7B0D-48A5-B505-7C9658D208CC}.Release|Any CPU.ActiveCfg = Release|Any CPU {F15E6F19-7B0D-48A5-B505-7C9658D208CC}.Release|Any CPU.Build.0 = Release|Any CPU + {301EC918-D5E6-4C89-9CD0-84C35FC7413C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {301EC918-D5E6-4C89-9CD0-84C35FC7413C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {301EC918-D5E6-4C89-9CD0-84C35FC7413C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {301EC918-D5E6-4C89-9CD0-84C35FC7413C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FC5565F2-8C3B-4A75-97DA-2219CC4C2A83} + EndGlobalSection EndGlobal diff --git a/DigitDisplay/App.xaml.cs b/DigitDisplay/App.xaml.cs index 177f8df..9126f5c 100644 --- a/DigitDisplay/App.xaml.cs +++ b/DigitDisplay/App.xaml.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; +using System.Windows; namespace DigitDisplay { diff --git a/DigitDisplay/ImageHelper.cs b/DigitDisplay/ImageHelper.cs index 3333318..578e269 100644 --- a/DigitDisplay/ImageHelper.cs +++ b/DigitDisplay/ImageHelper.cs @@ -1,11 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Drawing; +using System.Drawing; using System.Drawing.Imaging; using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Media.Imaging; namespace DigitDisplay diff --git a/DigitDisplay/MainWindow.xaml.cs b/DigitDisplay/MainWindow.xaml.cs index 23362db..7d1cb94 100644 --- a/DigitDisplay/MainWindow.xaml.cs +++ b/DigitDisplay/MainWindow.xaml.cs @@ -1,21 +1,14 @@ using DigitLoader; -using Microsoft.FSharp.Core; -using System; using System.Configuration; -using System.Drawing; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; using System.Windows.Media; namespace DigitDisplay { public partial class MainWindow : Window { - SolidColorBrush redBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 150, 150)); - SolidColorBrush whiteBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255)); + public static readonly SolidColorBrush RedBrush = new SolidColorBrush(Color.FromRgb(255, 150, 150)); + public static readonly SolidColorBrush WhiteBrush = new SolidColorBrush(Color.FromRgb(255, 255, 255)); public MainWindow() { @@ -40,21 +33,6 @@ private void GoButton_Click(object sender, RoutedEventArgs e) "Manhattan Classifier", Recognizer.manhattanClassifier, rawData); RightPanel.Children.Add(manhattanRecognizer); - - //var euclideanRecognizer = new RecognizerControl( - // "Euclidean Classifier", Recognizer.euclideanClassifier, - // rawData); - //RightPanel.Children.Add(euclideanRecognizer); - - //var nullRecognizer = new RecognizerControl( - // "Null Classifier", (FSharpFunc)Recognizer.nullClassifier, - // rawData); - //RightPanel.Children.Add(nullRecognizer); - - //var firstPixelRecognizer = new RecognizerControl( - // "FirstPixel Classifier", (FSharpFunc)Recognizer.firstPixelClassifier, - // rawData); - //LeftPanel.Children.Add(firstPixelRecognizer); } } } diff --git a/DigitDisplay/Properties/AssemblyInfo.cs b/DigitDisplay/Properties/AssemblyInfo.cs index 5ffcb34..a82d524 100644 --- a/DigitDisplay/Properties/AssemblyInfo.cs +++ b/DigitDisplay/Properties/AssemblyInfo.cs @@ -1,6 +1,4 @@ using System.Reflection; -using System.Resources; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Windows; diff --git a/DigitLoader.Test/DigitBitmapTest.cs b/DigitLoader.Test/DigitBitmapTest.cs index 3874193..7253ce4 100644 --- a/DigitLoader.Test/DigitBitmapTest.cs +++ b/DigitLoader.Test/DigitBitmapTest.cs @@ -1,5 +1,4 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; namespace DigitLoader.Test { diff --git a/DigitLoader.Test/Properties/AssemblyInfo.cs b/DigitLoader.Test/Properties/AssemblyInfo.cs index 38aa4cc..aa7d11e 100644 --- a/DigitLoader.Test/Properties/AssemblyInfo.cs +++ b/DigitLoader.Test/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/DigitLoader/DigitBitmap.cs b/DigitLoader/DigitBitmap.cs index 0f56629..4d7cb80 100644 --- a/DigitLoader/DigitBitmap.cs +++ b/DigitLoader/DigitBitmap.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Linq; diff --git a/DigitLoader/FileLoader.cs b/DigitLoader/FileLoader.cs index 902c71c..c3104b4 100644 --- a/DigitLoader/FileLoader.cs +++ b/DigitLoader/FileLoader.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; diff --git a/DigitLoader/Properties/AssemblyInfo.cs b/DigitLoader/Properties/AssemblyInfo.cs index e56015c..89e6b89 100644 --- a/DigitLoader/Properties/AssemblyInfo.cs +++ b/DigitLoader/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/ObservationLoader/DataReader.cs b/ObservationLoader/DataReader.cs new file mode 100644 index 0000000..6f4f567 --- /dev/null +++ b/ObservationLoader/DataReader.cs @@ -0,0 +1,36 @@ +using System.Globalization; +using System.IO; +using System.Linq; + +namespace ObservationLoader +{ + public class DataReader + { + public static Observation[] ReadObservations(string dataPath, int offset = 0, int? count = null) + { + var data = File.ReadAllLines(dataPath).Skip(1 + offset); + data = count.HasValue ? data.Take(count.Value) : data; + return data.Select(ObservationFactory).ToArray(); + } + + private static Observation ObservationFactory(string data) + { + var commaSeparated = data.Split(','); + + return commaSeparated.Length == 785 + ? new Observation(commaSeparated[0], IntStringsAsInts(commaSeparated, 1)) + : new Observation("T", IntStringsAsInts(commaSeparated, 0)); + } + + private static int[] IntStringsAsInts(string[] intStrings, int offset) + { + var result = new int[intStrings.Length - offset]; + for (var i = offset; i < result.Length; i++) + { + result[i] = int.Parse(intStrings[i], NumberStyles.Integer); + } + + return result; + } + } +} \ No newline at end of file diff --git a/ObservationLoader/Observation.cs b/ObservationLoader/Observation.cs new file mode 100644 index 0000000..a8de3fc --- /dev/null +++ b/ObservationLoader/Observation.cs @@ -0,0 +1,14 @@ +namespace ObservationLoader +{ + public class Observation + { + public string Label { get; } + public int[] Pixels { get; } + + public Observation(string label, int[] pixels) + { + Label = label; + Pixels = pixels; + } + } +} diff --git a/ObservationLoader/ObservationLoader.csproj b/ObservationLoader/ObservationLoader.csproj new file mode 100644 index 0000000..96d871c --- /dev/null +++ b/ObservationLoader/ObservationLoader.csproj @@ -0,0 +1,11 @@ + + + + netstandard1.3 + + + + latest + + + diff --git a/Recognizer/App.config b/Recognizer/App.config index 8e15646..8fc0551 100644 --- a/Recognizer/App.config +++ b/Recognizer/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/Recognizer/BasicClassifier.cs b/Recognizer/BasicClassifier.cs index 6265a3a..e56b61a 100644 --- a/Recognizer/BasicClassifier.cs +++ b/Recognizer/BasicClassifier.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ObservationLoader; namespace CSharp { diff --git a/Recognizer/DataReader.cs b/Recognizer/DataReader.cs deleted file mode 100644 index 3bd13c9..0000000 --- a/Recognizer/DataReader.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.IO; -using System.Linq; - -namespace CSharp -{ - public class DataReader - { - private static Observation ObservationFactory(string data) - { - string label; - int[] pixels; - var commaSeparated = data.Split(','); - if (commaSeparated.Length == 785) - { - label = commaSeparated[0]; - pixels = commaSeparated - .Skip(1) - .Select(x => Convert.ToInt32(x)) - .ToArray(); - } - else - { - label = "T"; - pixels = commaSeparated - .Select(x => Convert.ToInt32(x)) - .ToArray(); - } - - return new Observation(label, pixels); - } - - public static Observation[] ReadObservations(string dataPath) - { - var data = File.ReadAllLines(dataPath) - .Skip(1) - .Select(ObservationFactory) - .ToArray(); - - return data; - } - } -} diff --git a/Recognizer/Evaluator.cs b/Recognizer/Evaluator.cs index ac30a35..ff3da55 100644 --- a/Recognizer/Evaluator.cs +++ b/Recognizer/Evaluator.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ObservationLoader; namespace CSharp { diff --git a/Recognizer/IClassifier.cs b/Recognizer/IClassifier.cs index b609301..5fb510d 100644 --- a/Recognizer/IClassifier.cs +++ b/Recognizer/IClassifier.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; +using ObservationLoader; namespace CSharp { diff --git a/Recognizer/IDistance.cs b/Recognizer/IDistance.cs index f32fe52..350c0a6 100644 --- a/Recognizer/IDistance.cs +++ b/Recognizer/IDistance.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CSharp +namespace CSharp { public interface IDistance { diff --git a/Recognizer/ManhattanDistance.cs b/Recognizer/ManhattanDistance.cs index b57baa8..ee6d0bc 100644 --- a/Recognizer/ManhattanDistance.cs +++ b/Recognizer/ManhattanDistance.cs @@ -1,8 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace CSharp { diff --git a/Recognizer/Observation.cs b/Recognizer/Observation.cs deleted file mode 100644 index 2ed2a47..0000000 --- a/Recognizer/Observation.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CSharp -{ - public class Observation - { - public string Label { get; private set; } - public int[] Pixels { get; private set; } - - public Observation(string label, int[] pixels) - { - Label = label; - Pixels = pixels; - } - } -} diff --git a/Recognizer/Program.cs b/Recognizer/Program.cs index deab48f..fd2828d 100644 --- a/Recognizer/Program.cs +++ b/Recognizer/Program.cs @@ -1,14 +1,12 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ObservationLoader; namespace CSharp { class Program { - static void Main(string[] args) + static void Main() { var distance = new ManhattanDistance(); var classifier = new BasicClassifier(distance); diff --git a/Recognizer/Properties/AssemblyInfo.cs b/Recognizer/Properties/AssemblyInfo.cs index 6046fd3..6b9b82f 100644 --- a/Recognizer/Properties/AssemblyInfo.cs +++ b/Recognizer/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/Recognizer/Recognizer.csproj b/Recognizer/Recognizer.csproj index e7931b7..e732d8f 100644 --- a/Recognizer/Recognizer.csproj +++ b/Recognizer/Recognizer.csproj @@ -9,8 +9,9 @@ Properties CSharp CSharp - v4.5 + v4.7.1 512 + AnyCPU @@ -42,18 +43,22 @@ - - + + + {301ec918-d5e6-4c89-9cd0-84c35fc7413c} + ObservationLoader + +