인턴/LPR(번호판 인식)

[Doubango/ultimateALPR/Docs] C++ API header 번역

용성군 2021. 8. 3. 14:25
728x90
반응형

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 형태로 반환된다.

매개변수

 

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

 

C++ API — ultimateALPR 3.3.0 documentation

Each pixel is stored on 4 bytes. Each channel (R, G, B, A) is stored with 8 bits (1 byte) of precision (256 possible values). The R channel is stored at the lowest memory address followed by G, B then A channels. If you’re using Android then, this is the

www.doubango.org

 

728x90
반응형