Android: Извлечь текст из изображения

109
15

Я работаю над приложением, которому нужно преобразовать jpeg-изображение в текст, чтобы я мог идентифицировать текст, записанный на изображении. plz дайте мне руководство сделать это.

спросил(а) 2021-01-25T17:26:19+03:00 4 месяца, 4 недели назад
1
Решение
64

ЭКСТРАКТ ИЗ Создание приложения OCR с использованием Tesseract.


Примечание.. Эти инструкции предназначены для Android SDK r19 и Android NDK r7c. В 64-битном Ubuntu вам может потребоваться установить 32-битную библиотеку совместимости ia32-libs. Вам также понадобятся необходимые переменные PATH.


Загрузите источник или клонируйте этот git репозиторий. Этот проект содержит инструменты для компиляции библиотек Tesseract, Leptonica и JPEG для использования на Android. Он содержит проект библиотеки Android Eclipse, который предоставляет API-интерфейс Java для доступа к API-интерфейсам Tesseract и Leptonica изначально. Вам не нужен глаз - два кода, вы можете обойтись без него.


Создайте этот проект, используя эти команды (здесь tess-two - это каталог внутри tess-two - тот, который находится на том же уровне, что и tess-two-test):


cd <project-directory>/tess-two
ndk-build
android update project --path .
ant release

Теперь импортируйте проект как библиотеку в Eclipse.


File -> Import -> Existing Projects into workspace -> tess-two directory<code>. Right click the project, Android Tools -> Fix Project Properties. Right click -> Properties -> Android -> Check Is Library

Настройте проект на использование проекта tess-two в качестве проекта библиотеки:


Right click your project name -> Properties -> Android -> Library -> Add, and choose tess-two. 

Теперь вы готовы для OCR любого изображения, используя библиотеку.


Во-первых, нам нужно получить изображение. Для этого я нашел простой код для захвата изображения здесь. После того, как у нас есть растровое изображение, нам просто нужно выполнить OCR, что относительно легко. Обязательно исправьте тип вращения и изображения, сделав что-то вроде:


// _path = path to the image to be OCRed
ExifInterface exif = new ExifInterface(_path);
int exifOrientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);

int rotate = 0;

switch (exifOrientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
rotate = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
rotate = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
rotate = 270;
break;
}

if (rotate != 0) {
int w = bitmap.getWidth();
int h = bitmap.getHeight();

// Setting pre rotate
Matrix mtx = new Matrix();
mtx.preRotate(rotate);

// Rotating Bitmap & convert to ARGB_8888, required by tess
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false);
}
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);


Теперь у нас есть изображение в растровом изображении, и мы можем просто использовать TessBaseAPI для запуска OCR, например:


TessBaseAPI baseApi = new TessBaseAPI();
// DATA_PATH = Path to the storage
// lang = for which the language data exists, usually "eng"
baseApi.init(DATA_PATH, lang);
// Eg. baseApi.init("/mnt/sdcard/tesseract/tessdata/eng.traineddata", "eng");
baseApi.setImage(bitmap);
String recognizedText = baseApi.getUTF8Text();
baseApi.end();
(You can download the language files from [here][2] and put them in a directory on your device – manually or by code)

Теперь, когда вы получили текст OCRed в переменной authorizedText, вы можете делать почти что с ним - переводить, искать, что угодно! пс. Вы можете добавить поддержку различных языков, выбрав предпочтение, а затем загрузив требуемый файл данных языка из здесь. Вы даже можете поместить их в папку активов и скопировать их на SD-карту при запуске.


Устранение неполадок


    О обновлении PATH. Вам нужно обновить переменную PATH для работы команд, иначе вы увидите ошибку, не найденную командой. Для Android SDK добавьте расположение инструментов SDK и каталогов инструментов в переменную среды PATH. Для Android NDK используйте тот же процесс, чтобы добавить каталог android-ndk в переменную PATH.
    Maven-ising - проверьте сообщение Джеймсом Элси. Он также упоминает, что он без проблем работал над Windows.
    Вы также можете попробовать Ctrl + F на своей странице на этой странице, кто-то, возможно, уже столкнулся с ней и разместил решение в комментариях.

ответил(а) 2021-01-25T17:26:19+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема