2015-03-04 4 views
2

Я работаю над проектом, который требует от меня ускорить процесс распознавания текста с помощью Tesseract. Я столкнулся с article, в котором говорилось, что Tesseract работает совместно с OpenCL, чтобы выгрузить некоторые из интенсивно вычислительных задач на доступные CPU или графические процессоры.
Есть ли качественное объяснение того, как «Tesseract использует OpenCL для выгрузки интенсивных вычислительных задач на параллельные ядра процессора или графические процессоры»?Как Tesseract использует OpenCL?

Ссылка на источник Тессеракта здесь https://code.google.com/p/tesseract-ocr/source/browse/#git%2Fopencl

ответ

1

Тессеракт является OCR, так что обнаружение картины/букв в изображении. Это грубо говоря обработка изображений, где каждый пиксель может вычисляться параллельно, поэтому очень хороший кандидат для GPU (OpenCL/CUDA/etc ..).

Как в деталях он используется, будет сложно понять, но в основном это перерабатывающая следующие вещи в OpenCL (а отпечатанный код профилирования):

composeRGBPixel: 0.073872 (w=1.2) 
HistogramRect: 0.121674 (w=2.4) 
ThresholdRectToPix: 0.050257 (w=4.5) 
getLineMasksMorph: 0.350409 (w=5.0) 

Так в основном, делают некоторые пиксели преобразование в GPU (очень эффективное), затем гистограмма и, наконец, пороговое изображение.

Код профилирования - это просто измерение времени, затрачиваемого каждым устройством OpenCL, и выбор лучшего. Возможны другие подходы.

После выбора лучшего устройства задача вычислительной нагрузки - задача устройства. В случае с GPU он будет использовать все ядра затенения (вычислительные ядра). В случае процессора он просто запускает пул потоков. Но OpenCL не будет работать с графическим процессором.

+0

Спасибо за ваш ответ. Моя цель - ускорить процесс распознавания текста с помощью Tesseract. Вместо отправки целого изображения в Tesseract я разделил изображение на несколько частей и использовал OpenCL для обработки этого в нескольких ядрах моего процессора или графического процессора. Смогу ли я получить ускорение? Или Tesseract уже насытил ядра GPU/CPU, используя OpenCL? –

+1

OpenCL насыщает ядра используемого устройства. В лучшем случае вы можете разделить обработку на нескольких устройствах (CPU и GPU). Но учитывая, что процессоры намного медленнее для задач OpenCL (скажем, от 10 до 1), я думаю, что накладные расходы на использование нескольких устройств (разделение, слияние и т. Д.) Не будут стоить того. – DarkZeros

+1

У вас есть предложения по улучшению скорости извлечения текста Tesseract? Прямо сейчас, в зависимости от размера изображения, оно занимает около 10-15 секунд на изображение. – Raghav