Exemplo n.º 1
0
        public void TestNOcrSaveLoad()
        {
            string tempFileName = FileUtil.GetTempFileName(".nocr");
            var    db           = new NOcrDb(tempFileName);

            var nOcrChar = new NOcrChar("t");

            nOcrChar.ExpandCount = 0;
            nOcrChar.Italic      = false;
            nOcrChar.MarginTop   = 2;
            nOcrChar.Width       = 10;
            nOcrChar.Height      = 10;
            nOcrChar.LinesForeground.Add(new NOcrPoint(new Point(1, 1), new Point(2, 2)));
            nOcrChar.LinesBackground.Add(new NOcrPoint(new Point(3, 4), new Point(5, 6)));
            db.Add(nOcrChar);

            var nOcrChar2 = new NOcrChar("u");

            nOcrChar2.ExpandCount = 0;
            nOcrChar2.Italic      = false;
            nOcrChar2.MarginTop   = 3;
            nOcrChar2.Width       = 12;
            nOcrChar2.Height      = 12;
            nOcrChar2.LinesForeground.Add(new NOcrPoint(new Point(1, 1), new Point(2, 2)));
            nOcrChar2.LinesBackground.Add(new NOcrPoint(new Point(3, 4), new Point(5, 6)));
            db.Add(nOcrChar2);
            db.Save();

            db = new NOcrDb(tempFileName);
            Assert.IsTrue(db.OcrCharacters.Count == 2);

            Assert.IsTrue(db.OcrCharacters[0].Text == nOcrChar2.Text);
            Assert.IsTrue(db.OcrCharacters[0].Italic == nOcrChar2.Italic);
            Assert.IsTrue(db.OcrCharacters[0].MarginTop == nOcrChar2.MarginTop);
            Assert.IsTrue(db.OcrCharacters[0].LinesForeground.Count == nOcrChar2.LinesForeground.Count);
            Assert.IsTrue(db.OcrCharacters[0].LinesForeground[0].Start.X == nOcrChar2.LinesForeground[0].Start.X);
            Assert.IsTrue(db.OcrCharacters[0].LinesForeground[0].Start.Y == nOcrChar2.LinesForeground[0].Start.Y);
            Assert.IsTrue(db.OcrCharacters[0].LinesBackground.Count == nOcrChar2.LinesBackground.Count);
            Assert.IsTrue(db.OcrCharacters[0].LinesBackground[0].Start.X == nOcrChar2.LinesBackground[0].Start.X);
            Assert.IsTrue(db.OcrCharacters[0].LinesBackground[0].Start.Y == nOcrChar2.LinesBackground[0].Start.Y);

            Assert.IsTrue(db.OcrCharacters[1].Text == nOcrChar.Text);

            try
            {
                File.Delete(tempFileName);
            }
            catch
            {
            }
        }
Exemplo n.º 2
0
        private void TrainLetter(ref int numberOfCharactersLeaned, ref int numberOfCharactersSkipped, NOcrDb nOcrD, List <string> charactersLearned, string s, bool bold)
        {
            Bitmap bmp  = GenerateImageFromTextWithStyle(s, bold);
            var    nbmp = new NikseBitmap(bmp);

            nbmp.MakeTwoColor(280);
            var list = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, 10, false, false, 25);

            if (list.Count == 1)
            {
                NOcrChar match = nOcrD.GetMatch(list[0].NikseBitmap);
                if (match == null)
                {
                    pictureBox1.Image = list[0].NikseBitmap.GetBitmap();
                    this.Refresh();
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(100);

                    NOcrChar nOcrChar = new NOcrChar(s);
                    nOcrChar.Width  = list[0].NikseBitmap.Width;
                    nOcrChar.Height = list[0].NikseBitmap.Height;
                    VobSubOcrNOcrCharacter.GenerateLineSegments((int)numericUpDownSegmentsPerCharacter.Value, checkBoxVeryAccurate.Checked, nOcrChar, list[0].NikseBitmap);
                    nOcrD.Add(nOcrChar);

                    charactersLearned.Add(s);
                    numberOfCharactersLeaned++;
                    labelInfo.Text = string.Format("Now training font '{1}', total characters leaned is {0}, {2} skipped", numberOfCharactersLeaned, _subtitleFontName, numberOfCharactersSkipped);
                    bmp.Dispose();
                }
                else
                {
                    numberOfCharactersSkipped++;
                }
            }
        }
