Add export images for external OCR in OCR window - thx cyzs233 :)

Fix #5761
This commit is contained in:
niksedk 2022-02-05 08:27:41 +01:00
parent 4deab7bca2
commit c9c05ab2d6
7 changed files with 145 additions and 36 deletions

View File

@ -59,6 +59,7 @@
* Some improvements for OCR fix engine - thx Janusz
* Add blank lines to Modify selection - thx OmrSi
* Allow for having a bd .sup file in spell check - thx cyzs233
* Export images (for external OCR) in OCR window - thx cyzs233
* FIXED:
* Fix bug in BD SUP reading w missing lines - thx peter-qgd
* Fix crash in "Set start and offset the rest" w original - thx hamilaci

View File

@ -2955,6 +2955,7 @@ Keep changes?</KeepChangesMessage>
<AlsoTrainBold>Also train bold</AlsoTrainBold>
<StartTraining>Start training</StartTraining>
<NowTraining>Now training font '{1}'. Total chars trained: {0:#,###,##0}, {2:#,###,##0} known</NowTraining>
<ImagesWithTimeCodesInFileName>Images with time codes in file name...</ImagesWithTimeCodesInFileName>
</VobSubOcr>
<VobSubOcrCharacter>
<Title>OCR - Manual image to text</Title>

View File

@ -34,6 +34,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
this.vobSubToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dOSTToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.finalCutProImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.imageWithTimeCodeInFileNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparatorImageCompare = new System.Windows.Forms.ToolStripSeparator();
this.toolStripMenuItemInspectNOcrMatches = new System.Windows.Forms.ToolStripMenuItem();
this.inspectImageCompareMatchesForCurrentImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -229,7 +230,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
this.toolStripSeparator3,
this.deleteToolStripMenuItem});
this.contextMenuStripListview.Name = "contextMenuStripListview";
this.contextMenuStripListview.Size = new System.Drawing.Size(306, 386);
this.contextMenuStripListview.Size = new System.Drawing.Size(306, 408);
this.contextMenuStripListview.Opening += new System.ComponentModel.CancelEventHandler(this.ContextMenuStripListviewOpening);
//
// normalToolStripMenuItem
@ -298,7 +299,8 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
this.bluraySupToolStripMenuItem,
this.vobSubToolStripMenuItem,
this.dOSTToolStripMenuItem,
this.finalCutProImageToolStripMenuItem});
this.finalCutProImageToolStripMenuItem,
this.imageWithTimeCodeInFileNameToolStripMenuItem});
this.toolStripMenuItemExport.Name = "toolStripMenuItemExport";
this.toolStripMenuItemExport.Size = new System.Drawing.Size(305, 22);
this.toolStripMenuItemExport.Text = "Export all images as...";
@ -306,38 +308,45 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
// bDNXMLToolStripMenuItem
//
this.bDNXMLToolStripMenuItem.Name = "bDNXMLToolStripMenuItem";
this.bDNXMLToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.bDNXMLToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.bDNXMLToolStripMenuItem.Text = "BDN XML...";
this.bDNXMLToolStripMenuItem.Click += new System.EventHandler(this.BDNXMLToolStripMenuItem_Click);
//
// bluraySupToolStripMenuItem
//
this.bluraySupToolStripMenuItem.Name = "bluraySupToolStripMenuItem";
this.bluraySupToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.bluraySupToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.bluraySupToolStripMenuItem.Text = "Blu-ray sup...";
this.bluraySupToolStripMenuItem.Click += new System.EventHandler(this.BluraySupToolStripMenuItem_Click);
//
// vobSubToolStripMenuItem
//
this.vobSubToolStripMenuItem.Name = "vobSubToolStripMenuItem";
this.vobSubToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.vobSubToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.vobSubToolStripMenuItem.Text = "VobSub...";
this.vobSubToolStripMenuItem.Click += new System.EventHandler(this.VobSubToolStripMenuItem_Click);
//
// dOSTToolStripMenuItem
//
this.dOSTToolStripMenuItem.Name = "dOSTToolStripMenuItem";
this.dOSTToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.dOSTToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.dOSTToolStripMenuItem.Text = "DOST...";
this.dOSTToolStripMenuItem.Click += new System.EventHandler(this.DOSTToolStripMenuItem_Click);
//
// finalCutProImageToolStripMenuItem
//
this.finalCutProImageToolStripMenuItem.Name = "finalCutProImageToolStripMenuItem";
this.finalCutProImageToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.finalCutProImageToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.finalCutProImageToolStripMenuItem.Text = "Final Cut Pro + image...";
this.finalCutProImageToolStripMenuItem.Click += new System.EventHandler(this.finalCutProImageToolStripMenuItem_Click);
//
// imageWithTimeCodeInFileNameToolStripMenuItem
//
this.imageWithTimeCodeInFileNameToolStripMenuItem.Name = "imageWithTimeCodeInFileNameToolStripMenuItem";
this.imageWithTimeCodeInFileNameToolStripMenuItem.Size = new System.Drawing.Size(268, 22);
this.imageWithTimeCodeInFileNameToolStripMenuItem.Text = "Images with time code in file name...";
this.imageWithTimeCodeInFileNameToolStripMenuItem.Click += new System.EventHandler(this.imageWithTimeCodeInFileNameToolStripMenuItem_Click);
//
// toolStripSeparatorImageCompare
//
this.toolStripSeparatorImageCompare.Name = "toolStripSeparatorImageCompare";
@ -1307,7 +1316,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
this.listBoxUnknownWords.HorizontalScrollbar = true;
this.listBoxUnknownWords.Location = new System.Drawing.Point(3, 3);
this.listBoxUnknownWords.Name = "listBoxUnknownWords";
this.listBoxUnknownWords.Size = new System.Drawing.Size(143, 149);
this.listBoxUnknownWords.Size = new System.Drawing.Size(143, 147);
this.listBoxUnknownWords.TabIndex = 40;
this.listBoxUnknownWords.SelectedIndexChanged += new System.EventHandler(this.ListBoxLogSelectedIndexChanged);
this.listBoxUnknownWords.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listBoxCopyToClipboard_KeyDown);
@ -1733,9 +1742,9 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
//
this.checkBoxUseTimeCodesFromIdx.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.checkBoxUseTimeCodesFromIdx.AutoSize = true;
this.checkBoxUseTimeCodesFromIdx.Location = new System.Drawing.Point(369, 295);
this.checkBoxUseTimeCodesFromIdx.Location = new System.Drawing.Point(335, 295);
this.checkBoxUseTimeCodesFromIdx.Name = "checkBoxUseTimeCodesFromIdx";
this.checkBoxUseTimeCodesFromIdx.Size = new System.Drawing.Size(152, 17);
this.checkBoxUseTimeCodesFromIdx.Size = new System.Drawing.Size(186, 17);
this.checkBoxUseTimeCodesFromIdx.TabIndex = 3;
this.checkBoxUseTimeCodesFromIdx.Text = "Use lines/time codes from .idx file";
this.checkBoxUseTimeCodesFromIdx.UseVisualStyleBackColor = true;
@ -1778,18 +1787,26 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
| System.Windows.Forms.AnchorStyles.Right)));
this.textBoxCurrentText.BackColor = System.Drawing.SystemColors.WindowFrame;
this.textBoxCurrentText.ContextMenuStrip = this.contextMenuStripTextBox;
this.textBoxCurrentText.CurrentLanguage = null;
this.textBoxCurrentText.CurrentLineIndex = 0;
this.textBoxCurrentText.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.textBoxCurrentText.HideSelection = true;
this.textBoxCurrentText.IsDictionaryDownloaded = true;
this.textBoxCurrentText.IsSpellCheckerInitialized = false;
this.textBoxCurrentText.IsSpellCheckRequested = false;
this.textBoxCurrentText.IsWrongWord = false;
this.textBoxCurrentText.LanguageChanged = false;
this.textBoxCurrentText.Location = new System.Drawing.Point(8, 214);
this.textBoxCurrentText.Multiline = true;
this.textBoxCurrentText.Name = "textBoxCurrentText";
this.textBoxCurrentText.Padding = new System.Windows.Forms.Padding(1);
this.textBoxCurrentText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
this.textBoxCurrentText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Both;
this.textBoxCurrentText.SelectedText = "";
this.textBoxCurrentText.SelectionLength = 0;
this.textBoxCurrentText.SelectionStart = 0;
this.textBoxCurrentText.Size = new System.Drawing.Size(354, 77);
this.textBoxCurrentText.TabIndex = 1;
this.textBoxCurrentText.TextBoxFont = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Bold);
this.textBoxCurrentText.TextChanged += new System.EventHandler(this.TextBoxCurrentTextTextChanged);
this.textBoxCurrentText.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxCurrentText_KeyDown);
//
@ -2146,5 +2163,6 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private System.Windows.Forms.ToolStripMenuItem boldToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem italicToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem underlineToolStripMenuItem1;
private System.Windows.Forms.ToolStripMenuItem imageWithTimeCodeInFileNameToolStripMenuItem;
}
}

