{"id":4416,"date":"2016-11-04T21:57:53","date_gmt":"2016-11-04T13:57:53","guid":{"rendered":"http:\/\/unitycoder.com\/blog\/?p=4416"},"modified":"2017-09-23T11:34:12","modified_gmt":"2017-09-23T03:34:12","slug":"using-accord-net-with-unity","status":"publish","type":"post","link":"https:\/\/unitycoder.com\/blog\/2016\/11\/04\/using-accord-net-with-unity\/","title":{"rendered":"Using Accord.NET with Unity"},"content":{"rendered":"<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4418\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2016\/11\/04\/using-accord-net-with-unity\/accord-net-unity-gaussian\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?fit=593%2C719&amp;ssl=1\" data-orig-size=\"593,719\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"accord-net-unity-gaussian\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?fit=247%2C300&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?fit=593%2C719&amp;ssl=1\" class=\"alignnone size-full wp-image-4418\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?resize=593%2C719\" alt=\"accord-net-unity-gaussian\" width=\"593\" height=\"719\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?w=593&amp;ssl=1 593w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?resize=247%2C300&amp;ssl=1 247w\" sizes=\"auto, (max-width: 593px) 100vw, 593px\" \/><\/p>\n<p>While looking for Harris Corner Detection examples, without using openCV, founded this framework:<br \/>\n<em>&#8220;The Accord.NET Framework is a machine learning framework combined with audio and image processing libraries completely written in C#&#8221;<\/em><\/p>\n<p>Website: <a href=\"http:\/\/accord-framework.net\" target=\"_blank\" rel=\"noopener\">http:\/\/accord-framework.net<\/a><br \/>\nGithub: <a href=\"https:\/\/github.com\/accord-net\/framework\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/accord-net\/framework<\/a><\/p>\n<p>*Note: There is updated tutorial here with images: <a href=\"https:\/\/github.com\/accord-net\/framework\/wiki\/Unity\">https:\/\/github.com\/accord-net\/framework\/wiki\/Unity<\/a><\/p>\n<p><strong>How to get it running with Unity<\/strong><br \/>\n&#8211; Open new empty project in Unity (I Used 5.5.0b10)<br \/>\n&#8211; Edit\/Project Settings\/Player, set Api compatibility Level to .NET2.0 (instead of .NET2.0 Subset)<br \/>\n&#8211; Download framework from <a href=\"https:\/\/github.com\/accord-net\/framework\/releases\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/accord-net\/framework\/releases<\/a> ( I took <a href=\"https:\/\/github.com\/accord-net\/framework\/releases\/download\/v3.3.0\/Accord.NET-3.3.0-libsonly.rar\" target=\"_blank\" rel=\"noopener\">v3.3.0<\/a> )<br \/>\n&#8211; Copy DLL&#8217;s from that package (from &#8220;Release\/net35\/&#8221; folder) into your projects Assets\/Plugins\/ folder<br \/>\n&#8211; Also copy System.Drawing.dll from your c: drive into &#8220;Assets\/Plugins\/&#8221; folder (should be version 2.0, I founded mine from &#8220;C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\\&#8221;)<br \/>\n&#8211; Create c# script and use the code below (*This was just a quick test to get it running, testing Gaussian filter on texture)<br \/>\n&#8211; See my scene setup screenshot below the source<\/p>\n<style>.gist table { margin-bottom: 0; }<\/style>\n<div style=\"tab-size: 8\" id=\"gist41577920\" class=\"gist\">\n<div class=\"gist-file\" translate=\"no\" data-color-mode=\"light\" data-light-theme=\"light\">\n<div class=\"gist-data\">\n<div class=\"js-gist-file-update-container js-task-list-container\">\n<div id=\"file-accordframeworktest-cs\" class=\"file my-2\">\n<div itemprop=\"text\"\n      class=\"Box-body p-0 blob-wrapper data type-c  \"\n      style=\"overflow: auto\" tabindex=\"0\" role=\"region\"\n      aria-label=\"AccordFrameworkTest.cs content, created by unitycoder on 01:51PM on November 04, 2016.\"\n    ><\/p>\n<div class=\"js-check-hidden-unicode js-blob-code-container blob-code-content\">\n<p>  <template class=\"js-file-alert-template\"><\/p>\n<div data-view-component=\"true\" class=\"flash flash-warn flash-full d-flex flex-items-center\">\n  <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n    <span><br \/>\n      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.<br \/>\n      <a class=\"Link--inTextBlock\" href=\"https:\/\/github.co\/hiddenchars\" target=\"_blank\">Learn more about bidirectional Unicode characters<\/a><br \/>\n    <\/span><\/p>\n<div data-view-component=\"true\" class=\"flash-action\">        <a href=\"{{ revealButtonHref }}\" data-view-component=\"true\" class=\"btn-sm btn\">    Show hidden characters<br \/>\n<\/a>\n<\/div>\n<\/div>\n<p><\/template><br \/>\n<template class=\"js-line-alert-template\"><br \/>\n  <span aria-label=\"This line has hidden Unicode characters\" data-view-component=\"true\" class=\"line-alert tooltipped tooltipped-e\"><br \/>\n    <svg aria-hidden=\"true\" height=\"16\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" data-view-component=\"true\" class=\"octicon octicon-alert\">\n    <path d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"><\/path>\n<\/svg><br \/>\n<\/span><\/template><\/p>\n<table data-hpc class=\"highlight tab-size js-file-line-container\" data-tab-size=\"4\" data-paste-markdown-skip data-tagsearch-path=\"AccordFrameworkTest.cs\">\n<tr>\n<td id=\"file-accordframeworktest-cs-L1\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"1\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC1\" class=\"blob-code blob-code-inner js-file-line\">using System.Collections;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L2\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"2\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC2\" class=\"blob-code blob-code-inner js-file-line\">using UnityEngine;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L3\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"3\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC3\" class=\"blob-code blob-code-inner js-file-line\">using Accord.Imaging.Filters;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L4\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"4\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC4\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L5\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"5\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC5\" class=\"blob-code blob-code-inner js-file-line\">\/\/ More info: http:\/\/unitycoder.com\/blog\/2016\/11\/04\/using-accord-net-with-unity\/<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L6\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"6\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC6\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L7\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"7\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC7\" class=\"blob-code blob-code-inner js-file-line\">public class AccordFrameworkTest : MonoBehaviour<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L8\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"8\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC8\" class=\"blob-code blob-code-inner js-file-line\">{<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L9\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"9\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC9\" class=\"blob-code blob-code-inner js-file-line\">    public Renderer sourceRenderer; \/\/ our source texture is assigned on this gameobject<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L10\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"10\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC10\" class=\"blob-code blob-code-inner js-file-line\">    public Renderer targetRenderer;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L11\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"11\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC11\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L12\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"12\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC12\" class=\"blob-code blob-code-inner js-file-line\">    void Start()<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L13\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"13\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC13\" class=\"blob-code blob-code-inner js-file-line\">    {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L14\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"14\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC14\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ get maintexture from source renderer<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L15\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"15\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC15\" class=\"blob-code blob-code-inner js-file-line\">        var sourceTexture = (Texture2D)sourceRenderer.material.mainTexture;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L16\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"16\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC16\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L17\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"17\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC17\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ create system bitmap<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L18\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"18\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC18\" class=\"blob-code blob-code-inner js-file-line\">        System.Drawing.Bitmap accordImage = new System.Drawing.Bitmap(sourceTexture.width, sourceTexture.height);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L19\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"19\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC19\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L20\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"20\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC20\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ copy our texture pixels to that system bitmap<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L21\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"21\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC21\" class=\"blob-code blob-code-inner js-file-line\">        for (int x = 0; x &lt; accordImage.Width; x++)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L22\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"22\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC22\" class=\"blob-code blob-code-inner js-file-line\">        {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L23\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"23\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC23\" class=\"blob-code blob-code-inner js-file-line\">            for (int y = 0; y &lt; accordImage.Height; y++)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L24\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"24\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC24\" class=\"blob-code blob-code-inner js-file-line\">            {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L25\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"25\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC25\" class=\"blob-code blob-code-inner js-file-line\">                var c = (Color32)sourceTexture.GetPixel(x, y);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L26\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"26\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC26\" class=\"blob-code blob-code-inner js-file-line\">                var nc = System.Drawing.Color.FromArgb(c.r, c.g, c.b, c.a);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L27\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"27\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC27\" class=\"blob-code blob-code-inner js-file-line\">                accordImage.SetPixel(x, y, nc);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L28\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"28\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC28\" class=\"blob-code blob-code-inner js-file-line\">            }<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L29\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"29\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC29\" class=\"blob-code blob-code-inner js-file-line\">        }<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L30\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"30\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC30\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L31\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"31\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC31\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L32\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"32\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC32\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ These 2 lines are the only Accord.NET code used here, create filter and then apply it to bitmap<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L33\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"33\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC33\" class=\"blob-code blob-code-inner js-file-line\">        IFilter gaussianFilter = new GaussianBlur(2.0, 20);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L34\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"34\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC34\" class=\"blob-code blob-code-inner js-file-line\">        var resultsAccordImage = gaussianFilter.Apply(accordImage);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L35\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"35\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC35\" class=\"blob-code blob-code-inner js-file-line\">        <\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L36\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"36\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC36\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L37\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"37\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC37\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ copy result pixels into our color32 array from system.drawing.bitmap<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L38\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"38\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC38\" class=\"blob-code blob-code-inner js-file-line\">        var colors = new Color32[resultsAccordImage.Width * resultsAccordImage.Height];<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L39\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"39\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC39\" class=\"blob-code blob-code-inner js-file-line\">        for (int x = 0; x &lt; resultsAccordImage.Width; x++)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L40\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"40\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC40\" class=\"blob-code blob-code-inner js-file-line\">        {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L41\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"41\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC41\" class=\"blob-code blob-code-inner js-file-line\">            for (int y = 0; y &lt; resultsAccordImage.Height; y++)<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L42\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"42\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC42\" class=\"blob-code blob-code-inner js-file-line\">            {<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L43\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"43\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC43\" class=\"blob-code blob-code-inner js-file-line\">                var c = resultsAccordImage.GetPixel(x, y);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L44\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"44\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC44\" class=\"blob-code blob-code-inner js-file-line\">                colors[y * resultsAccordImage.Width + x] = new Color32(c.A,c.R, c.G, c.B); \/\/ colors are flipped in System.Drawing.Color<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L45\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"45\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC45\" class=\"blob-code blob-code-inner js-file-line\">            }<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L46\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"46\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC46\" class=\"blob-code blob-code-inner js-file-line\">        }<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L47\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"47\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC47\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L48\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"48\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC48\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ create new results texture from that color32 array<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L49\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"49\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC49\" class=\"blob-code blob-code-inner js-file-line\">        var targetTexture = new Texture2D(sourceTexture.width, sourceTexture.height, sourceTexture.format, false);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L50\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"50\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC50\" class=\"blob-code blob-code-inner js-file-line\">        targetTexture.SetPixels32(colors);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L51\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"51\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC51\" class=\"blob-code blob-code-inner js-file-line\">        targetTexture.Apply(false);<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L52\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"52\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC52\" class=\"blob-code blob-code-inner js-file-line\">\n<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L53\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"53\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC53\" class=\"blob-code blob-code-inner js-file-line\">        \/\/ assign it to another object<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L54\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"54\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC54\" class=\"blob-code blob-code-inner js-file-line\">        targetRenderer.material.mainTexture = targetTexture;<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L55\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"55\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC55\" class=\"blob-code blob-code-inner js-file-line\">    }<\/td>\n<\/tr>\n<tr>\n<td id=\"file-accordframeworktest-cs-L56\" class=\"blob-num js-line-number js-blob-rnum\" data-line-number=\"56\"><\/td>\n<td id=\"file-accordframeworktest-cs-LC56\" class=\"blob-code blob-code-inner js-file-line\">}<\/td>\n<\/tr>\n<\/table>\n<\/div><\/div>\n<\/p><\/div>\n<\/div><\/div>\n<div class=\"gist-meta\">\n        <a href=\"https:\/\/gist.github.com\/unitycoder\/963e7210d120c9435f1b022aa7386292\/raw\/803bf737523c57dea4ccd5464546d470739749b9\/AccordFrameworkTest.cs\" style=\"float:right\" class=\"Link--inTextBlock\">view raw<\/a><br \/>\n        <a href=\"https:\/\/gist.github.com\/unitycoder\/963e7210d120c9435f1b022aa7386292#file-accordframeworktest-cs\" class=\"Link--inTextBlock\"><br \/>\n          AccordFrameworkTest.cs<br \/>\n        <\/a><br \/>\n        hosted with &#10084; by <a class=\"Link--inTextBlock\" href=\"https:\/\/github.com\">GitHub<\/a>\n      <\/div>\n<\/p><\/div>\n<\/div>\n<p>Image#1: Scene setup screenshot<br \/>\n&#8211; Add 2 Quads with different materials (use Unlit\/Texture shader)<br \/>\n&#8211; Assign your source texture into QuadSource *Note: Texture importer settings must have [x] Read\/Write enabled<br \/>\n&#8211; Assign those 2 quads into the script (which you have in some gameobject in scene) and hit Play!<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"4417\" data-permalink=\"https:\/\/unitycoder.com\/blog\/2016\/11\/04\/using-accord-net-with-unity\/accord-net-unity-tutorial\/\" data-orig-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?fit=680%2C608&amp;ssl=1\" data-orig-size=\"680,608\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"accord-net-unity-tutorial\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?fit=300%2C268&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?fit=680%2C608&amp;ssl=1\" class=\"alignnone size-full wp-image-4417\" src=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?resize=680%2C608\" alt=\"accord-net-unity-tutorial\" width=\"680\" height=\"608\" srcset=\"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?w=680&amp;ssl=1 680w, https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-tutorial.jpg?resize=300%2C268&amp;ssl=1 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><em>*Main image: Using Gaussian filter from Accord.NET<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>While looking for Harris Corner Detection examples, without using openCV, founded this framework: &#8220;The Accord.NET Framework is a machine learning framework combined with audio and image processing libraries completely written in C#&#8221; Website: http:\/\/accord-framework.net Github: https:\/\/github.com\/accord-net\/framework *Note: There is updated tutorial here with images: https:\/\/github.com\/accord-net\/framework\/wiki\/Unity [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4418,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[420,3],"tags":[935,937,840,938,936,939],"class_list":["post-4416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","category-unity3d","tag-accord-net","tag-detection","tag-dll","tag-framework","tag-harris-feature","tag-machine-learning"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/unitycoder.com\/blog\/wp-content\/uploads\/2016\/11\/accord-net-unity-gaussian.jpg?fit=593%2C719&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p1KTaT-19e","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/4416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/comments?post=4416"}],"version-history":[{"count":2,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/4416\/revisions"}],"predecessor-version":[{"id":4609,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/posts\/4416\/revisions\/4609"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media\/4418"}],"wp:attachment":[{"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/media?parent=4416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/categories?post=4416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unitycoder.com\/blog\/wp-json\/wp\/v2\/tags?post=4416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}