Използвайте скенера MLKit на Android, за да сканирате като професионалист

  • MLKit ви позволява да сканирате кодове и да откривате обекти локално и бързо на Android.
  • Правилното задаване на формати, резолюция и опции подобрява точността и производителността.
  • Интеграцията с CameraX и съветите за оптимизация осигуряват безпроблемно изживяване в реално време.

Комплект за машинно обучение на Android

Чудили ли сте се някога как да внедрите разпознаване на баркодове или откриване на обекти в приложението си за Android, без да губите време за интегриране на външни библиотеки или да рискувате API-та на трети страни? Е, днес имате късмет, защото ще анализираме подробно как Използвайте MLKit скенера на Android, използвайки технологията за машинно обучение на Google директно от вашия мобилен телефон или таблет. Най-хубавото е, че не е нужно да сте експерт по изкуствен интелект или да имате предишен опит с ML модели, тъй като MLKit се грижи за работата на backend-а вместо вас и просто трябва да следвате няколко стъпки (и някои съвети, за които почти никой не говори, които ще намерите тук).

В тази статия ще разгледаме подробно всичко, което трябва да знаете за интегрирането и използването на MLKit скенера на Android: от минималните изисквания, през разликите между типовете интеграции, до това как да подготвите изображения за точни сканирания, до подробности за конфигурацията, примери за код, оптимизация за приложения в реално време и съвети за справяне със сложни случаи. Вземете си кафето и се настанете удобно, пътуването ще бъде дълго, но си заслужава: ето едно актуално, ясно и ясно ръководство.

Какво е MLKit и защо си струва да се използва за сканиране на Android?

Първо най-важното. MLKit Това е комплектът за машинно обучение, разработен от Google, който предоставя инструменти за изкуствено зрение, обработка на език, откриване на обекти и много други, директно в нашите мобилни приложения, както за Android, така и за iOS. В нашия случай ще се съсредоточим върху Android и по-конкретно върху функционалността за сканиране на баркодове и откриване на обекти.

Интегрирайте скенера MLKit Има наистина сочни предимства: не зависите от външни услуги, нито пък ви е необходима интернет връзка, защото машинното обучение работи на самото устройство; Можете да обработвате изображения в реално време и да получавате незабавно разпознаване на кодове или дори обекти; и освен това имате SDK, който често се актуализира и е поддържан от Google.

И какво може да се открие? Списъкът е доста изчерпателен: различни формати на баркодове, QR, PDF417, Aztec, Data Matrix и дори обекти и лица (въпреки че последните две са за тези, които искат да направят още нещо). Освен това, MLKit предлага API както за откриване, така и за проследяване, идеално, ако приложението ви работи с видео потоци или използва интензивно камерата.

OCR PDF
Свързана статия:
Най-добрите OCR приложения за Android

Първи стъпки: Основни изисквания и необходими зависимости

Скенер за документи MLKit

Преди да започнете, е важно да сте наясно с това, от което се нуждаете, без да се препъвате в основите. MLKit изисква поне Android API 21 (Android 5.0) или по-нова версия. Това означава, че във вашия файл build.gradle от нивото на модула, ще трябва да се уверите, че имате minSdkВерсия 21 или по.

Освен това, в зависимост от избрания от вас тип интеграция (повече за това по-късно), ще трябва да добавите определени зависимости. MLKit може да бъде интегриран по два начина:

  • Пакетна библиотека: Моделът на машинно обучение е вграден във вашето приложение, което добавя около 2,4 MB към APK файла, но гарантира, че сканирането ще бъде достъпно мигновено, без чакане или изтегляне, когато приложението бъде стартирано.
  • Необединена библиотека: Моделът се изтегля в реално време чрез Google Play Services, което добавя само 200KB към размера на APK файла, но може да означава, че при първото използване на скенера потребителят може да се наложи да изчака моделът да се изтегли.

Какви зависимости трябва да добавите?

В build.gradle на модула (например, приложение/build.gradle):

  • За пакетираната версия: implementation 'com.google.mlkit:barcode-scanning:17.3.0'
  • За неопакованата версия: implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1'

И в двата случая не забравяйте да включите хранилището на Google Maven в секцията Maven. buildscript y allprojects от вашия проект build.gradle.