Exemplo n.º 3
0
        private int ImportCharacters(int importedCount, ref int notImportedCount, List <NOcrChar> newChars)
        {
            var oldChars = new List <NOcrChar>();

            oldChars.AddRange(_nOcrDb.OcrCharacters);
            oldChars.AddRange(_nOcrDb.OcrCharactersExpanded);

            foreach (var newChar in newChars)
            {
                bool found = false;

                foreach (var oldChar in oldChars)
                {
                    if (oldChar.Text == newChar.Text &&
                        oldChar.Width == newChar.Width &&
                        oldChar.Height == newChar.Height &&
                        oldChar.MarginTop == newChar.MarginTop &&
                        oldChar.ExpandCount == newChar.ExpandCount &&
                        oldChar.LinesForeground.Count == newChar.LinesForeground.Count &&
                        oldChar.LinesBackground.Count == newChar.LinesBackground.Count)
                    {
                        found = true;
                        for (int i = 0; i < oldChar.LinesForeground.Count; i++)
                        {
                            if (oldChar.LinesForeground[i].Start.X != newChar.LinesForeground[i].Start.X ||
                                oldChar.LinesForeground[i].Start.Y != newChar.LinesForeground[i].Start.Y ||
                                oldChar.LinesForeground[i].End.X != newChar.LinesForeground[i].End.X ||
                                oldChar.LinesForeground[i].End.Y != newChar.LinesForeground[i].End.Y)
                            {
                                found = false;
                            }
                        }

                        for (int i = 0; i < oldChar.LinesBackground.Count; i++)
                        {
                            if (oldChar.LinesBackground[i].Start.X != newChar.LinesBackground[i].Start.X ||
                                oldChar.LinesBackground[i].Start.Y != newChar.LinesBackground[i].Start.Y ||
                                oldChar.LinesBackground[i].End.X != newChar.LinesBackground[i].End.X ||
                                oldChar.LinesBackground[i].End.Y != newChar.LinesBackground[i].End.Y)
                            {
                                found = false;
                            }
                        }
                    }
                }

                if (!found)
                {
                    _nOcrDb.Add(newChar);
                    importedCount++;
                }
                else
                {
                    notImportedCount++;
                }
            }

            return(importedCount);
        }
Exemplo n.º 4
0
        private void addBetterMultiMatchToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (var form = new AddBetterMultiMatchNOcr())
            {
                var tempImageList = new List <ImageSplitterItem>();
                var idx           = _indexLookup[listBoxInspectItems.SelectedIndex];
                for (int i = idx; i < _imageList.Count; i++)
                {
                    tempImageList.Add(_imageList[i]);
                }

                var tempMatchList = new List <VobSubOcr.CompareMatch>();
                idx = listBoxInspectItems.SelectedIndex;
                for (int i = idx; i < _matchList.Count; i++)
                {
                    tempMatchList.Add(_matchList[i]);
                }

                form.Initialize(_bitmap, 0, tempMatchList, tempImageList);
                if (form.ShowDialog(this) == DialogResult.OK)
                {
                    using (var charForm = new VobSubOcrNOcrCharacter())
                    {
                        charForm.Initialize(_bitmap, form.ExpandItem, new Point(0, 0), form.ExpandItalic, false, false, form.ExpandText);
                        if (charForm.ShowDialog(this) == DialogResult.OK)
                        {
                            charForm.NOcrChar.ExpandCount = form.ExpandCount;
                            var expandList = tempImageList.Take(form.ExpandCount).ToList();
                            charForm.NOcrChar.MarginTop = expandList.First().Top - expandList.Min(p => p.Top);
                            _nOcrDb.Add(charForm.NOcrChar);
                            DialogResult = DialogResult.OK;
                            return;
                        }
                    }
                }

                DialogResult = DialogResult.Cancel;
            }
        }
Exemplo n.º 5
0
        private void TrainLetter(ref int numberOfCharactersLeaned, ref int numberOfCharactersSkipped, NOcrDb nOcrD, List <string> charactersLearned, string s, bool bold)
        {
            Bitmap bmp  = GenerateImageFromTextWithStyle("H   " + s, bold);
            var    nbmp = new NikseBitmap(bmp);

            nbmp.MakeTwoColor(280);
            nbmp.CropTop(0, Color.FromArgb(0, 0, 0, 0));
            var list = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, 10, false, false, 25);

            if (list.Count == 3)
            {
                var      item  = list[2];
                NOcrChar match = nOcrD.GetMatch(item.NikseBitmap, item.Top, false, false, 0);
                if (match == null || match.Text != s)
                {
                    labelInfo.Refresh();
                    Application.DoEvents();
                    NOcrChar nOcrChar = new NOcrChar(s)
                    {
                        Width     = item.NikseBitmap.Width,
                        Height    = item.NikseBitmap.Height,
                        MarginTop = item.Top,
                    };
                    VobSubOcrNOcrCharacter.GenerateLineSegments((int)numericUpDownSegmentsPerCharacter.Value, checkBoxVeryAccurate.Checked, nOcrChar, item.NikseBitmap);
                    nOcrD.Add(nOcrChar);

                    charactersLearned.Add(s);
                    numberOfCharactersLeaned++;
                    labelInfo.Text = string.Format("Now training font '{1}', total characters learned is {0:#,###,###}, {2:#,###,###} skipped", numberOfCharactersLeaned, _subtitleFontName, numberOfCharactersSkipped);
                    bmp.Dispose();
                }
                else
                {
                    numberOfCharactersSkipped++;
                }
            }
        }
