Пример #1
0
        private void RecognizeAndLoadPicture(Matrix recognizable)
        {
            Debug.WriteLine(recognizable.ToPrettyString());
            Bitmap[] sampleImages = bitmapFilePaths
                .Select(path => new Bitmap(path))
                .ToArray();
            Vector inputVector = recognizable.ToVectorByRows();

            int iterations = 0;
            bool okay = false;
            Perceptron perceptron = null;
            while (!okay)
            {
                perceptron = new Perceptron(
                    pixelsCount: inputVector.Length,
                    sampleAmmount: sampleImages.Length
                );

                perceptron.Teach(sampleImages, ref iterations);
                Debug.WriteLine("iterations: {0}", iterations);
                if (iterations > 10)
                {
                    okay = true;
                }
            }

            Vector result = perceptron.Recognize(inputVector);
            labelIterations.Text = iterations.ToString();

            Debug.WriteLine("Similarity:");
            Enumerable.Range(0, sampleImages.Length)
                .ToList()
                .ForEach(i => Debug.WriteLine("{0} -> {1}", i, result[i]));

            labelFirst.Text = (result[0] * 100).ToString("0.00") + "%";
            labelSecond.Text = (result[1] * 100).ToString("0.00") + "%";
            labelThird.Text = (result[2] * 100).ToString("0.00") + "%";

            progressBar1.Value = (int)(result[0] * 100);
            progressBar2.Value = (int)(result[1] * 100);
            progressBar3.Value = (int)(result[2] * 100);

            int resultIndex = result.ToList().IndexOf(result.Max()) + 1;
            labelRecognized.Text = resultIndex.ToString();
            Debug.WriteLine("resultIndex: {0}", resultIndex);
        }