Как обработать несколько изображений одновременноC#

Место общения программистов C#
Ответить
Anonymous
 Как обработать несколько изображений одновременно

Сообщение Anonymous »

Я пытаюсь извлечь текст из изображения с помощью tesseract и заметил, что если разделить изображение на 9 меньших частей, система станет более точной, поэтому я пытаюсь обработать все 9 частей. изображения одновременно (параллельно), и я хотел это сделать так:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»