Конфигуриране на скенера: формати, автоматично мащабиране и оптимизация

Следващата стъпка е да решите какви видове баркодове или обекти ще сканирате и да конфигурирате скенера си, за да бъде възможно най-ефективен. MLKit ви позволява да укажете точно кои формати трябва да търси, което може значително да увеличи скоростта на детектора. Например, ако се интересувате само от сканирайте QR кодове и Aztec, можете изрично да го ограничите.

Това се постига чрез създаване на обект Опции за скенер на баркодове и посочване на желаните формати. Пълният списък с поддържани формати включва, но не се ограничава до: Code 128, Code 39, Code 93, Codabar, EAN-13, EAN-8, ITF, UPC-A, UPC-E, QR, PDF417, Aztec и Data Matrix.

Ключът към първокласната производителност е не само ограничаването на форматите, но и използването на API възможности, като например:

  • активиране на всички потенциални баркодове(): Той показва всички открити кодове, дори тези, които не са могли да бъдат декодирани, което помага за постигане на по-добри резултати, ако потребителят приближи камерата.
  • Автоматично мащабиране: Започвайки с определени версии на модела/библиотеката, MLKit може автоматично да предложи мащабиране, когато открие, че кодовете са твърде далеч, за да бъдат прочетени. Това подобрява точността на сканиране и намалява броя на неуспешните опити.

Тази функция за автоматично мащабиране изисква обработка на обратното извикване Обратно повикване за Zoom, което трябва да имплементирате, за да регулирате коефициента на мащабиране на камерата според това, което предлага библиотеката. По този начин можете да се адаптирате към хардуера на всяко устройство и да подобрите четливостта на кодовете във всеки кадър.

Обработка на входното изображение: поддържани източници и ключови съображения

Комплект за машинно обучение (ML Kit) за разпознаване на лица

За да може детекторът да извърши своята магия, трябва да трансформирате изображението във формат, който MLKit разбира. Ето къде идва въпросът Входно изображение, универсалният клас, поддържан от API. Можете да го създадете от различни източници, в зависимост от това как получавате изображението:

  • медийно.Изображение: Например, заснето директно от камерата.
  • растерно изображение: Ако обработвате изображения в този формат в приложението.
  • Байтов буфер или байтов масив: Ако работите със сурови потоци или буфери.
  • URI на файла: Ако потребителят избере изображение директно от галерията.

Съответен трик: Ако използвате CameraX, класовете OnImageCapturedListener y Анализ на изображения.Анализатор Те вече автоматично изчисляват въртенето на изображението; просто трябва да го предадеш на InputImage.fromMediaImage(). Ако не, ще трябва ръчно да изчислите въртенето въз основа на ориентацията на сензора и състоянието на устройството (за да не получите обърнато изображение).

След като имате Входно изображение подготвено, остава само да го изпратите на скенера чрез метода process(image) и управлявайте резултата чрез слушатели на успех или грешка.

Изисквания и съвети за точни входни изображения

За да сте сигурни, че сканирането ви ще бъде успешно и няма да ви разочарова, има няколко неща, които трябва да имате предвид относно изображенията си:

  • Достатъчна резолюция: MLKit изисква всяка минимална единица от баркода да е поне 2 пиксела широка (и висока в двуизмерните кодове). Например, EAN-13 трябва да е с ширина поне 190 пиксела, а PDF417 може да се нуждае от повече от 1000 пиксела.
  • Фокус: Размазаното изображение проваля всеки опит за сканиране. Ако резултатът е посредствен, помолете потребителя да повтори заснемането.
  • оптимална резолюция: За повечето приложения се препоръчва използването на HD изображения (напр. 1280×720 или 1920×1080), за да се позволи сканиране от разстояние. Ако приложението ви изисква ниска латентност, можете да намалите резолюцията, стига кодът да заема по-голямата част от изображението.

Не забравяйте, че много плътните формати (като PDF417) изискват още по-висока резолюция. Освен това, в случай на Data Matrix, кодът трябва да пресече центъра на изображението, за да бъде открит, и се разпознава само един код на изображение.

Подробен пример за интеграция: реална стъпка по стъпка

