Код: Выделить всё
private static int GetImageText(Image src)
{
string[] words = { words-to-check };
List found = new();
string path = Environment.CurrentDirectory;
try
{
using (var engine = new TesseractEngine(path, "eng", EngineMode.LstmOnly))
{
Parallel.ForEach(CutUpImage(src), (img) =>
{
using (var ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
using (var loadedImg = Pix.LoadFromMemory(ms.ToArray()))
using (var page = engine.Process(loadedImg))
{
var c = page.GetText();
foreach (var word in words) if (c.Contains(word)) found.Add(word);
}
}
});
return found.Count;
}
}
catch (Exception ex)
{
throw ex;
}
}
но я получаю сообщение об ошибке (одновременно можно обработать только одно изображение.).
p>
Поэтому мне пришлось переместить новый TesseractEngine в цикл следующим образом:
Код: Выделить всё
private static int GetImageText(Image src)
{
string[] words = { words-to-check };
List found = new();
string path = Environment.CurrentDirectory;
Parallel.ForEach(CutUpImage(src), (img) =>
{
using (var engine = new TesseractEngine(path, "eng", EngineMode.LstmOnly))
{
using (var ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
using (var loadedImg = Pix.LoadFromMemory(ms.ToArray()))
using (var page = engine.Process(loadedImg))
{
var c = page.GetText();
foreach (var word in words) if (c.Contains(word)) found.Add(word);
}
}
}
});
return found.Count;
}
поэтому мой вопрос: как мне создать новый TesseractEngine работать вне цикла и, в более общем плане, как мне ускорить эту работу?
Подробнее здесь: https://stackoverflow.com/questions/746 ... es-at-once
Мобильная версия