Начиная
Android
Raspberry Pi (Raspbian OS), Linux, Nvidia Jetson, Windows и другие
Получить помощь
Онлайн веб -демо на https://www.doubango.org/webapps/alpr/
Полная документация для SDK по адресу https://www.doubango.org/sdks/anpr/docs/
Поддерживаемые языки (API): C ++ , C# , Java и Python
Библиотека компьютерного зрения с открытым исходным кодом: https://github.com/doubangotelecom/compv
Ключевые слова: Image Enhancement for Night-Vision (IENV) , License Plate Recognition (LPR) , License Plate Country Identification (LPCI) , Vehicle Color Recognition (VCR) , Vehicle Make Model Recognition (VMMR) , Vehicle Body Style Recognition (VBSR) , Vehicle Direction Tracking (VDT) и Vehicle Speed Estimation (VSE)
Вы когда -нибудь видели двигатель ANPR/ALPR, основанный на глубоком обучении (автоматическое распознавание номера/номерного знака), работающий со скоростью 64 кадров в секунду на устройстве ARM за 99 долларов (Khadas Vim3, 720p видео разрешения)?
UltimatealPR - самая быстрая реализация ANPR/ALPR, которую вы найдете на рынке. Быть быстрым - важно, но точное, имеет решающее значение.
Мы используем современные методы глубокого обучения, чтобы предложить непревзойденную точность и точность. Для сравнения это #33 раза быстрее, чем OpenAlPR на Android. (См. Раздел «Конфликт» для получения дополнительной информации).
Нет необходимости в специальных или выделенных графических процессорах, все работает на процессоре с оптимизацией Neon Simd Arm , математическими операциями с фиксированной точкой и многопользованием. Это открывает двери для возможностей запуска полных решений (интеллектуальная транспортная система) на камеру, не запрашивая облако. Возможность запуска всех своих приложений на устройстве значительно снизит стоимость получения, развертывания и обслуживания таких систем. Пожалуйста, проверьте раздел решения на основе устройств и облачных решений для получения дополнительной информации о том, как это снизит стоимость.
Следующее видео показывает образец распознавания, работающий в Windows:
Код ускоряется на процессоре , графическом процессоре , VPU и FPGA , благодаря CUDA, NVIDIA TNESRORT и Intel OPENVINO.
В дополнение к распознаванию номерных знаков (LPR) мы поддерживаем улучшение изображений для ночного вида (IENV), идентификации страны номерной знак (LPCI), распознавания цвета транспортного средства (VCR), распознавания моделей автомобиля (VMMR), распознавания стиля корпуса транспортного средства (VBSR), отслеживания направления транспортного средства (VDT) и оценки скорости транспортного средства (VSE).
На высококлассных графических процессорах NVIDIA, таких как Tesla V100, частота кадров составляет 315 кадров в секунду, что означает 3,17 миллисекундного времени вывода . На высококлассных процессорах, таких как Intel Xeon, максимальная частота кадров может составлять до 237 кадров в секунду , благодаря OpenVino. На низких процессорах, таких как Raspberry Pi 4, средняя частота кадров составляет 12 кадров в секунду .
Не верьте нам на слово, приходите проверить нашу реализацию. Регистрация, лицензионный ключ или подключение к Интернету не требуется , просто клонируйте код и запустите кодирование/тестирование. Все работает на устройстве, данные не покидают ваш компьютер. Выпущенный здесь код поставляется со многими готовыми к использованию образцов для Android, Raspberry Pi, Linux и Windows, которые помогут вам легко начать.
Вы также можете проверить нашу онлайн-облачную реализацию ( регистрация не требуется ), чтобы проверить точность и точность, прежде чем начать играть с SDK.
Пожалуйста, проверьте полную документацию по адресу https://www.doubango.org/sdks/anpr/docs/
SDK работает на многих платформах и поставляется с поддержкой многих языков программирования, но следующие разделы сосредоточены на Android, Raspberry Pi, Linux и Windows.
Следующие разделы посвящены Android и Java API.
Исходный код поставляется с примерами Android Android: Bendal, VideoParallel, Videosequential и ImagesNAP.
Это приложение используется для проверки всего в порядке и работает так быстро, как и ожидалось. Информация о максимальной частоте кадров ( 237 кадров в секунду на Intel Xeon, 64FPS на Khadas VIM3 и 12 кадров в секунду на Raspberry Pi 4) может быть проверена с использованием этого приложения. Это открытый исходный код и не требует регистрации или лицензионного ключа.
Это приложение следует использовать в качестве справочного кода любым разработчиком, пытающимся добавить UltimatealPR в свои продукты. Он показывает, как обнаружить и распознавать номерные знаки в режиме реального времени, используя живой видеопоток с камеры. Пожалуйста, проверьте раздел «Параллель против последовательной обработки» для получения дополнительной информации о режиме Пареллеля.
То же, что и видеоопараллель, но работает в последовательном режиме, что означает медленнее. Это приложение предоставляется для облегчения сравнения режимов: параллельно и последовательно.
Это приложение считывает и отображает живой видеопоток с камеры, но распознает только изображение из потока по требованию.
Чтобы попробовать примеры приложений на Android:
Откройте Android Studio и выберите «Откройте существующий проект Android Studio»
Перейдите к Ultimatealpr-Sdk/Samples , выберите папку Android и нажмите OK
Выберите образец, который вы хотите попробовать (например, VideoParallel ) и нажмите « Запуск» . Убедитесь, что для лучшего опыта приобрести устройство в режиме ландшафта .
SDK распространяется как модуль Android Studio, и вы можете добавить его в качестве ссылки, или вы также можете создать его и добавить AAR в свой проект. Но самый простой способ добавить SDK к вашему проекту - прямое, включая источник.
В вашем build.gradle file добавить:
android {
# This is the block to add within "android { } " section
sourceSets {
main {
jniLibs . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/binaries/android/jniLibs' ]
java . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/java/android' ]
assets . srcDirs + = [ 'path-to-your-ultimateALPR-SDK/assets/models' ]
}
}
}Трудно потерять, когда вы пытаетесь использовать API, так как есть только 3 полезных функций: init, process и deinit.
API C ++ определяется здесь.
import org . doubango . ultimateAlpr . Sdk . ULTALPR_SDK_IMAGE_TYPE ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkEngine ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkParallelDeliveryCallback ;
import org . doubango . ultimateAlpr . Sdk . UltAlprSdkResult ;
final static String CONFIG = "{" +
" " debug_level " : " info " ," +
" " gpgpu_enabled " : true," +
" " openvino_enabled " : true," +
" " openvino_device " : " CPU " ," +
" " detect_minscore " : 0.1," +
" " detect_quantization_enabled " : true," +
" " pyramidal_search_enabled " : true," +
" " pyramidal_search_sensitivity " : 0.28," +
" " pyramidal_search_minscore " : 0.5," +
" " pyramidal_search_quantization_enabled " : true," +
" " klass_lpci_enabled " : true," +
" " klass_vcr_enabled " : true," +
" " klass_vmmr_enabled " : true," +
" " recogn_score_type " : " min " ," +
" " recogn_minscore " : 0.3," +
" " recogn_rectify_enabled " : false," +
" " recogn_quantization_enabled " : true" +
"}" ;
/**
* Parallel callback delivery function used to notify about new results.
* This callback will be called few milliseconds (before next frame is completely processed)
* after process function is called.
*/
static class MyUltAlprSdkParallelDeliveryCallback extends UltAlprSdkParallelDeliveryCallback {
@ Override
public void onNewResult ( UltAlprSdkResult result ) { }
}
final MyUltAlprSdkParallelDeliveryCallback mCallback = new MyUltAlprSdkParallelDeliveryCallback (); // set to null to disable parallel mode
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
// Initialize the engine
assert UltAlprSdkEngine . init (
getAssets (),
CONFIG ,
mCallback
). isOK ();
}
// Camera listener: https://developer.android.com/reference/android/media/ImageReader.OnImageAvailableListener
final ImageReader . OnImageAvailableListener mOnImageAvailableListener = new ImageReader . OnImageAvailableListener () {
@ Override
public void onImageAvailable ( ImageReader reader ) {
try {
final Image image = reader . acquireLatestImage ();
if ( image == null ) {
return ;
}
// ANPR/ALPR recognition
final Image . Plane [] planes = image . getPlanes ();
final UltAlprSdkResult result = UltAlprSdkEngine . process (
ULTALPR_SDK_IMAGE_TYPE . ULTALPR_SDK_IMAGE_TYPE_YUV420P ,
planes [ 0 ]. getBuffer (),
planes [ 1 ]. getBuffer (),
planes [ 2 ]. getBuffer (),
image . getWidth (),
image . getHeight (),
planes [ 0 ]. getRowStride (),
planes [ 1 ]. getRowStride (),
planes [ 2 ]. getRowStride (),
planes [ 1 ]. getPixelStride ()
);
assert result . isOK ();
image . close ();
} catch ( final Exception e ) {
e . printStackTrace ();
}
}
};
@ Override
public void onDestroy () {
// DeInitialize the engine
assert UltAlprSdkEngine . deInit (). isOK ();
super . onDestroy ();
}Опять же, пожалуйста, проверьте примеры приложений для Android, Raspberry Pi, Linux и Windows и полной документации для получения дополнительной информации.
Исходной код поставляется с примерами № 2 C ++: эталонный и распознаватель. Эти образцы приложений могут использоваться на всех поддерживаемых платформах: Android , Windows , Raspberry Pi , iOS , OSX , Linux ...
Это приложение используется для проверки всего в порядке и работает так быстро, как и ожидалось. Информация о максимальной частоте кадров ( 237 кадров в секунду на Intel Xeon, 47 кадров в секунду на Snapdragon 855, 152 кадры на Jetson NX, 64 кадров в Hkadas Vim3, 30 кадров в секунду на Jetson Nano и 12 кадров в секунду на Raspberry Pi 4), используя это приложение. Это открытый исходный код и не требует регистрации или лицензионного ключа.
Для получения дополнительной информации о том, как построить и запустить этот образец, проверьте образцы/C ++/Benchmark.
Это приложение командной строки, используемое для обнаружения и распознавания номерного знака от любого изображения JPEG/PNG/BMP.
Для получения дополнительной информации о том, как построить и запустить этот пример, проверьте:
API C ++ определяется по адресу https://www.doubango.org/sdks/anpr/docs/cpp-api.html.
# include < ultimateALPR-SDK-API-PUBLIC.h > // Include the API header file
// JSON configuration string
// More info at https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html
static const char * __jsonConfig =
" { "
" " debug_level " : " info " , "
" " debug_write_input_image_enabled " : false, "
" " debug_internal_data_path " : " . " , "
" "
" " num_threads " : -1, "
" " gpgpu_enabled " : true, "
" " openvino_enabled " : true, "
" " openvino_device " : " CPU " , "
" "
" " detect_roi " : [0, 0, 0, 0], "
" " detect_minscore " : 0.1, "
" "
" " pyramidal_search_enabled " : true, "
" " pyramidal_search_sensitivity " : 0.28, "
" " pyramidal_search_minscore " : 0.3, "
" " pyramidal_search_min_image_size_inpixels " : 800, "
" "
" " klass_lpci_enabled " : true, "
" " klass_vcr_enabled " : true, "
" " klass_vmm_enabled " : true, "
" "
" " recogn_minscore " : 0.3, "
" " recogn_score_type " : " min " "
" } " ;
// Local variable
UltAlprSdkResult result;
// Initialize the engine (should be done once)
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::init(
__jsonConfig
)).isOK());
// Processing (detection + recognition)
// Call this function for every video frame
const void * imageData = nullptr ;
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::process(
ULTMICR_SDK_IMAGE_TYPE_RGB24,
imageData,
imageWidth,
imageHeight
)).isOK());
// DeInit
// Call this function before exiting the app to free the allocate resources
// You must not call process() after calling this function
ULTALPR_SDK_ASSERT ((result = UltAlprSdkEngine::deInit()).isOK());Опять же, пожалуйста, проверьте примеры приложений для получения дополнительной информации о том, как использовать API.
Пожалуйста, проверьте нашу дискуссионную группу или учетную запись Twitter