C++ API
다른 모든 언어의 API는 SWIG를 사용하여 C++ 코드에서 생성됩니다 .이 문서를 기반으로 다른 언어의 API를 사용하는 것은 간단합니다. 유용한 기능이 3개뿐이기 때문입니다.
Java를 사용하는 Android용 샘플 코드는 여기에서 찾을 수 있습니다.
설명하는 헤더 파일은 https://github.com/DoubangoTelecom/ultimateALPR-SDK/blob/master/c++/ultimateALPR-SDK-API-PUBLIC.h에 정의되어 있습니다.
enum ultimateAlprSdk::ULTALPR_SDK_IMAGE_TYPE
enum ultimateAlprSdk::ULTALPR_SDK_IMAGE_TYPE
이미지 유형을 정의합니다.
값:
ULTALPR_SDK_IMAGE_TYPE_RGB24
각 픽셀은 3바이트로 저장됩니다. 각 채널(R, G, B)은 8비트 정밀도(256개의 가능한 값)로 저장됩니다. 픽셀이 패킹되는 방법은 다음과 같습니다.
const int pixel = (B & 0xff) << 16 | (G & 0xff) << 8 | (R & 0xff);
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_RGBA32
각 픽셀은 4바이트에 저장됩니다. 각 채널(R, G, B, A)은 8비트(1바이트)의 정밀도(256개의 가능한 값)로 저장됩니다. R 채널은 가장 낮은 메모리 주소에 저장되고 G, B, A 채널이 차례로 저장됩니다. Android를 사용하는 경우 ARGB_8888과 동일합니다. 픽셀이 패킹되는 방법은 다음과 같습니다.
const int pixel = (A & 0xff) << 24 | (B & 0xff) << 16 | (G & 0xff) << 8 | (R & 0xff);
다음부터 사용 가능: 2.1.0
ULTALPR_SDK_IMAGE_TYPE_BGRA32
각 픽셀은 4바이트에 저장됩니다. 각 채널(B, G, R, A)은 8비트(1바이트)의 정밀도(256개의 가능한 값)로 저장됩니다. B 채널은 가장 낮은 메모리 주소에 저장되고 G, R, A 채널이 차례로 저장됩니다. iOS를 사용하는 경우 kCVPixelFormatType_32BGRA와 동일합니다. 픽셀이 패킹되는 방법은 다음과 같습니다.
const int pixel = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
다음부터 사용 가능: 2.3.0
ULTALPR_SDK_IMAGE_TYPE_NV12
8비트 Y 샘플 평면과 8비트 2x2 서브샘플링된 색상 차이 샘플을 포함하는 인터리브 U/V 평면이 뒤따르는 YUV 4:2:0 이미지. 자세한 내용은 https://www.fourcc.org/pixel-format/yuv-nv12/에서 확인하세요.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_NV21
8비트 Y 샘플 평면과 8비트 2x2 서브샘플링된 크로마 샘플들을 포함하는 인터리브 V/U 평면이 뒤따르는 YUV 4:2:0 이미지. U와 V의 인터리브 순서가 반대로 된 것을 제외하고는 ULTALPR_SDK_IMAGE_TYPE_NV12와 동일합니다. 자세한 내용은 https://www.fourcc.org/pixel-format/yuv-nv21/에서 확인하세요.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_YUV420P
이러한 형식은 U 및 V 평면 순서가 반대라는 점을 제외하고 YV12와 동일합니다. 그것들은 NxM Y 평면 다음에 (N/2)x(M/2) U 및 V 평면으로 구성됩니다. 이것은 많은 소프트웨어 MPEG 코덱에서 선택되는 형식입니다. 자세한 내용은 https://www.fourcc.org/pixel-format/yuv-i420/에서 확인하세요.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_YVU420P
U와 V의 순서가 반대라는 점을 제외하고 ULTALPR_SDK_IMAGE_TYPE_YUV420P와 동일합니다. 자세한 내용은 https://www.fourcc.org/pixel-format/yuv-yv12/를 참조하세요.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_YUV422P
(N/2)x(M) V 및 U 평면이 뒤따르는 NxM Y 평면이 있는 YUV 4:2:2 이미지.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_YUV444P
NxM Y 평면 다음에 NxM V 및 U 평면이 있는 YUV 4:4:4 이미지.
사용 가능: 2.0.0
ULTALPR_SDK_IMAGE_TYPE_Y
단일 채널의 회색조 이미지(휘도만). 각 픽셀은 단일 바이트(8비트 Y 샘플)로 저장됩니다.
다음부터 사용 가능: 2.6.2
ULTALPR_SDK_IMAGE_TYPE_BGR24
각 픽셀은 3바이트에 저장됩니다. 각 채널(B, G, R)은 8비트(1바이트) 정밀도(256개의 가능한 값)로 저장됩니다. B 채널은 가장 낮은 메모리 주소에 저장되고 G 다음 R 채널이 뒤따릅니다. C#을 사용하는 경우 PixelFormat.Format24bppRgb와 동일합니다. 픽셀이 패킹되는 방법은 다음과 같습니다.
const int pixel = (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
다음부터 사용 가능: 2.8.0
class UltAlprSdkResult
초기화, 초기화 해제 및 처리 단계에서 엔진이 반환한 결과입니다.
Public Functions
int code() const
결과 코드입니다. 성공하면 0, 그렇지 않으면 0이 아닙니다.
const char*phrase() const
코드에 대한 간단한 설명입니다.
const char *json() const
번호판을 JSON 콘텐츠 문자열로 표현. 플레이트를 찾을 수 없는 경우 null일 수 있습니다.
const size_t numPlates()
상수 json 문자열의 번호판 수입니다. json 문자열을 파싱하지 않고 결과에 번호판이 포함되어 있는지 빠르게 확인할 수 있는 도우미 기능입니다.
const size_t numCars() const
json 문자열의 자동차 수입니다. json 문자열을 파싱하지 않고 결과에 자동차가 포함되어 있는지 빠르게 확인할 수 있는 도우미 함수입니다.
다음부터 사용 가능: 3.2.0
bool isOK() const
결과가 성공인지 여부입니다. 성공하면 true, 그렇지 않으면 false입니다.
class UltAlprSdkEngine
자동 번호/번호판 인식(ANPR/ALPR) 엔진.
Public Static Functions
static UltAlprSdkResult init(const char *jsonConfig = nullptr,
const UltAlprSdkParallelDeliveryCallback *parallelDeliveryCallback = nullptr)
엔진을 초기화합니다. 이 함수는 가장 먼저 호출해야 합니다.
Return
- 결과는 바로 위에서 class UltAlprSdkResult 형태로 반환된다.
매개변수
- jsonConfig: 옵션 항목(configuratin entries)이 포함된 JSON 문자열입니다. null일 수 있습니다. 자세한 정보는 https://www.doubango.org/SDKs/anpr/docs/Configuration_options.html 에서 보시기 바랍니다.
- parallelDeliveryCallback: 병렬 모드를 활성화하는 콜백 함수입니다. 병렬 모드 대신 순차를 사용하려면 null 값을 사용하십시오. 자세한 내용은 https://www.doubango.org/SDKs/anpr/docs/Parallel_versus_sequential_processing.html을 참조하세요.
static UltAlprSdkResult deInit()
엔진을 초기화 해제합니다. 이 함수는 마지막에 호출되어야 합니다. init 함수를 사용하여 할당된 모든 리소스를 할당 해제합니다.
Return
결과는 바로 위에서 class UltAlprSdkResult 형태로 반환된다.
static UltAlprSdkResult process(const ULTALPR_SDK_IMAGE_TYPEimageType,
const void *imageData, const size_t imageWidthInSamples,
const size_t imageHeightInSamples, const size_t imageStrideInSamples = 0,
const int imageExifOrientation = 1)
ANPR 감지 및 인식 작업을 수행합니다.
OpenCV를 사용하여 카메라 또는 RTSP 스트림에서 이미지를 캡처하는 경우 이 기능을 다음과 같이 사용할 수 있습니다.
VideoCapture cap(....);
while (1) {
Mat frame;
cap >> frame;
if (frame.empty()) {
break;
}
ULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::process(
ULTALPR_SDK_IMAGE_TYPE_BGR24,
frame.ptr(),
frame.size().width,
frame.size().height
)).isOK());
}
Return
결과는 위의 설명한 UltAlprSdkResult의 형태로 반환된다.
매개변수
imageType: 이미지 유형입니다.
imageData: 이미지 데이터에 대한 포인터입니다.
imageWidthInSamples: 샘플의 이미지 너비입니다.
imageHeightInSamples: 샘플의 이미지 높이입니다.
imageStrideInSamples: 샘플의 이미지 스트라이드입니다. 데이터가 스트라이드되지 않는 한 0이어야 합니다. imageExifOrientation: 이미지 EXIF/JPEG 방향입니다. [1, 8] 내에 있어야 합니다. 자세한 내용은
https://www.impulseadventure.com/photo/exif-orientation.html에서 확인하세요. 다음부터 사용 가능: 2.3.0.
static UltAlprSdkResult process(const ULTALPR_SDK_IMAGE_TYPE imageType, const void *yPtr,
const void *uPtr, const void *vPtr,
const size_t widthInSamples, const size_t heightInSamples,
const size_t yStrideInBytes, const size_t yStrideInBytes,
const size_t uStr )
ANPR 감지 및 인식 작업을 수행합니다.
FFmpeg를 사용하는 경우 함수는 다음과 같이 사용할 수 있습니다.
ULTALPR_SDK_ASSERT((result = UltAlprSdkEngine::process(
ULTALPR_SDK_IMAGE_TYPE_YUV420P,
frame->data[0], // Y
frame->data[1], // U
frame->data[2], // V
frame->width, // Width
frame->height, // Height
frame->linesize[0], // Y-stride
frame->linesize[1], // U-stride
frame->linesize[2] // V-stride
)).isOK());
Return
결과는 위의 설명한 UltAlprSdkResult의 형태로 반환된다.
매개변수
imageType: 이미지 유형입니다.
yPtr: Y(luma) 샘플의 시작에 대한 포인터입니다.
uPtr: U(크로마) 샘플의 시작에 대한 포인터입니다.
vPtr: V(크로마) 샘플의 시작에 대한 포인터입니다.
widthInSamples: 샘플의 이미지 너비입니다.
heightInSamples: 샘플의 이미지 높이입니다.
yStrideInBytes: Y(luma) 샘플에 대한 바이트 단위의 스트라이드.
uStrideInBytes: U(크로마) 샘플에 대한 바이트 단위의 스트라이드.
vStrideInBytes: V(크로마) 샘플에 대한 바이트 다위의 스트라이드입니다.
uvPixelStrideInBytes: UV(크로마) 샘플의 픽셀 스트라이드(바이트)입니다. 평면의 경우 1, 반평면 형식의 경우 2여야 합니다. 자동 감지를 위해 0으로 설정합니다.
exifOrientation: 이미지 EXIF/JPEG 방향. [1, 8] 내에 있어야 합니다. 자세한 내용은 https://www.impulseadventure.com/photo/exif-orientation.html에서 확인하세요. 다음부터 사용 가능: 2.3.0.
static UltAlprSdkResult requestRuntimeLicenseKey(const bool &rawInsteadOfJSON = false)
이 장치와 연결된 고유한 런타임 라이센스 키를 빌드합니다. 이 함수를 호출하기 전에 엔진을 초기화해야 합니다. 이 기능은 인터넷 연결이 필요하지 않습니다. 토큰을 얻으려면 런타임 키를 활성화해야 합니다. 활성화 절차는 https://www.doubango.org/SDKs/LicenseManager/docs/Activation_use_cases.html에 설명되어 있습니다.
Return
결과는 위의 설명한 UltAlprSdkResult의 형태로 반환된다.
매개변수
rawInsteadOfJSON: 런타임 키를 JSON 항목 대신 raw한 문자열로 출력할지 여부. JSON 대신 raw한 문자열을 요청하면 JSON 파서가 없는 애플리케이션에서 키를 추출하는 데 도움이 될 수 있습니다
원문
https://www.doubango.org/SDKs/anpr/docs/cpp-api.html
'인턴 > LPR(번호판 인식)' 카테고리의 다른 글
[Doubango/ultimateALPR/Docs] Improving the accuracy 번역 (0) | 2021.08.25 |
---|---|
[DoubangoTelecom/ultimateALPR-SDK/github] recognizer Readme.md 해석 (0) | 2021.07.26 |
[DoubangoTelecom] ultimateALPR SDK - Jetson.md 해석(Jetson과 Jetson_tftrt 차이) (0) | 2021.07.25 |
[Doubango-ultimateALPR-Docs] Parallel versus sequential processing 해석 (0) | 2021.07.19 |
[Doubango-ultimateALPR-Docs] Architecture overview 해석 (0) | 2021.07.16 |