След като основите са приключили, е време да се заемем с типична интеграция. Ето стъпките, които трябва да следвате, за да стартирате скенер за баркодове с MLKit на Android:

  1. Конфигуриране на зависимости в build.gradle (Както обясних по-рано, изберете пакетиран или непакетиран вариант в зависимост от това какво предпочитате за приложението си.)
  2. Подготовка на входното изображение (от Bitmap, media.Image, ByteArray… в зависимост от вашия поток).
  3. Конфигуриране на опциите за скенер на баркодове за ограничаване на форматите и увеличаване на скоростта.
  4. Вземете екземпляр на скенера: BarcodeScanning.getClient(options)
  5. Обработете изображението с метода „process“ и обработете резултатите в слушателя на успеха., където ще имате списък с обекти Баркод (по един за всеки открит код).
  6. Извлечете информацията: Всеки обект Barcode ви казва суровото съдържание на кода, неговия тип данни и дори ви дава координатите на ограничителната кутия, за да маркирате кода в изображението.

Всичко това се случва в реално време и на самото устройство, без изпращане на данни навън или зависимост от скоростта на мрежата.

Откриване и проследяване на обекти: Докъде стига MLKit?

Проследяване на обекти в MLKit

Комплектът на Google не е само за баркодове. Компонентът на откриване на обект (Object Detection and Tracking, ODT) ви позволява да намерите до пет обекта в изображение и да ги проследявате между видеокадрите. Идеален е за приложения, които искат да открояват продукти, хора или обекти в реално време.

Когато конфигурирате детектора, можете да решите дали искате:

  • Откриване и проследяване на множество обекти едновременно или просто най-подходящите.
  • Активиране на автоматично сортиране (например, идентифициране дали е храна, дреха, растение и др.)
  • Изберете режим „поток“ (анализ в реално време за видео) или режим „единично изображение“ (за снимки).

Ако използвате поток, на всеки обект се присвояват идентификатори за проследяване, за да се проследяват между кадрите. Можете да получите координати, етикети, индекси и ниво на доверие за всяко откриване. Въпреки това, за приложения в реално време се препоръчва да не активирате класификация или многократно откриване, ако целта ви е максимална скорост, тъй като те увеличават натоварването на обработката.

Как да свържете MLKit и CameraX: модерна и проста интеграция

В днешно време е нормално да се използва CameraX в новите приложения за Android. MLKit се интегрира безпроблемно с CameraX чрез интерфейса Анализ на изображения.Анализатор. Използване на класа MlKitAnalyzer, можете да получите кадрите, да ги предадете на MLKit детектори и да получите резултатите, вече трансформирани в координатната система PreviewView (идеално за наслагване на кутии и графики).

За да го стартирате и да работи:

  • Създайте списък с детектори на MLKit (напр. BarcodeScanner, ObjectDetector…)
  • Задайте целевата координатна система според вашия изглед (обикновено COORDINATE_SYSTEM_VIEW_REFERENCED)
  • Той предава подходящ Изпълнител и Потребител, които ще получат резултатите и ще нарисуват наслагвания, подчертавайки откритите кодове или обекти на екрана.

CameraX и MLKit работят чудесно заедно и ви позволяват да създавате визуализации в реално време само с няколко допълнителни реда. Освен това, CameraX обработва стабилно въртенето и формата на изображението, спестявайки ви много главоболия.

Оптимизация за приложения в реално време: максимална скорост и минимално забавяне

Голямото предизвикателство, когато искаме да сканираме или откриваме обекти в реално време, е да поддържаме плавна честота на кадрите и ниска латентност. За това:

  • Не заснемайте изображения с максимална естествена резолюция: Ограничете камерата до максимум 2 мегапиксела или дори по-малко, стига кодът да изглежда добре (това намалява латентността при обработка).
  • В приложения, които използват Камера или Камера2, не обработвайте всички кадри; Игнорирайте пристигащите, докато детекторът все още работи, като по този начин избегнете ненужни опашки.
  • Ако използвате CameraX, уверете се, че стратегията за обратно налягане е настроена на Анализ на изображения.СТРАТЕГИЯ_ЗАПАЗВАНЕ_САМО_НАСТОЯЩИ, за да обработите само най-новото изображение и да отхвърлите останалите автоматично.
  • Ако рисувате наслагвания или диаграми, изчакайте MLKit да върне резултата, преди да обновите изгледа, за да постигнете по-висока ефективност.
  • Използвайте оптимални формати: YUV_420_888 с Камера2, NV21 със стари API-та.

