Work on batch OCR cancel - thx guido-visser :)

Fix #7992
This commit is contained in:
Nikolaj Olsson 2024-03-14 18:36:22 +01:00
parent cf04f04957
commit 62b433ab6e
3 changed files with 31 additions and 18 deletions

View File

@ -133,6 +133,7 @@ namespace Nikse.SubtitleEdit.Forms
InitializeComponent(); InitializeComponent();
UiUtil.FixFonts(this); UiUtil.FixFonts(this);
Icon = (Icon)icon.Clone(); Icon = (Icon)icon.Clone();
DoubleBuffered = true;
_cancellationTokenSource = new CancellationTokenSource(); _cancellationTokenSource = new CancellationTokenSource();
progressBar1.Visible = false; progressBar1.Visible = false;
@ -1428,7 +1429,7 @@ namespace Nikse.SubtitleEdit.Forms
item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.Ocr + " " + progress; item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.Ocr + " " + progress;
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(vobSubs, idx.Palette, Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine); vobSubOcr.InitializeBatch(vobSubs, idx.Palette, Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine, _cancellationTokenSource.Token);
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
} }
@ -1481,7 +1482,7 @@ namespace Nikse.SubtitleEdit.Forms
item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.Ocr + " " + progress; item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.Ocr + " " + progress;
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine); vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine, _cancellationTokenSource.Token);
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
} }
@ -1525,7 +1526,7 @@ namespace Nikse.SubtitleEdit.Forms
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
//TODO: fix //TODO: fix
vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine); vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, track.Language, _ocrEngine, _cancellationTokenSource.Token);
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
} }
@ -1592,7 +1593,7 @@ namespace Nikse.SubtitleEdit.Forms
} }
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, _ocrLanguage, _ocrEngine); vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, _ocrLanguage, _ocrEngine, _cancellationTokenSource.Token);
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
} }
@ -1617,7 +1618,7 @@ namespace Nikse.SubtitleEdit.Forms
lastProgress = progress; lastProgress = progress;
} }
}; };
vobSubOcr.InitializeBatch(fileName, Configuration.Settings.VobSubOcr, false, _ocrEngine, _ocrLanguage); vobSubOcr.InitializeBatch(fileName, Configuration.Settings.VobSubOcr, false, _ocrEngine, _ocrLanguage, _cancellationTokenSource.Token);
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
} }
@ -1687,7 +1688,7 @@ namespace Nikse.SubtitleEdit.Forms
var language = programMapTableParser.GetSubtitleLanguage(id); var language = programMapTableParser.GetSubtitleLanguage(id);
language = string.IsNullOrEmpty(language) ? _ocrLanguage : language; language = string.IsNullOrEmpty(language) ? _ocrLanguage : language;
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(tsBinaryParagraphs, Configuration.Settings.VobSubOcr, fileName, false, language, _ocrEngine); vobSubOcr.InitializeBatch(tsBinaryParagraphs, Configuration.Settings.VobSubOcr, fileName, false, language, _ocrEngine, _cancellationTokenSource.Token);
subtitle = vobSubOcr.SubtitleFromOcr; subtitle = vobSubOcr.SubtitleFromOcr;
} }
@ -1852,6 +1853,10 @@ namespace Nikse.SubtitleEdit.Forms
{ {
item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.FilterSkipped; item.SubItems[3].Text = LanguageSettings.Current.BatchConvert.FilterSkipped;
} }
else if (_abort)
{
item.SubItems[3].Text = "Cancelled";
}
else else
{ {
if (binaryParagraphs.Count == 0) if (binaryParagraphs.Count == 0)

View File

@ -24,10 +24,12 @@ using System.Net;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml; using System.Xml;
using MessageBox = Nikse.SubtitleEdit.Forms.SeMsgBox.MessageBox; using MessageBox = Nikse.SubtitleEdit.Forms.SeMsgBox.MessageBox;
using Timer = System.Windows.Forms.Timer;
namespace Nikse.SubtitleEdit.Forms.Ocr namespace Nikse.SubtitleEdit.Forms.Ocr
{ {
@ -263,6 +265,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
private XmlDocument _compareDoc = new XmlDocument(); private XmlDocument _compareDoc = new XmlDocument();
private Point _manualOcrDialogPosition = new Point(-1, -1); private Point _manualOcrDialogPosition = new Point(-1, -1);
private volatile bool _abort; private volatile bool _abort;
private CancellationToken _cancellationToken = CancellationToken.None;
private int _selectedIndex = -1; private int _selectedIndex = -1;
private VobSubOcrSettings _vobSubOcrSettings; private VobSubOcrSettings _vobSubOcrSettings;
private bool _italicCheckedLast; private bool _italicCheckedLast;
@ -678,8 +681,9 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
comboBoxDictionaries.SelectedIndexChanged += comboBoxDictionaries_SelectedIndexChanged; comboBoxDictionaries.SelectedIndexChanged += comboBoxDictionaries_SelectedIndexChanged;
} }
internal void InitializeBatch(string vobSubFileName, VobSubOcrSettings vobSubOcrSettings, bool forcedOnly, string ocrEngine, string language = null) internal void InitializeBatch(string vobSubFileName, VobSubOcrSettings vobSubOcrSettings, bool forcedOnly, string ocrEngine, string language, CancellationToken cancellationToken)
{ {
_cancellationToken = cancellationToken;
Initialize(vobSubFileName, vobSubOcrSettings, null, true); Initialize(vobSubFileName, vobSubOcrSettings, null, true);
FormVobSubOcr_Shown(null, null); FormVobSubOcr_Shown(null, null);
checkBoxShowOnlyForced.Checked = forcedOnly; checkBoxShowOnlyForced.Checked = forcedOnly;
@ -768,7 +772,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_subtitle.Paragraphs[i].Text = text; _subtitle.Paragraphs[i].Text = text;
Application.DoEvents(); Application.DoEvents();
if (_abort) if (_abort || _cancellationToken.IsCancellationRequested)
{ {
SetButtonsEnabledAfterOcrDone(); SetButtonsEnabledAfterOcrDone();
return; return;
@ -872,13 +876,15 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
} }
} }
internal void InitializeBatch(IList<IBinaryParagraph> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language = null, string ocrEngine = null) internal void InitializeBatch(IList<IBinaryParagraph> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language, string ocrEngine, CancellationToken cancellationToken)
{ {
if (subtitles.Count == 0) if (subtitles.Count == 0)
{ {
return; return;
} }
_cancellationToken = cancellationToken;
if (subtitles.First() is TransportStreamSubtitle) if (subtitles.First() is TransportStreamSubtitle)
{ {
var tssList = new List<TransportStreamSubtitle>(); var tssList = new List<TransportStreamSubtitle>();
@ -922,13 +928,14 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
checkBoxNOcrDrawUnknownLetters.Checked = oldNOcrDrawText; checkBoxNOcrDrawUnknownLetters.Checked = oldNOcrDrawText;
} }
internal void InitializeBatch(List<BluRaySupParser.PcsData> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language = null, string ocrEngine = null) internal void InitializeBatch(List<BluRaySupParser.PcsData> subtitles, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language, string ocrEngine, CancellationToken cancellationToken)
{ {
Initialize(subtitles, vobSubOcrSettings, fileName); Initialize(subtitles, vobSubOcrSettings, fileName);
_ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract5 : _ocrMethodTesseract302; _ocrMethodIndex = Configuration.Settings.VobSubOcr.LastOcrMethod == "Tesseract4" ? _ocrMethodTesseract5 : _ocrMethodTesseract302;
var oldNOcrDrawText = checkBoxNOcrDrawUnknownLetters.Checked; var oldNOcrDrawText = checkBoxNOcrDrawUnknownLetters.Checked;
InitializeOcrEngineBatch(language, ocrEngine); InitializeOcrEngineBatch(language, ocrEngine);
_cancellationToken = cancellationToken;
checkBoxShowOnlyForced.Checked = forcedOnly; checkBoxShowOnlyForced.Checked = forcedOnly;
DoBatch(); DoBatch();
@ -958,11 +965,12 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
} }
} }
internal void InitializeBatch(List<VobSubMergedPack> vobSubMergedPackList, List<Color> palette, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language, string ocrEngine) internal void InitializeBatch(List<VobSubMergedPack> vobSubMergedPackList, List<Color> palette, VobSubOcrSettings vobSubOcrSettings, string fileName, bool forcedOnly, string language, string ocrEngine, CancellationToken cancellationToken)
{ {
Initialize(vobSubMergedPackList, palette, vobSubOcrSettings, language); Initialize(vobSubMergedPackList, palette, vobSubOcrSettings, language);
checkBoxShowOnlyForced.Checked = forcedOnly; checkBoxShowOnlyForced.Checked = forcedOnly;
InitializeOcrEngineBatch(language, ocrEngine); InitializeOcrEngineBatch(language, ocrEngine);
_cancellationToken = cancellationToken;
DoBatch(); DoBatch();
} }
@ -1058,7 +1066,7 @@ namespace Nikse.SubtitleEdit.Forms.Ocr
_subtitle.Paragraphs[i].Text = text; _subtitle.Paragraphs[i].Text = text;
Application.DoEvents(); Application.DoEvents();
if (_abort) if (_abort || _cancellationToken.IsCancellationRequested)
{ {
SetButtonsEnabledAfterOcrDone(); SetButtonsEnabledAfterOcrDone();
return; return;

View File

@ -575,7 +575,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(vobSubs, idx.Palette, Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine); vobSubOcr.InitializeBatch(vobSubs, idx.Palette, Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
@ -614,7 +614,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine); vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
@ -652,7 +652,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine); vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, lang, ocrEngine, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
} }
@ -988,7 +988,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, forcedOnly, ocrDb, ocrEngine); vobSubOcr.InitializeBatch(bluRaySubtitles, Configuration.Settings.VobSubOcr, fileName, forcedOnly, ocrDb, ocrEngine, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
_stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\""); _stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\"");
@ -1014,7 +1014,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
{ {
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.InitializeBatch(fileName, Configuration.Settings.VobSubOcr, forcedOnly, ocrEngine, ocrDb); vobSubOcr.InitializeBatch(fileName, Configuration.Settings.VobSubOcr, forcedOnly, ocrEngine, ocrDb, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
_stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\""); _stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\"");
@ -1423,7 +1423,7 @@ namespace Nikse.SubtitleEdit.Logic.CommandLineConvert
_stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}"); _stdOutWriter?.Write($"\r{LanguageSettings.Current.BatchConvert.Ocr} : {progress}");
}; };
vobSubOcr.FileName = Path.GetFileName(fileName); vobSubOcr.FileName = Path.GetFileName(fileName);
vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, null, ocrEngine); vobSubOcr.InitializeBatch(binaryParagraphs.Cast<IBinaryParagraph>().ToList(), Configuration.Settings.VobSubOcr, fileName, false, null, ocrEngine, CancellationToken.None);
_stdOutWriter?.WriteLine(); _stdOutWriter?.WriteLine();
sub = vobSubOcr.SubtitleFromOcr; sub = vobSubOcr.SubtitleFromOcr;
_stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\""); _stdOutWriter?.WriteLine($"Extracted subtitles from file \"{fileName}\"");