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++; } } }
private void TrainLetter(ref int numberOfCharactersLeaned, ref int numberOfCharactersSkipped, BinaryOcrDb db, List <string> charactersLearned, string s, bool bold, bool italic) { Bitmap bmp = GenerateImageFromTextWithStyle(s, bold, italic); var nbmp = new NikseBitmap(bmp); nbmp.MakeTwoColor(280); var list = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, 10, false, false, 25); if (list.Count == 1) { var match = db.FindExactMatch(new BinaryOcrBitmap(list[0].NikseBitmap)); if (match < 0) { pictureBox1.Image = list[0].NikseBitmap.GetBitmap(); labelInfo.Refresh(); Application.DoEvents(); db.Add(new BinaryOcrBitmap(list[0].NikseBitmap, false, 0, s, 0, 0)); 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++; } } }
private void TrainLetter(ref int numberOfCharactersLearned, ref int numberOfCharactersSkipped, BinaryOcrDb db, string s, bool bold, bool italic) { var bmp = GenerateImageFromTextWithStyle("H " + s, bold, italic); var nbmp = new NikseBitmap(bmp); nbmp.MakeTwoColor(280); var list = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, 10, false, false, 25, false); if (list.Count == 3) { var item = list[2]; var bob = new BinaryOcrBitmap(item.NikseBitmap, italic, 0, s, item.X, item.Y); var match = db.FindExactMatch(bob); if (match < 0) { db.Add(bob); numberOfCharactersLearned++; bmp.Dispose(); } else { numberOfCharactersSkipped++; } } }
internal void Initialize(Bitmap bitmap, int pixelsIsSpace, bool rightToLeft, NOcrDb nOcrDb, VobSubOcr vobSubOcr, double unItalicFactor) { _bitmap = bitmap; var nbmp = new NikseBitmap(bitmap); nbmp.ReplaceNonWhiteWithTransparent(); bitmap = nbmp.GetBitmap(); _bitmap2 = bitmap; _nocrChars = nOcrDb.OcrCharacters; _matchList = new List <VobSubOcr.CompareMatch>(); _vobSubOcr = vobSubOcr; _unItalicFactor = unItalicFactor; int minLineHeight = 6; _imageList = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nbmp, pixelsIsSpace, rightToLeft, Configuration.Settings.VobSubOcr.TopToBottom, minLineHeight); // _imageList = NikseBitmapImageSplitter.SplitBitmapToLetters(nbmp, pixelsIsSpace, rightToLeft, Configuration.Settings.VobSubOcr.TopToBottom); int index = 0; while (index < _imageList.Count) { ImageSplitterItem item = _imageList[index]; if (item.NikseBitmap == null) { listBoxInspectItems.Items.Add(item.SpecialCharacter); _matchList.Add(null); } else { nbmp = item.NikseBitmap; nbmp.ReplaceNonWhiteWithTransparent(); item.Y += nbmp.CropTopTransparent(0); nbmp.CropTransparentSidesAndBottom(0, true); nbmp.ReplaceTransparentWith(Color.Black); //get nocr matches Nikse.SubtitleEdit.Forms.VobSubOcr.CompareMatch match = vobSubOcr.GetNOcrCompareMatchNew(item, nbmp, nOcrDb, _unItalicFactor, false, false); if (match == null) { listBoxInspectItems.Items.Add("?"); _matchList.Add(null); } else { listBoxInspectItems.Items.Add(match.Text); _matchList.Add(match); } } index++; } }
internal void Initialize(Bitmap bitmap, int pixelsIsSpace, bool rightToLeft, NOcrDb nOcrDb, VobSubOcr vobSubOcr, bool italic, int minLineHeight, bool deepSeek) { _bitmap = bitmap; var nikseBitmap = new NikseBitmap(bitmap); nikseBitmap.ReplaceNonWhiteWithTransparent(); _nOcrChars = nOcrDb.OcrCharacters; _nOcrDb = nOcrDb; _matchList = new List <VobSubOcr.CompareMatch>(); _imageList = NikseBitmapImageSplitter.SplitBitmapToLettersNew(nikseBitmap, pixelsIsSpace, rightToLeft, Configuration.Settings.VobSubOcr.TopToBottom, minLineHeight, false); int index = 0; _indexLookup = new Dictionary <int, int>(); while (index < _imageList.Count) { var item = _imageList[index]; if (item.NikseBitmap == null) { _indexLookup.Add(listBoxInspectItems.Items.Count, index); listBoxInspectItems.Items.Add(item.SpecialCharacter); _matchList.Add(null); } else { var match = vobSubOcr.GetNOcrCompareMatchNew(item, nikseBitmap, nOcrDb, italic, deepSeek, index, _imageList); if (match == null) { _indexLookup.Add(listBoxInspectItems.Items.Count, index); listBoxInspectItems.Items.Add("?"); _matchList.Add(null); } else { _indexLookup.Add(listBoxInspectItems.Items.Count, index); listBoxInspectItems.Items.Add(match.Text); _matchList.Add(match); if (match.ExpandCount > 0) { index += match.ExpandCount - 1; } } } index++; } }
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++; } } }
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++; } }