1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/flaychuang-ID_Card_OCR

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Проектная документация

Данный проект основан на коде, доступном по ссылке: https://github.com/XieZhiFa/IdCardOC. На этой базе был заново создан интерфейс для распознавания, поддерживающий автоматическое сканирование, сканирование с помощью камеры и сканирование из галереи изображений. Поддерживается только вертикальный режим отображения.

Главная страница

Лицевая сторона удостоверения личности

Обратная сторона удостоверения личности

Инициализация в приложении

LibraryInitOCR.initOCR(context);

Вызов окна сканирования

Bundle bundle = new Bundle();
bundle.putBoolean("saveImage",
binding.saveImage.getSelectedItemPosition() == 0 ? true : false); //сохранение распознанного изображения
bundle.putBoolean("showSelect", true); //отображение выбора изображения
bundle.putBoolean("showCamera", true); //отображение камеры (для водительских прав лучше использовать камеру, а не выбор изображения)
bundle.putInt("requestCode", REQUEST_CODE); // requestCode
bundle.putInt("type", binding.type.getSelectedItemPosition()); //0 — удостоверение личности, 1 — водительские права
LibraryInitOCR.startScan(context, bundle);


//Если вы не хотите интегрировать aar, то можно вызвать окно сканирования через неявное намерение
boolean isSave = binding.tip.getVisibility() == View.GONE;
Intent intent = new Intent("com.msd.ocr.idcard.ICVideo");
intent.putExtra("saveImage",isSave);//сохранение изображения
intent.putExtra("showSelect",true);//отображение выбора изображения
bundle.putBoolean("showCamera", true);//отображение камеры
intent.addCategory(getPackageName());//вызов окна сканирования в демо-приложении
startActivityForResult(intent, REQUEST_CODE);


//Оба способа дают одинаковый результат. Однако при выборе изображения изображение профиля временно недоступно.

Результат распознавания

результат распознавания
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){
        String result = data.getStringExtra("OCRResult");
        try {
            JSONObject jo = new JSONObject(result);
            StringBuffer sb = new StringBuffer();
            sb.append(String.format("Лицевая сторона = %s\n", jo.opt("type")));
            sb.append(String.format("Имя = %s\n", jo.opt("name")));
            sb.append(String.format("Пол = %s\n", jo.opt("sex")));
            sb.append(String.format("Национальность = %s\n", jo.opt("folk")));
            sb.append(String.format("Дата рождения = %s\n", jo.opt("birt")));
            sb.append(String.format("Номер = %s\n", jo.opt("num")));
            sb.append(String.format("Адрес = %s\n", jo.opt("addr")));
            sb.append(String.format("Орган выдачи = %s\n", jo.opt("issue")));
            sb.append(String.format("Срок действия = %s\n", jo.opt("valid")));
            sb.append(String.format("Общее фото = %s\n", jo.opt("imgPath")));
            sb.append(String.format("Путь к изображению профиля = %s\n", jo.opt("headPath")));
            sb.append("\nПоля, относящиеся к водительским правам\n");
            sb.append(String.format("Страна = %s\n", jo.opt("nation")));
            sb.append(String.format("Начальная дата регистрации = %s\n", jo.opt("startTime")));
            sb.append(String.format("Тип транспортного средства = %s\n", jo.opt("drivingType")));
            sb.append(String.format("Срок действия регистрации = %s\n", jo.opt("registerDate")));
            binding.textview.setText(sb.toString());
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

Интеграция aar

Скопируйте файл aar в каталог libs, затем добавьте в build.gradle следующее:

android{
    repositories {
        flatDir {
            dirs 'libs'
        }
    }

    manifestPlaceholders = [
        //debug.keystore генерируется, для официального пакета необходимо создать новый.
        "OCR_API_KEY" : "26f1f6a0d4d7cb0dd0e9b28f4cedef83"    
    ]
    ndk {
        abiFilters 'armeabi', 'armeabi-v7a', 'x86'
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation (name: 'library-ocr-1.0.4-SNAPSHOT', ext: 'aar')

    //Для использования OCR aar пакета требуется зависимость от другого модуля
    implementation 'com.squareup.picasso:picasso:2.4.0'
implementation(name: 'library-multi-image-selector-1.0.5-SNAPSHOT', ext: 'aar')

自定义识别框方式集成

Если текущий интерфейс сканирования не может удовлетворить требованиям, вы можете самостоятельно разработать интерфейс предварительного просмотра камеры и использовать следующий API для распознавания.

//1. Инициализация в приложении
LibraryInitOCR.initOCR(context);

//2. Инициализация декодера
/**
 * Инициализирует декодер. Если необходимо сохранить изображение, необходимо запросить разрешение на чтение и запись SD-карты у системы.
 * @param context   Activity
 * @param handler   Используется для получения сообщений о декодировании
 * @param isSaveImage   Требуется ли сохранять изображение
 */
public static void initDecode(Context context, Handler handler, boolean isSaveImage)



//3. Начало декодирования
/**
 * Начинает декодирование. Передаёт данные предварительного просмотра с камеры сюда, onPreviewFrame(byte[] data, Camera camera).
 * @param rect  Объект рамки предварительного просмотра
 * @param previewWidth  Ширина предварительного просмотра интерфейса
 * @param previewHeight Высота предварительного просмотра интерфейса
 * @param data  Данные предварительного просмотра с камеры
 */
public static void decode(Rect rect, int previewWidth, int previewHeight, byte[] data)


/**
 * Распознаёт выбранное изображение удостоверения личности (обратите внимание, что разрешение на чтение и запись должно быть запрошено заранее).
 * @param filePath  Путь к файлу
 */
public static void decode(String filePath)


//4. Освобождение ресурсов в Activity onDestroy
/**
 * Освобождает ресурсы
 */
public static void closeDecode()



// Декодирование результатов через обработчик
switch (msg.what){
    //Декодирование успешно
    case LibraryInitOCR.DECODE_SUCCESS: {
        Intent intent = (Intent) msg.obj;
        String result = intent.getStringExtra("OCRResult");
        String headImg = intent.getStringExtra("headImg");
        String fullImg = intent.getStringExtra("fullImg");
        break;
    }

    // Декодирование не удалось
    case LibraryInitOCR.DECODE_FAIL:{
        break;
    }

    // Нет разрешения
    case LibraryInitOCR.DECODE_UNAUTHORIZED:{
        break;
    }

    // Предложение перефокусироваться
    case LibraryInitOCR.DECODE_AUTO_FOCUS:{
        break;
    }
}

Обфускация

#Исключение методов локального распознавания удостоверений личности
-keep class com.ym.idcard.reg.** {*;}
-keep class com.ym.ocr.img.** {*;}
-keep class hotcard.doc.reader.** {*;}
-keep class com.msd.ocr.idcard.LibraryInitOCR {*;}


-keepclassmembers class * {
    native <methods>;
}
-keepclasseswithmembernames class * {
    native <methods>;
}

Пример изображения удостоверения личности

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

Пример изображения удостоверения личности

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Код для основного распознавания основан на https://github.com/XieZhiFa/IdCardOCR. На этой основе был заново создан интерфейс распознавания с поддержкой автоматического сканирования, сканирования с помощью камеры и сканирования изображений из галереи. Поддерживается только вертикальный экран. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/flaychuang-ID_Card_OCR.git
git@api.gitlife.ru:oschina-mirror/flaychuang-ID_Card_OCR.git
oschina-mirror
flaychuang-ID_Card_OCR
flaychuang-ID_Card_OCR
master