Exemplo n.º 6
0
        private void TrainLetter(ref int numberOfCharactersLearned, ref int numberOfCharactersSkipped, NOcrDb nOcrD, string s, bool bold, bool italic, bool doubleLetter)
        {
            var bmp         = GenerateImageFromTextWithStyle("H   " + s, bold, italic);
            var nikseBitmap = new NikseBitmap(bmp);

            nikseBitmap.MakeTwoColor(280);
            nikseBitmap.CropTop(0, Color.FromArgb(0, 0, 0, 0));
            var list = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nikseBitmap, 10, false, false, 25, false);

            if (list.Count == 3)
            {
                var item  = list[2];
                var match = nOcrD.GetMatch(item.NikseBitmap, item.Top, false, 25);
                if (match == null || match.Text != s)
                {
                    labelInfo.Refresh();
                    Application.DoEvents();
                    var nOcrChar = new NOcrChar(s)
                    {
                        Width     = item.NikseBitmap.Width,
                        Height    = item.NikseBitmap.Height,
                        MarginTop = item.Top,
                        Italic    = italic,
                    };
                    VobSubOcrNOcrCharacter.GenerateLineSegments((int)numericUpDownSegmentsPerCharacter.Value + (doubleLetter ? 20 : 0), false, nOcrChar, item.NikseBitmap);
                    nOcrD.Add(nOcrChar);

                    numberOfCharactersLearned++;
                    labelInfo.Text = string.Format(Configuration.Settings.Language.VobSubOcr.NowTraining, numberOfCharactersLearned, _subtitleFontName, numberOfCharactersSkipped);
                    bmp.Dispose();
                }
                else
                {
                    numberOfCharactersSkipped++;
                }
            }
            else if (!doubleLetter)
            {
                if (list.Count == 4 && list[2].NikseBitmap != null && list[3].NikseBitmap != null)
                {
                    // e.g. quote (")
                    var expandItem = VobSubOcr.GetExpandedSelectionNew(nikseBitmap, new List <ImageSplitterItem> {
                        list[2], list[3]
                    });
                    var match = nOcrD.GetMatchExpanded(nikseBitmap, expandItem, 2, list);
                    if (match != null && match.Text == s)
                    {
                        numberOfCharactersSkipped++;
                        return;
                    }

                    var nOcrChar = new NOcrChar(s)
                    {
                        Width       = expandItem.NikseBitmap.Width,
                        Height      = expandItem.NikseBitmap.Height,
                        MarginTop   = expandItem.Top,
                        Italic      = italic,
                        ExpandCount = 2,
                    };
                    VobSubOcrNOcrCharacter.GenerateLineSegments((int)numericUpDownSegmentsPerCharacter.Value + 5, false, nOcrChar, expandItem.NikseBitmap);
                    nOcrD.Add(nOcrChar);
                    return;
                }

                if (list.Count == 5 && list[2].NikseBitmap != null && list[3].NikseBitmap != null && list[4].NikseBitmap != null)
                {
                    // e.g. "%"
                    var expandItem = VobSubOcr.GetExpandedSelectionNew(nikseBitmap, new List <ImageSplitterItem> {
                        list[2], list[3], list[4]
                    });
                    var match = nOcrD.GetMatchExpanded(nikseBitmap, expandItem, 2, list);
                    if (match != null && match.Text == s)
                    {
                        numberOfCharactersSkipped++;
                        return;
                    }

                    var nOcrChar = new NOcrChar(s)
                    {
                        Width       = expandItem.NikseBitmap.Width,
                        Height      = expandItem.NikseBitmap.Height,
                        MarginTop   = expandItem.Top,
                        Italic      = italic,
                        ExpandCount = 3,
                    };
                    nOcrD.Add(nOcrChar);
                    VobSubOcrNOcrCharacter.GenerateLineSegments((int)numericUpDownSegmentsPerCharacter.Value + 10, false, nOcrChar, expandItem.NikseBitmap);
                    return;
                }

                numberOfCharactersSkipped++;
            }
        }