В Xcode я пытаюсь предварительно обработать изображение перед отправкой в OCR'ing.Механизм OCR, Tesseract, обрабатывает изображения на основе библиотеки Leptonica.
Например: функция Leptonica pixConvertTo8 ("image.tif") ... есть способ "передать" необработанные данные изображенияиз UIImage -> PIX (см. pix.h из библиотеки leptonica) -> выполнить pixConvertTo8 () и обратно из PIX -> UImage - и это предпочтительно без сохранения его в файл для перехода - все в памяти.
- (void) processImage:(UIImage *) uiImage
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// preprocess UIImage here with fx: pixConvertTo8();
CGSize imageSize = [uiImage size];
int bytes_per_line = (int)CGImageGetBytesPerRow([uiImage CGImage]);
int bytes_per_pixel = (int)CGImageGetBitsPerPixel([uiImage CGImage]) / 8.0;
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider([uiImage CGImage]));
const UInt8 *imageData = CFDataGetBytePtr(data);
// this could take a while.
char* text = tess->TesseractRect(imageData,
bytes_per_pixel,
bytes_per_line,
0, 0,
imageSize.width, imageSize.height);