Друг често срещан съвет е да се уверите, че API-то, което използвате, правилно затваря прокситата на изображенията (ImageProxy.close()), когато приключите с всеки кадър, като по този начин избягвате изтичане на памет и натрупани забавяния.

Примерен код за интегриране на сканиране в реално приложение

За да ви дам по-добра представа, ето една типична (опростена) структура за това как бихте могли да имплементирате сканиране с MLKit в Android приложение (в Kotlin):


// Configuración de opciones del escáner
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(
        Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_EAN_13
    )
    .build()

// Instanciar el escáner
val scanner = BarcodeScanning.getClient(options)

// Crear el InputImage desde Bitmap, media.Image, etc.
val image = InputImage.fromBitmap(bitmap, rotationDegrees)

// Procesar la imagen
scanner.process(image)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val value = barcode.rawValue
            // Aquí haces lo que quieras con el valor
        }
    }
    .addOnFailureListener {
        // Gestiona errores
    }

Всеки път, когато бъде открит код, можете да прочетете неговата стойност, формат и анализираните данни. Ако искате да покажете кутията на екрана, използвайте координатите на ограничаващата кутия.

Отвъд баркодовете: разпознаване на текст и ориентири

Четец на баркодове MLKit

MLKit надхвърля сканирането на код. Можете да добавите разпознаване на текст (OCR), за да заснемате текст в изображения или снимки, или дори да внедрите разпознаване на известни забележителности (идеално за приложения за пътуване или информация).

Процесът е много подобен: добавяте съответните зависимости (com.google.mlkit:face-detection за лица, com.google.android.gms:play-services-mlkit-text-recognition за OCR и др.), подготвяте InputImage и го обработвате със съответния детектор. API за резултати ви позволява да получите достъп до разпознати данни (напр. намерени текстове, тяхната позиция и др.) и да ги наслагвате на екрана.

Практически съвети и често срещани грешки

Интегрирането на MLKit скенера е лесно, ако следвате препоръките, но ето няколко съвета, за да избегнете често срещани грешки:

  • Не забравяйте да проверите разрешенията за камерата и съхранението. ако приложението ви ги изисква.
  • Ако първия път, когато стартирате скенера с разопакования модел, той не върне никакви резултати, изчакайте моделът да завърши изтеглянето.
  • Когато работите с завъртени изображения, винаги проверявайте дали Входно изображение получавате правилната ротация. В противен случай кодовете ще изглеждат отрязани или няма да бъдат прочетени.
  • Измерете резолюцията на входното изображение и се уверете, че кодовете заемат достатъчно място: малките кодове във изображения с висока резолюция може да не бъдат разпознати.
  • Ако приложението ви ще сканира в реално време, тествайте на различни устройства и регулирайте резолюцията, докато намерите най-добрия баланс между скорост и точност.
  • За да наслагвате графики, използвайте класове като Преглед на CameraSource y Графично наслагване, наличен в примерите на Google за MLKit.

Реалният свят е пълен с неочаквани ситуации, така че добавяйте лог файлове, обработвайте грешки в слушателите и предоставяйте удобна за потребителя обратна връзка, когато сканирането се обърка.

Както видяхте в това ръководство, MLKit Това е един от най-универсалните и надеждни инструменти за интегриране на разширено сканиране в Android., както за професионални проекти, така и за по-експериментални приложения. С правилна настройка ще можете да идентифицирате и обработвате баркодове, обекти, текст и други в реално време и без усложнения, използвайки силата на машинното обучение на Google директно в джоба си. Ако отделите няколко минути, следвайки най-добрите практики и усъвършенствайки детайлите, потребителите ви ще го оценят и приложението ви ще бъде готово да се открои от конкуренцията.

4 приложения за отключване на PDF на Android
Свързана статия:
Най-добрите 4 приложения за отключване на PDF на Android