コード例 #1
0
        public RecognizedLetter Recognize(SnapshotLetter snapshotLetter, DatabaseManager databaseManager)
        {
            if (snapshotLetter.IsDark)
            {
                return(new RecognizedLetter(RecognitionLetterKind.Dark, "Dark", "", snapshotLetter));
            }
            List <LetterSample> letters = new List <LetterSample>();

            lock (databaseManager.DatabaseLock)
            {
                foreach (var sample in databaseManager.Database.OfType <LetterSample>())
                {
                    if (!sample.Scanned)
                    {
                        sample.ColorData = bot.PresageAndRecognize.SimplifyLetter(sample.Bitmap, new Rectangle(0, 0, sample.Bitmap.Width, sample.Bitmap.Height));
                        sample.Scanned   = true;
                    }
                    letters.Add(sample);
                }

                if (letters.Count > 0)
                {
                    LetterSample closestMatch = letters.MinBy(sample => bot.PresageAndRecognize.GetDistance(snapshotLetter.SimplifiedData, sample.ColorData));
                    int          distance     = bot.PresageAndRecognize.GetDistance(snapshotLetter.SimplifiedData, closestMatch.ColorData);
                    if (distance <= PresageAndRecognize.THRESHOLD_OF_DISTANCE_FOR_MATCH)
                    {
                        if (closestMatch.Kind == SampleKind.Known)
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.Letter, closestMatch.Letter.ToString(), distance.ToString(), snapshotLetter));
                        }
                        else if (closestMatch.Kind == SampleKind.BannedStone)
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.BannedLetter, "Banned", distance.ToString(), snapshotLetter));
                        }
                        else
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.RecognizedButUnassigned, "RbU" + closestMatch.Letter.ToString(), distance.ToString(), snapshotLetter));
                        }
                    }
                    else
                    {
                        if (closestMatch.Kind == SampleKind.Known)
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.UnknownLetter, "?" + closestMatch.Letter.ToString(), distance.ToString(), snapshotLetter));
                        }
                        else if (closestMatch.Kind == SampleKind.BannedStone)
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.UnknownLetter, "?Banned", distance.ToString(), snapshotLetter));
                        }
                        else
                        {
                            return(new RecognizedLetter(RecognitionLetterKind.UnknownLetter, "?RbU" + closestMatch.Letter.ToString(), distance.ToString(), snapshotLetter));
                        }
                    }
                }
                return(new RecognizedLetter(RecognitionLetterKind.UnknownLetter, "??", "no db", snapshotLetter));
            }
        }
コード例 #2
0
 internal void AddSingle(SnapshotLetter letter)
 {
     this.AddSingle(new LetterSample(letter));
 }
コード例 #3
0
 public RecognizedLetter(RecognitionLetterKind kind, string letter, string desc, SnapshotLetter snapshotLetter)
 {
     this.SnapshotLetter = snapshotLetter;
     this.Kind           = kind;
     this.DisplayTwoLine = letter + "\n" + desc;
     this.Letter         = letter;
 }
コード例 #4
0
ファイル: Sample.cs プロジェクト: Soothsilver/bookworm-bot
 public LetterSample(SnapshotLetter letter)
 {
     this.Bitmap = letter.Bitmap;
     this.Kind   = SampleKind.Unassigned;
 }