View File

@ -366,7 +366,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private readonly int _ocrMethodBinaryImageCompare = -1;
private readonly int _ocrMethodTesseract302 = -1;
private readonly int _ocrMethodTesseract4 = -1;
private readonly int _ocrMethodTesseract5 = -1;
private readonly int _ocrMethodModi = -1;
private readonly int _ocrMethodNocr = -1;
@ -501,7 +501,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
{
_ocrMethodTesseract302 = comboBoxOcrMethod.Items.Add(string.Format(language.OcrViaTesseractVersionX, "3.02"));
}
_ocrMethodTesseract4 = comboBoxOcrMethod.Items.Add(string.Format(language.OcrViaTesseractVersionX, Tesseract5Version));
_ocrMethodTesseract5 = comboBoxOcrMethod.Items.Add(string.Format(language.OcrViaTesseractVersionX, Tesseract5Version));
if (_modiEnabled)
{
_ocrMethodModi = comboBoxOcrMethod.Items.Add(language.OcrViaModi);
@ -565,6 +565,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
vobSubToolStripMenuItem.Text = LanguageSettings.Current.Main.Menu.File.ExportVobSub;
bDNXMLToolStripMenuItem.Text = LanguageSettings.Current.Main.Menu.File.ExportBdnXml;
bluraySupToolStripMenuItem.Text = LanguageSettings.Current.Main.Menu.File.ExportBluRaySup;
imageWithTimeCodeInFileNameToolStripMenuItem.Text = language.ImagesWithTimeCodesInFileName;
toolStripMenuItemClearFixes.Text = LanguageSettings.Current.DvdSubRip.Clear;
toolStripMenuItemClearGuesses.Text = LanguageSettings.Current.DvdSubRip.Clear;
@ -654,7 +655,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
return;
}
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract4 : _ocrMethodTesseract302;
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract5 : _ocrMethodTesseract302;
if (language == null)
{
language = Configuration.Settings.VobSubOcr.TesseractLastLanguage;
@ -860,7 +861,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
internal void InitializeBatch(List<TransportStreamSubtitle> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language = null, string ocrEngine = null)
{
Initialize(subtitles, vobSubOcrSettings, fileName, language);
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract4 : _ocrMethodTesseract302;
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract5 : _ocrMethodTesseract302;
var oldNOcrDrawText = checkBoxNOcrDrawUnknownLetters.Checked;
if (ocrEngine?.ToLowerInvariant() == "nocr")
@ -891,7 +892,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
internal void InitializeBatch(List<BluRaySupParser.PcsData> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language = null, string ocrEngine = null)
{
Initialize(subtitles, vobSubOcrSettings, fileName);
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract4 : _ocrMethodTesseract302;
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract5 : _ocrMethodTesseract302;
var oldNOcrDrawText = checkBoxNOcrDrawUnknownLetters.Checked;
InitializeOcrEngineBatch(language, ocrEngine);
@ -946,12 +947,12 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
checkBoxPromptForUnknownWords.Checked = false;
int max = GetSubtitleCount();
if (_ocrMethodIndex != _ocrMethodTesseract4 && _ocrMethodIndex != _ocrMethodTesseract302 && _ocrMethodIndex != _ocrMethodNocr)
if (_ocrMethodIndex != _ocrMethodTesseract5 && _ocrMethodIndex != _ocrMethodTesseract302 && _ocrMethodIndex != _ocrMethodNocr)
{
_ocrMethodIndex = _ocrMethodTesseract302;
}
if (_ocrMethodIndex == _ocrMethodTesseract4 && _tesseractAsyncStrings == null)
if (_ocrMethodIndex == _ocrMethodTesseract5 && _tesseractAsyncStrings == null)
{
_tesseractAsyncStrings = new string[max];
_tesseractAsyncIndex = (int)numericUpDownStartNumber.Value + 5;
@ -1900,7 +1901,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
return null;
}
if (_ocrMethodIndex == _ocrMethodTesseract4 && !_fromMenuItem)
if (_ocrMethodIndex == _ocrMethodTesseract5 && !_fromMenuItem)
{
var nb = new NikseBitmap(returnBmp);
@ -5095,7 +5096,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
InitializeTopAlign();
if (_ocrMethodIndex == _ocrMethodTesseract302 || _ocrMethodIndex == _ocrMethodTesseract4)
if (_ocrMethodIndex == _ocrMethodTesseract302 || _ocrMethodIndex == _ocrMethodTesseract5)
{
labelStatus.Text = LanguageSettings.Current.General.PleaseWait;
_tesseractThreadRunner?.Cancel();
@ -5103,7 +5104,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_tesseractRunner = new TesseractRunner();
}
if (_ocrMethodIndex == _ocrMethodTesseract4 && comboBoxTesseractLanguages.Items.Count == 0)
if (_ocrMethodIndex == _ocrMethodTesseract5 && comboBoxTesseractLanguages.Items.Count == 0)
{
buttonGetTesseractDictionaries_Click(sender, e);
return;
@ -5124,7 +5125,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
int max = GetSubtitleCount();
if ((_ocrMethodIndex == _ocrMethodTesseract4 || _ocrMethodIndex == _ocrMethodTesseract302) &&
if ((_ocrMethodIndex == _ocrMethodTesseract5 || _ocrMethodIndex == _ocrMethodTesseract302) &&
_tesseractAsyncStrings == null)
{
_nOcrDb = null;
@ -5639,7 +5640,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private void mainOcrTimer_Tick(object sender, EventArgs e)
{
_mainOcrTimer.Stop();
bool done = _ocrMethodIndex == _ocrMethodTesseract4 || _ocrMethodIndex == _ocrMethodTesseract302 ? MainLoopTesseract(_mainOcrTimerMax, _mainOcrIndex) : MainLoop(_mainOcrTimerMax, _mainOcrIndex);
bool done = _ocrMethodIndex == _ocrMethodTesseract5 || _ocrMethodIndex == _ocrMethodTesseract302 ? MainLoopTesseract(_mainOcrTimerMax, _mainOcrIndex) : MainLoop(_mainOcrTimerMax, _mainOcrIndex);
if (done || _abort)
{
SetButtonsEnabledAfterOcrDone();
@ -5705,7 +5706,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
string pngFileName = Path.GetTempPath() + Guid.NewGuid() + ".png";
bmp.Save(pngFileName, System.Drawing.Imaging.ImageFormat.Png);
var result = _tesseractRunner.Run(language, psmMode, tesseractEngineMode.ToString(CultureInfo.InvariantCulture), pngFileName, _ocrMethodIndex != _ocrMethodTesseract4);
var result = _tesseractRunner.Run(language, psmMode, tesseractEngineMode.ToString(CultureInfo.InvariantCulture), pngFileName, _ocrMethodIndex != _ocrMethodTesseract5);
if (_tesseractRunner.TesseractErrors.Count <= 2 && !string.IsNullOrEmpty(_tesseractRunner.LastError))
{
MessageBox.Show(_tesseractRunner.LastError);
@ -5892,7 +5893,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
checkBoxTesseractFallback.Visible && checkBoxTesseractFallback.Checked)
{
var oldOcrMethodIndex = _ocrMethodIndex;
_ocrMethodIndex = _ocrMethodIndex == _ocrMethodTesseract4 ? _ocrMethodTesseract302 : _ocrMethodTesseract4;
_ocrMethodIndex = _ocrMethodIndex == _ocrMethodTesseract5 ? _ocrMethodTesseract302 : _ocrMethodTesseract5;
newUnfixedText = Tesseract3DoOcrViaExe(bitmap, _languageId, "6", _tesseractEngineMode); // 6 = Assume a single uniform block of text.
newText = _ocrFixEngine.FixOcrErrors(newUnfixedText, index, _lastLine, lastLastLine, true, GetAutoGuessLevel());
newWordsNotFound = _ocrFixEngine.CountUnknownWordsViaDictionary(newText, out correctWords);
@ -6003,7 +6004,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
correctWords = modiCorrectWords;
if (checkBoxAutoFixCommonErrors.Checked)
{
line = _ocrFixEngine.FixOcrErrors(line, index, _lastLine, lastLastLine,true, GetAutoGuessLevel());
line = _ocrFixEngine.FixOcrErrors(line, index, _lastLine, lastLastLine, true, GetAutoGuessLevel());
}
}
}
@ -7267,7 +7268,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
Configuration.Settings.VobSubOcr.TesseractLastLanguage = l;
LoadOcrFixEngine(string.Empty, string.Empty);
if (_ocrMethodIndex == _ocrMethodTesseract4)
if (_ocrMethodIndex == _ocrMethodTesseract5)
{
var ok = Configuration.IsRunningOnWindows &&
File.Exists(Path.Combine(Configuration.Tesseract302Directory, "tesseract.exe")) &&
@ -7297,7 +7298,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private void LoadOcrFixEngine(string threeLetterIsoLanguageName, string hunspellName)
{
if (_ocrMethodIndex != _ocrMethodTesseract4 && _ocrMethodIndex != _ocrMethodTesseract302)
if (_ocrMethodIndex != _ocrMethodTesseract5 && _ocrMethodIndex != _ocrMethodTesseract302)
{
try
{
@ -7326,7 +7327,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
string loadedDictionaryName = _ocrFixEngine.SpellCheckDictionaryName;
var found = false;
comboBoxDictionaries.SelectedIndexChanged -= comboBoxDictionaries_SelectedIndexChanged;
if (_ocrMethodIndex == _ocrMethodTesseract4 &&
if (_ocrMethodIndex == _ocrMethodTesseract5 &&
!string.IsNullOrEmpty(Configuration.Settings.VobSubOcr.LastTesseractSpellCheck) &&
Configuration.Settings.VobSubOcr.LastTesseractSpellCheck.Length > 1 &&
loadedDictionaryName.Length > 1 &&
@ -7374,7 +7375,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_binaryOcrDb = null;
_nOcrDb = null;
_ocrMethodIndex = comboBoxOcrMethod.SelectedIndex;
if (_ocrMethodIndex == _ocrMethodTesseract4)
if (_ocrMethodIndex == _ocrMethodTesseract5)
{
ResetTesseractThread();
InitializeTesseract();
@ -7852,7 +7853,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private void comboBoxDictionaries_SelectedIndexChanged(object sender, EventArgs e)
{
Configuration.Settings.General.SpellCheckLanguage = LanguageString;
if (_ocrMethodIndex == _ocrMethodTesseract4 || _ocrMethodIndex == _ocrMethodTesseract302)
if (_ocrMethodIndex == _ocrMethodTesseract5 || _ocrMethodIndex == _ocrMethodTesseract302)
{
Configuration.Settings.VobSubOcr.LastTesseractSpellCheck = LanguageString;
}
@ -7963,7 +7964,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
}
else if (Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" && comboBoxOcrMethod.Items.Count > _ocrMethodTesseract302)
{
comboBoxOcrMethod.SelectedIndex = _ocrMethodTesseract4;
comboBoxOcrMethod.SelectedIndex = _ocrMethodTesseract5;
}
else
{
@ -8436,7 +8437,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
}
}
if (_ocrMethodIndex == _ocrMethodTesseract4 || _ocrMethodTesseract4 == _ocrMethodTesseract302)
if (_ocrMethodIndex == _ocrMethodTesseract5 || _ocrMethodTesseract5 == _ocrMethodTesseract302)
{
Configuration.Settings.VobSubOcr.LastTesseractSpellCheck = LanguageString;
}
@ -8829,7 +8830,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_preprocessingSettings = temp;
_fromMenuItem = false;
if (_ocrMethodIndex == _ocrMethodTesseract4)
if (_ocrMethodIndex == _ocrMethodTesseract5)
{
var ps = new PreprocessingSettings
{
@ -9158,7 +9159,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
{
_transportStreamUseColor = checkBoxTransportStreamGetColorAndSplit.Checked;
if (_ocrMethodIndex == _ocrMethodTesseract4)
if (_ocrMethodIndex == _ocrMethodTesseract5)
{
_abort = true;
ResetTesseractThread();
@ -9837,5 +9838,88 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
SetTesseractLanguageFromLanguageString(languageString);
_importLanguageString = languageString;
}
private void imageWithTimeCodeInFileNameToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.Title = "Save images in folder";
saveFileDialog1.AddExtension = true;
saveFileDialog1.FileName = "Dummy";
saveFileDialog1.Filter = "PNG image|*.png|BMP image|*.bmp|GIF image|*.gif|TIFF image|*.tiff";
saveFileDialog1.FilterIndex = 0;
DialogResult result = saveFileDialog1.ShowDialog(this);
if (result != DialogResult.OK)
{
return;
}
var path = Path.GetDirectoryName(saveFileDialog1.FileName);
var oldOcrIndex = _ocrMethodIndex;
try
{
Cursor = Cursors.WaitCursor;
Application.DoEvents();
var ext = ".png";
var imageFormat = System.Drawing.Imaging.ImageFormat.Png;
if (saveFileDialog1.FilterIndex == 2)
{
ext = ".bmp";
imageFormat = System.Drawing.Imaging.ImageFormat.Bmp;
}
else if (saveFileDialog1.FilterIndex == 3)
{
ext = ".gif";
imageFormat = System.Drawing.Imaging.ImageFormat.Gif;
}
else if (saveFileDialog1.FilterIndex == 4)
{
ext = ".tiff";
imageFormat = System.Drawing.Imaging.ImageFormat.Tiff;
}
// force pre processing to be used
_fromMenuItem = false;
_ocrMethodIndex = _ocrMethodTesseract5;
if (_preprocessingSettings == null)
{
_preprocessingSettings = new PreprocessingSettings
{
BinaryImageCompareThreshold = Configuration.Settings.Tools.OcrTesseract4RgbThreshold,
InvertColors = _preprocessingSettings != null ? _preprocessingSettings.InvertColors : false,
CropTransparentColors = _preprocessingSettings != null ? _preprocessingSettings.CropTransparentColors : false,
};
}
SetButtonsStartOcr();
for (var i = 0; i < _subtitle.Paragraphs.Count; i++)
{
var bmp = GetSubtitleBitmap(i);
if (bmp == null)
{
continue;
}
// 0_00_01_042__0_00_03_919_01.jpeg
var p = _subtitle.Paragraphs[i];
var fileName = $"{p.StartTime.Hours}_{p.StartTime.Minutes:00}_{p.StartTime.Seconds:00}_{p.StartTime.Milliseconds:000}__" +
$"{p.EndTime.Hours}_{p.EndTime.Minutes:00}_{p.EndTime.Seconds:00}_{p.EndTime.Milliseconds:000}_{(i + 1):00}{ext}";
bmp.Save(Path.Combine(path, fileName), imageFormat);
bmp.Dispose();
Application.DoEvents();
}
}
finally
{
Cursor = Cursors.Default;
_ocrMethodIndex = oldOcrIndex;
SetButtonsEnabledAfterOcrDone();
}
var text = string.Format(LanguageSettings.Current.ExportPngXml.XImagesSavedInY, _subtitle.Paragraphs.Count, path);
using (var f = new ExportPngXmlDialogOpenFolder(text, path))
{
f.ShowDialog(this);
}
}
}
}

View File

@ -1686,7 +1686,7 @@ namespace Nikse.SubtitleEdit.Logic
ExportCheetahCap = "Cheetah CAP...",
ExportUltech130 = "Ultech caption...",
ExportCustomTextFormat = "Export custom text format...",
Exit = "E&xit"
Exit = "E&xit",
},
Edit = new LanguageStructure.Main.MainMenu.EditMenu
@ -3330,6 +3330,7 @@ Keep changes?",
AlsoTrainBold = "Also train bold",
StartTraining = "Start training",
NowTraining = "Now training font '{1}'. Total chars trained: {0:#,###,##0}, {2:#,###,##0} known",
ImagesWithTimeCodesInFileName = "Images with time codes in file name...",
};
VobSubOcrCharacter = new LanguageStructure.VobSubOcrCharacter

View File

@ -8086,6 +8086,9 @@ namespace Nikse.SubtitleEdit.Logic
case "VobSubOcr/NowTraining":
language.VobSubOcr.NowTraining = reader.Value;
break;
case "VobSubOcr/ImagesWithTimeCodesInFileName":
language.VobSubOcr.ImagesWithTimeCodesInFileName = reader.Value;
break;
case "VobSubOcrCharacter/Title":
language.VobSubOcrCharacter.Title = reader.Value;
break;

View File

@ -3177,6 +3177,7 @@
public string AlsoTrainBold { get; set; }
public string StartTraining { get; set; }
public string NowTraining { get; set; }
public string ImagesWithTimeCodesInFileName { get; set; }
}
public class VobSubOcrCharacter