[TesseractThreadRunner] Use new TesseractRunner for each ThreadPool thread

This commit is contained in:
Waldi Ravens 2019-12-02 08:13:00 +01:00
parent c5673defb1
commit a9b027ec16

View File

@ -8,20 +8,6 @@ namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract
{ {
public class TesseractThreadRunner public class TesseractThreadRunner
{ {
public delegate void OcrDone(int index, ImageJob job);
private readonly OcrDone _callback;
private readonly Queue<ImageJob> _jobQueue;
private static readonly object QueueLock = new object();
private readonly TesseractRunner _tesseractRunner;
private bool _abort;
public TesseractThreadRunner(OcrDone callback = null)
{
_jobQueue = new Queue<ImageJob>();
_callback = callback;
_tesseractRunner = new TesseractRunner();
}
public class ImageJob public class ImageJob
{ {
public string FileName { get; set; } public string FileName { get; set; }
@ -35,6 +21,19 @@ namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract
public Bitmap Bitmap { get; set; } public Bitmap Bitmap { get; set; }
} }
public delegate void OcrDone(int index, ImageJob job);
private static readonly object QueueLock = new object();
private readonly Queue<ImageJob> _jobQueue;
private readonly OcrDone _callback;
private bool _abort;
public TesseractThreadRunner(OcrDone callback = null)
{
_jobQueue = new Queue<ImageJob>();
_callback = callback;
}
private void DoOcr(object j) private void DoOcr(object j)
{ {
if (_abort) if (_abort)
@ -43,7 +42,7 @@ namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract
} }
var job = (ImageJob)j; var job = (ImageJob)j;
job.Result = _tesseractRunner.Run(job.LanguageCode, job.PsmMode, job.EngineMode, job.FileName, job.Run302); job.Result = new TesseractRunner().Run(job.LanguageCode, job.PsmMode, job.EngineMode, job.FileName, job.Run302);
lock (QueueLock) lock (QueueLock)
{ {
job.Completed = DateTime.UtcNow; job.Completed = DateTime.UtcNow;
@ -94,5 +93,6 @@ namespace Nikse.SubtitleEdit.Logic.Ocr.Tesseract
{ {
_abort = true; _abort = true;
} }
} }
} }