시작하기
기계적 인조 인간
Raspberry Pi (Raspbian OS), Linux, Nvidia Jetson, Windows 및 기타
도움을 받고 있습니다
https://www.doubango.org/webapps/alpr/ 온라인 웹 데모
https://www.doubango.org/sdks/anpr/docs/의 SDK에 대한 전체 문서
지원되는 언어 (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) 추적 (VDT) 및 Vehicle Speed Estimation (VSE) Vehicle Direction Tracking (VDT)
$ 99 팔 장치 (Khadas VIM3, 720p 비디오 해상도)에서 64fps 에서 실행되는 딥 러닝 기반 ANPR/ALPR (자동 번호/번호판 인식) 엔진을 본 적이 있습니까?
UlTimateALPR 은 시장에서 볼 수있는 가장 빠른 ANPR/ALPR 구현입니다. 빠르는 것은 중요하지만 정확한 것은 중요합니다.
우리는 최첨단 딥 러닝 기술을 사용하여 타의 추종을 불허하는 정확도와 정밀도를 제공합니다. 이에 비해 이것은 Android의 OpenAlpr 보다 33 배 빠릅니다 . (자세한 내용은 벤치 마크 섹션을 참조하십시오).
특수 또는 전용 GPU가 필요하지 않으며 SIMD ARM NEON 최적화, 고정점 수학 작업 및 멀티 스레딩으로 CPU에서 모든 것이 실행됩니다. 이것은 클라우드를 요청하지 않고 카메라에서 (지능형 운송 시스템) 솔루션을 완전히 실행할 가능성에 대한 문을 열어줍니다. 장치에서 모든 응용 프로그램을 실행할 수 있으면 이러한 시스템을 획득, 배포 및 유지 관리하는 데 드는 비용이 크게 낮아집니다 . 비용을 줄이는 방법에 대한 자세한 내용은 장치 기반 대 클라우드 기반 솔루션 섹션을 확인하십시오.
다음 비디오는 Windows에서 실행되는 인식기 샘플을 보여줍니다.
Cuda, Nvidia Tensorrt 및 Intel Openvino 덕분 에이 코드는 CPU , GPU , VPU 및 FPGA 에서 가속됩니다.
번호판 인식 (LPR) 외에도 야간 발전 (IENV), 번호판 국가 식별 (LPCI), 차량 색상 인식 (VMCR), 차량 메이크 모델 인식 (VBSR), 차량 방향 추적 (VDT) 및 차량 속도 추정 (VSE)에 대한 이미지 향상을 지원합니다.
Tesla V100과 같은 고급 NVIDIA GPU에서 프레임 속도는 315fps이므로 3.17 밀리 초 추론 시간을 의미합니다 . Intel Xeon과 같은 고급 CPU에서 OpenVino 덕분에 최대 프레임 속도는 최대 237fps 일 수 있습니다 . Raspberry Pi 4와 같은 저가형 CPU에서 평균 프레임 속도는 12fps입니다 .
우리의 말을 받아들이지 말고, 우리의 구현을 확인하십시오. 등록, 라이센스 키 또는 인터넷 연결이 필요하지 않으며 코드를 복제하고 코딩/테스트를 시작하십시오. 모든 것이 장치에서 실행되며 컴퓨터를 떠나는 데이터는 없습니다. 여기에서 발표 된 코드에는 Android, Raspberry Pi, Linux 및 Windows 용으로 많은 사용 가능한 샘플이 제공되어 쉽게 시작할 수 있습니다.
또한 온라인 클라우드 기반 구현 ( 등록 필요 없음 )을 확인하여 SDK와 함께 플레이하기 전에 정확성과 정밀도를 확인할 수 있습니다.
https://www.doubango.org/sdks/anpr/docs/에서 전체 문서를 확인하십시오.
SDK는 많은 플랫폼에서 작동하며 많은 프로그래밍 언어를 지원하지만 다음 섹션은 Android, Raspberry Pi, Linux 및 Windows에 중점을 둡니다.
다음 섹션은 Android 및 Java API에 관한 것입니다.
소스 코드에는 벤치 마크, VideoparAllel, VideoSeQuential 및 ImagesNap과 같은 #4 Android 샘플 응용 프로그램이 함께 제공됩니다.
이 응용 프로그램은 모든 것이 정상인지 확인하는 데 사용됩니다. 예상대로 빨리 실행됩니다. 최대 프레임 속도 (Intel Xeon의 237fps , Khadas Vim3의 64fps 및 Raspberry Pi 4의 12fps )에 대한 정보는이 응용 프로그램을 사용하여 확인할 수 있습니다. 오픈 소스이며 등록 또는 라이센스 키가 필요하지 않습니다.
이 응용 프로그램은 제품에 UltimatealPR을 추가하려는 모든 개발자가 참조 코드로 사용해야합니다. 카메라의 라이브 비디오 스트림을 사용하여 라이센스 플레이트를 실시간으로 감지하고 인식하는 방법을 보여줍니다. Parellel 모드에 대한 자세한 내용은 병렬 대 순차 처리 섹션을 확인하십시오.
videoparallel과 동일하지만 순차적 모드에서 작업하면 느리게됩니다. 이 응용 프로그램은 모드를 쉽게 비교하기 위해 제공됩니다 : 병렬 대 순차적.
이 응용 프로그램은 카메라에서 라이브 비디오 스트림을 읽고 표시하지만 주문형 스트림의 이미지 만 인식합니다.
Android의 샘플 응용 프로그램을 사용하려면 :
Android Studio를 열고 "기존 Android Studio Project 열기"를 선택하십시오.
Ultimatealpr-SDK/샘플 로 이동하여 Android 폴더를 선택하고 확인을 클릭하십시오.
시도하려는 샘플 (예 : VideoparAllel )을 선택하고 실행을 누릅니다. 더 나은 경험을 위해 조경 모드 에 장치를 갖추십시오.
SDK는 Android Studio 모듈로 배포되며 참조로 추가하거나이를 구축하여 프로젝트에 AAR을 추가 할 수 있습니다. 그러나 프로젝트에 SDK를 추가하는 가장 쉬운 방법은 소스를 직접 포함하는 것입니다.
build.gradle 파일 추가 : 추가 :
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' ]
}
}
}3 가지 유용한 기능이 있기 때문에 API를 사용하려고 할 때는 손실되기 어렵습니다 : Init, Process 및 Deinit.
C ++ API는 여기에 정의됩니다.
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 ...
이 응용 프로그램은 모든 것이 정상인지 확인하는 데 사용됩니다. 예상대로 빨리 실행됩니다. 최대 프레임 속도 (Intel Xeon의 237fps , Snapdragon 855의 47fps , Jetson NX의 152fps , Khadas Vim3의 64fps , Jetson Nano의 30fps 및 Raspberry Pi 4의 12fps 에 대한 정보는이 응용 프로그램을 사용하여 확인할 수 있습니다. 오픈 소스이며 등록 또는 라이센스 키가 필요하지 않습니다.
이 샘플을 구축하고 실행하는 방법에 대한 자세한 내용은 샘플/C ++/벤치 마크를 확인하십시오.
이것은 JPEG/PNG/BMP 이미지에서 번호판을 감지하고 인식하는 데 사용되는 명령 줄 응용 프로그램입니다.
이 샘플을 구축하고 실행하는 방법에 대한 자세한 내용은 다음을 확인하십시오.
C ++ API는 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 사용 방법에 대한 자세한 내용은 샘플 응용 프로그램을 확인하십시오.
토론 그룹 또는 트위터 계정을 확인하십시오