| English | 日本語 | 한국어 | Tiếng Việt |
응용 프로그램 개발 가이드
목차
1. 엔트리 포인트
모든 함수 원형은 아래와 같습니다.
#ifdef WIN32
#define TS_ANPR_ENTRY extern "C" __declspec(dllexport) const char* WINAPI
#else
#define TS_ANPR_ENTRY extern "C" const char*
#endif
장황해지지 않도록 이하는 TS_ANPR_ENTRY로 표기합니다.
1.1. anpr_initialize
라이브러리를 초기화 합니다. 라이브러리를 사용하기 위해 다른 함수보다 먼저 한 번 호출해야 합니다.
TS_ANPR_ENTRY anpr_initialize(const char* mode); // [IN] 라이브러리 동작 방식 설정
Parameters:
mode- 라이브러리 동작 방식을 지정하는 목적으로 사용 (기존
outputFormat에서 용도 확장) - 세미콜론(
;) 문자로 구분하여 여러 설정을 표현할 수 있음 (예:json;sync)
- 라이브러리 동작 방식을 지정하는 목적으로 사용 (기존
- 지정 가능한 항목
outputFormat:- 출력 데이터 형식
- 지원하는 데이터 형식:
text,json,yaml,xml,csv(기본값:text) outputFormat생략하고 간단히text,json으로 사용 가능# 파이썬 예제 # 다중 설정 err = anpr_initialize(b'json;sync')
sync:- 동기 모드로 실행 (쓰레드 lock을 걸고 호출한 순서대로 처리)
- 미리 생성된 고정 갯수의 쓰레드풀 형태가 아니고 쓰레드가 계속 새로 생성되는 구조의 응용 프로그램에서 호출하는 경우, 아래와 같은 오류 코드 발생시 사용을 고려할 수 있음
103: Too many workers라이브러리 호출 쓰레드 수가 한계를 초과한 경우 (최대 256개)104: Resource exhausted더 이상 자원을 할당할 수 없는 경우
- 복잡한 비동기 쓰레드 관리를 신경쓰지 않아도 되는 반면 쓰레드 락(lock)을 사용하는 방식이므로 병렬처리 성능은 다소 떨어질 수 있음
sync=true또는sync=false로 표현할 수 있으며, 간단히sync만 사용해도 됨 (지정안하면 기본값sync=false로 동작)# 파이썬 예제 # 동기 모드로 실행 err = anpr_initialize(b'sync')
minChar:- 번호인식이 성공하기 위한 최소 문자수를 지정
minChar를 지정하지 않거나0또는 음수 또는 숫자가 아니면 기본값4가 적용됨- 올바른 예:
minChar=5(5글자 이상 문자인식되야 번호인식 성공)# 파이썬 예제 # 5문자 이상인 경우만 번호인식 성공하도록 설정 err = anpr_initialize(b'minChar=5') - 잘못된 예:
minChar=0,minChar=-10,minChar=두글자(지정된 값은 무시되고 기본값4가 적용됨)
- 올바른 예:
country:- 번호인식 모델의 국가를 지정
- 사용 예:
country=JP(일본 번호판용으로 설정)
- 사용 예:
- 가용한 국가 코드:
KR: 대한민국 번호판JP: 일본 번호판VN: 베트남 번호판# 파이썬 예제 # 국가 지정 방법 err = anpr_initialize(b'country=KR') # 한국 번호판 (기본값) err = anpr_initialize(b'country=JP') # 일본 번호판 err = anpr_initialize(b'country=VN') # 베트남 번호판
- 무료 평가판인 경우는 응용 프로그램에서 국가 코드를 지정할 수 있지만 상용 라이선스의 경우는 구매한 라이선스에 의해 결정됨
- 번호인식 모델의 국가를 지정
symbol: (일본 번호판 전용)- 일본 번호판에 포함되는
·,-문자 출력 방식을 지정none:·,-문자를 모두 출력하지 않음 (기본값)zero:·문자를0으로 출력,-문자는 출력하지 않음dot:·문자를 그대로 출력,-문자는 출력하지 않음full:·,-문자 모두 그대로 출력# 파이썬 예제 # ·, - 문자 모두 그대로 출력 err = anpr_initialize(b'symbol=full')
- 일본 번호판에 포함되는
Return value:
- 정상 처리된 경우 빈 텍스트
NULL terminated string (0x00)을 반환합니다. - 오류가 발생한 경우는
mode의outputFormat으로 지정한 데이터 형식의 문자열(utf-8 인코딩)로 오류 내용을 반환합니다.
1.2. anpr_read_file
이미지 파일에서 차량 번호를 인식합니다.
TS_ANPR_ENTRY anpr_read_file(
const char* imgFileName, // [IN] 입력 이미지 파일명
const char* outputFormat, // [IN] 출력 데이터 형식
const char* options); // [IN] 기능 옵션
Parameters:
imgFileName:- 입력 이미지 파일명 (utf-8 인코딩)
- 지원하는 이미지 파일 형식:
bmp,jpg,png,pnm,pbm,pgm,ppm,jfif,webp
outputFormat:- 출력 데이터 형식
- 지원하는 데이터 형식:
text,json,yaml,xml,csv(기본값:text) - 객체 인식 옵션을 사용할 경우
text는csv로 출력됩니다.
options:- 번호 인식 알고리즘의 옵션을 지정합니다. (참고: 2. Options)
Return value:
outputFormat에 지정한 데이터 형식의 문자열(utf-8 인코딩)로 번호 인식 결과를 반환합니다.- 사용한
options이 번호인식과 객체인식 계열에 따라outputFormat형식이 이원화되어 있습니다. (참고: 3. Output Format)# 파이썬 예제 result = anpr_read_file(b'input-image.jpg', b'json', b'vms') if len(result) > 0: print(result.decode('utf8'))
Remarks:
Return value에 사용되는 문자열 버퍼는 라이브러리 내부에서 관리되며 응용 프로그램에서는 문자열 버퍼를 참조하기만 하면 됩니다.- 이 문자열 버퍼는 thread-safe하며 각 thread 별로 다음 호출 전까지 결과 값이 유지됩니다.
- 참고 사이트
- https://docs.microsoft.com/ko-kr/windows/win32/medfound/image-stride
- https://docs.microsoft.com/ko-kr/windows/win32/medfound/video-fourccs
1.3. anpr_read_pixels
로딩된 이미지의 메모리 버퍼에서 차량 번호를 인식합니다.
TS-ANPR v2.3.0부터는 인코딩된 이미지를 지원합니다.
TS_ANPR_ENTRY anpr_read_pixels(
const unsigned char* pixels, // [IN] 이미지 픽셀 시작 주소
const unsigned long width, // [IN] 이미지 가로 픽셀 수
const unsigned long height, // [IN] 이미지 세로 픽셀 수
const long stride, // [IN] 이미지 한 라인의 바이트 수
const char* pixelFormat, // [IN] 이미지 픽셀 형식
const char* outputFormat, // [IN] 출력 데이터 형식
const char* options); // [IN] 기능 옵션
Parameters:
pixels:- 이미지 픽셀 시작 주소
width:- 이미지 가로 픽셀 수
- 인코딩된 이미지인 경우 총 바이트 수
height:- 이미지 세로 픽셀 수
- 인코딩된 이미지인 경우 사용안함 (기본값
0으로 지정)
stride:- 이미지 한 라인의 바이트 수 (
0이면 padding영역이 없는 것으로 간주하고 자동 계산) - 인코딩된 이미지인 경우 사용안함 (기본값
0으로 지정)
- 이미지 한 라인의 바이트 수 (
pixelFormat:- 이미지 픽셀 포멧
- 지원하는 픽셀 포멧:
GRAY: 흑백 이미지 (8bpp)BGRA: BGRA (32bpp)RGBA: RGBA (32bpp)RGB: RGB (24bpp)BGR: BGR (24bpp)BGR555: BGR (16bpp)BGR565: BGR (16bpp)HSV: HSV (32bpp)YCrCb: YUV444 (32bpp)I420: YUV420 (12bpp)YV12: YUV420 (12bpp)IYUV: YUV420 (12bpp)NV12: YUV420 (12bpp)NV21: YUV420 (12bpp)
- 지원하는 이미지 인코딩 형식
bmp,jpg,jpeg,png,pnm,pbm,pgm,ppm,jfif,webpencoded로 지정하면 이미지 형식 자동 인식
outputFormat: (anpr_read_file과 동일)options: (anpr_read_file과 동일)
Return value: (anpr_read_file과 동일)
Remarks: (anpr_read_file과 동일)
# 파이썬 예제
# 비디오 프레임을 입력
ret, frame = capture.read()
height = frame.shape[0]
width = frame.shape[1]
result = anpr_read_pixels(bytes(frame), width, height, 0, b'BGR', b'json', b'vms')
if len(result) > 0:
print(result.decode('utf8'))
# 웹사이트의 이미지를 입력
response = requests.get('https://example.com/image.jpg')
if response.status_code == 200:
result = anpr_read_pixels(response.content, 0, 0, 0, b'encoded', b'json', b'vms')
if len(result) > 0:
print(result.decode('utf8'))
2. 인식 옵션
- 다양한 옵션을 지정하여 차번 인식 알고리즘을 사용 환경에 맞게 제어할 수 있습니다.
2.1. 라이선스별 지원 옵션 목록
| 문자 | 의미 | 적용 라이선스 |
|---|---|---|
v |
번호판 차량 부착 여부 판단 | 전체 |
b |
번호판 오토바이 부착 여부 판단 (베트남 번호판 전용) | 전체 |
m |
여러 대의 차량 번호판을 모두 인식 (다중 인식) | 객체인식, Pro, Server |
s |
360° 모든 각도의 차량에서 번호판 인식 (서라운드 인식) | 객체인식, Pro, Server |
d |
객체 인식 (만.공차용) | 전체 |
r |
인식된 객체(차량)의 차량 번호 인식 | 전체 |
i |
관심 영역(RoI) 설정 | 전체 |
x |
비관심 영역(RoU) 설정 | 전체 |
a |
최소 차량 번호판 크기 설정 | 전체 |
- 라이선스 종류에 따라 기능 및 다중 인식 차량 수가 다르게 적용됩니다. (참고: TS-ANPR 엔진)
2.2. 옵션 선택 안내
아래 플로우차트에서 시작에서 선택완료까지 조건을 따라 이동하면서 지나간 초록색 원의 문자들을 모아 옵션 값으로 사용하면 됩니다. (문자의 순서는 무관합니다.)
예) 이동 경로가 시작 → v → s → m → 선택완료 이면 "vsm"가 옵션 값입니다.
flowchart TD
start[/시작/]-->attach
attach-->|상관없음|multi
attach-->|차량에 부착된 번호판만|v((v)):::opt
v-->angle
angle-->|바로 선 차량만|multi
angle-->|360° 모든 각도|s((s)):::opt
s-->multi
multi-->|예|m((m)):::opt
multi-->|아니오|done[/선택완료/]
m-->done
start-->d((d)):::opt
d-->angle2
angle2-->|바로 선 차량만|multi2
angle2-->|360° 모든 각도|s2((s)):::opt
s2-->multi2
multi2-->|예|m2((m)):::opt
multi2-->|아니오|read
m2-->read
read-->|예|r((r)):::opt
read-->|아니오|done
r-->done
subgraph "번호 인식"
attach
v
angle
multi
m
s
end
subgraph "객체 인식"
read
angle2
multi2
s2
m2
d
r
end
classDef opt fill:#6F6,stroke:#CCC,stroke-width:4px,padding:10px,font-weight:bold
-
번호 인식 옵션 사용 예
| options | 의미 |———|———————————————————— | | 모든 번호판 중 하나 인식 |v| 차량 부착된 번호판 중 하나 인식 |b| 오토바이에 부착된 번호판 중 하나 인식 (베트남 번호판 전용) |m| 모든 번호판, 다중 인식 |vm| 차량 부착된 번호판, 다중 인식 |vs| 차량 부착된 번호판, 360° 서라운드, 하나 인식 |vsm| 차량 부착된 번호판, 360° 서라운드, 다중 인식 -
객체 인식 옵션 사용 예 | options | 의미 |———|———————————————————— |
d| 단일 객체 인식 (차량 번호 인식 안함) |dr| 단일 객체, 차량 번호 인식 |ds| 단일 객체, 360° 서라운드 인식 (차량 번호 인식 안함) |dsr| 단일 객체, 360° 서라운드, 차량 번호 인식 |dm| 다중 객체 인식 (차량 번호 인식 안함) |dmr| 다중 객체, 차량 번호 인식 (차량 번호 인식 안함) |dms| 다중 객체, 360° 서라운드 (차량 번호 인식 안함) |dmsr| 다중 객체, 360° 서라운드, 차량 번호 인식
2.3. 관심 영역(RoI) / 비관심 영역(RoU) 설정

관심 영역(RoI)
- 관심 영역은 각 꼭지점 픽셀 좌표를 연결한 다각형 영역으로 표현합니다.
i문자 이후 각 꼭지점의 픽셀 좌표들을 x,y 순으로 쉼표로 구분하여 나열합니다.
- 관심 영역은 여러 개를 설정할 수도 있으며 다른 차번 인식 옵션과 조합해서 사용할 수 있습니다.
비관심 영역(RoU)
- 비관심 영역은 각 꼭지점 픽셀 좌표를 연결한 다각형 영역으로 표현합니다.
x문자 이후 각 꼭지점의 픽셀 좌표들을 x,y 순으로 쉼표로 구분하여 나열합니다.
- 비관심 영역은 여러 개를 설정할 수도 있으며 다른 차번 인식 옵션과 조합해서 사용할 수 있습니다.
[참고] 관심 영역 또는 비관심 영역을 모두 지정하지 않으면 전체 이미지에서 번호 인식을 합니다. 관심 영역과 비관심 영역을 모두 지정할 경우 겹치는 구간이 있으면 비관심 영역을 우선합니다. 따라서 겹치는 구간의 차량 번호판은 모두 무시됩니다.
# 파이썬 예제
# 위 이미지에서 각 다각형 영역의 각 꼭지점 픽셀 좌표가 아래와 같은 때
# RoI = [(810,64), (939,1182), (1486,1182), (1149,571), (879,124), (839,64)]
# RoI2 = [(771,67), (479,1182), (1793,1182), (801,67)]
# RoU = [(851,70), (923,134), (1753,1182), (1789,1182), (1789,250), (1176,87), (946,68)]
# 관심 영역 한 개 설정
result = anpr_read_file(
b'roi.jpg', # 입력 파일명
b'text', # 출력 형식
b'vi810,64,939,1182,1486,1182,1149,571,879,124,839,64') # 차량에 부착된 번호판만 인식하기 위해 v 옵션 사용
# 관심 영역 두 개 설정
result = anpr_read_file(
b'roi.jpg', # 입력 파일명
b'text', # 출력 형식
b'vi810,64,939,1182,1486,1182,1149,571,879,124,839,64i771,67,479,1182,1793,1182,801,67')
# 관심 영역 한 개와 비관심 영역 한 개 설정
result = anpr_read_file(
b'roi.jpg', # 입력 파일명
b'text', # 출력 형식
b'vi810,64,939,1182,1486,1182,1149,571,879,124,839,64x851,70,923,134,1753,1182,1789,1182,1789,250,1176,87,946,68')
# 비관심 영역 한 개 설정
result = anpr_read_file(
b'roi.jpg', # 입력 파일명
b'text', # 출력 형식
b'vx851,70,923,134,1753,1182,1789,1182,1789,250,1176,87,946,68')
2.4. 최소 번호판 크기 설정
- 최소 번호판 크기는
a문자 이후 번호판 바운딩 박스 면적(가로 x 세로 픽셀) 으로 지정합니다. 예를 들어, 폭이100픽셀이고 높이가40픽셀이면a4000으로 지정합니다. -
최소 번호판 크기를 지정하면 이보다 작은 번호판은 무시됩니다.
# 파이썬 예제 # 그림에서 번호판 크기는 156 x 154 = 24024 result = anpr_read_file( b'test.jpg', # 입력 파일명 b'text', # 출력 형식 b'vi7,580, 829,293, 1910,325, 1798,1077, 0,1077a24024') # 관심 영역 및 최소 번호판 크기 지정
3. 출력 데이터 형식
출력 데이터는 options에 d가 포함되는 객체 인식과 포함되지 않는 차량 번호 인식 두 가지 형식으로 구분됩니다.
3.1. 차량 번호 인식 결과
3.1.1. text
차량 번호 텍스트만 출력합니다.
번호판이 여러 개인 경우는 줄바꿈 문자 CR (0x0d)로 구분합니다.
01가2345
67나8901
차량 번호가 인식되지 않은 경우는 빈 텍스트NULL terminated string (0x00)를 출력합니다.
오류가 반환되는 경우는 아래와 같은 텍스트 형식으로 출력합니다.
error: (1) Invalid parameters
3.1.2. csv
차량 번호와 속성을 csv 형식으로 출력합니다.
인식된 차량 번호 당 한 라인 씩으로 구성되며 각 컬럼은 콤마 문자(,)로 구분됩니다.
01가2345,1217,2083,92,175,12.45,0.75,0.83,0.20,ev
67나8901,1108,1317,67,217,12.45,0.76,0.89,0.10,
각 컬럼의 의미는 다음과 같습니다.
| 컬럼 | 의미 | 비고
|—–:|—————————|————————
| 1 | 차량번호 | text
| 2 | 번호판 좌측 상단 x 좌표 | area.x
| 3 | 번호판 좌측 상단 y 좌표 | area.y
| 4 | 번호판 폭 | area.width
| 5 | 번호판 높이 | area.height
| 6 | 번호판 각도 | area.angle
| 7 | 문자 인식 신뢰도 | conf.ocr
| 8 | 번호판 인식 신뢰도 | conf.plate
| 9 | 문자 인식 소요 시간 (초) | elapsed
| 10(1) | 친환경 전기자동차 여부 | attr.ev
- (1) 친환경 전기자동차이면
ev가 출력되고 아니면 공란으로 표시됨
차량 번호가 인식되지 않은 경우는 빈 텍스트NULL terminated string (0x00)를 출력합니다.
오류가 반환되는 경우는 아래와 같은 텍스트 형식으로 출력합니다.
error,1,Invalid parameters
3.1.3. json
차량 번호와 속성을 json 형식으로 출력합니다.
[
{
// 첫번째 번호판
text: "01가2345", // 차량 번호
area: {
// 번호판 영역 (픽셀 단위)
x: 1217, // 좌측 상단 x 좌표
y: 2083, // 좌측 상단 y 좌표
width: 92, // 폭
height: 175, // 높이
angle: 12.45, // 기울기 (도)
},
attrs: {
// 번호판 속성
ev: true, // 친환경 전기자동차 여부
},
ev: true, // deprecated (attrs.ev로 옮김, 추후 버전에서 삭제 예정)
conf: {
// 신뢰도 (범위: 0 ~ 1)
ocr: 0.75, // 문자 인식 신뢰도
plate: 0.84, // 번호판 인식 신뢰도
},
elapsed: 0.27, // 소요 시간 (초 단위)
},
{
// 두번째 번호판
text: "67나8901",
area: {
x: 1108,
y: 1317,
width: 67,
height: 217,
angle: 12.45,
},
attrs: {
ev: false,
},
ev: false,
conf: {
ocr: 0.76,
plate: 0.89,
},
elapsed: 0.14,
},
];
차량 번호가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
[];
오류가 반환되는 경우는 아래와 같은 json 형식으로 출력합니다.
{
"error": {
"code": 1,
"message": "Invalid parameters"
}
}
3.1.4. yaml
차량 번호와 속성을 yaml 형식으로 출력합니다.
- text: 01가2345 # 첫번째 번호판, 차량 번호
area: # 번호판 영역 (픽셀 단위)
x: 1217 # 좌측 상단 x 좌표
y: 2083 # 좌측 상단 y 좌표
width: 92 # 폭
height: 175 # 높이
angle: 12.45 # 기울기 (도)
conf: # 신뢰도 (범위: 0 ~ 1)
ocr: 0.75 # 문자 인식 신뢰도
plate: 0.83 # 번호판 인식 신뢰도
attrs: # 번호판 속성
ev: true # 친환경 전기자동차 여부
ev: true # deprecated (attrs.ev로 옮김, 추후 버전에서 삭제 예정)
elapsed: 0.20 # 소요 시간 (초)
- text: 67나8901 # 두번째 번호판
area:
x: 1108
y: 1317
width: 67
height: 217
angle: 12.45
conf:
ocr: 0.76
plate: 0.89
ev: false
elapsed: 0.10
차량 번호가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
오류가 반환되는 경우는 아래와 같은 yaml 형식으로 출력합니다.
error
code: 1
message: Invalid parameters
3.1.5. xml
차량 번호와 속성을 xml 형식으로 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<data>
<!-- 첫번째 번호판
text: 차량 번호
ev: deprecated (attrs.ev로 옮김, 추후 버전에서 삭제 예정)
elapsed: 소요 시간 (초)
-->
<license-plate text="01가2345" ev="true" elapsed="0.20">
<!-- 번호판 속성
ev: 친환경 전기자동차 여부
-->
<attrs ev="true"/>
<!-- 번호판 영역 (픽셀 단위)
x: 좌측 상단 x 좌표
y: 좌측 상단 y 좌표
width: 폭
height: 높이
angle: 기울기 (도)
-->
<area x="1217" y="2083" width="92" height="175" angle="12.45"/>
<!-- 신뢰도 (범위: 0 ~ 1)
ocr: 문자 인식 신뢰도
plate: 번호판 인식 신뢰도
-->
<conf ocr="0.75" plate="0.83"/>
</license-plate>
<!-- 두번째 번호판 -->
<license-plate text="67나8901" ev="false" elapsed="0.11">
<attrs ev="false"/>
<area x="1108" y="1317" width="67" height="217"/>
<conf ocr="0.76" plate="0.89"/>
</license-plate>
</data>
차량 번호가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<data />
오류가 반환되는 경우는 아래와 같은 xml 형식으로 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<error code="1" message="Invalid parameters" />
3.2. 객체 인식 결과
이미지에서 미리 학습한 객체를 찾아냅니다.
차별화된 특징은 360° 어안 렌즈 카메라로 촬영된 원본 이미지에서 외곡된 형태의 객체를 인식합니다.
현재 지원하는 객체 목록은 아래와 같습니다.
| class | 이름
|————–|———————————-
| car | 차량
| motorcycle | 오토바이
3.2.1. csv, text
객체 인식 결과를 cvs 형식의 텍스트로 출력합니다.
출력 형식을 text로 지정한 경우도 csv 형식으로 대체되어 출력됩니다.
인식된 객체 당 한 라인 씩으로 구성되며 각 컬럼은 콤마 문자(,)로 구분됩니다.
car,2171,2281,396,521,0.9679,0.2886,51조8969,2420,2295,110,81,147.5933,0.9005,0.7864,0.3913,ev
car,264,2266,433,543,0.9706,0.2886,41노7656,315,2281,103,81,211.3135,0.9160,0.8299,0.4189,
car,777,0,579,403,0.9716,0.2886 // 번호판 정보가 없는 경우
각 컬럼의 의미는 다음과 같습니다.
| 컬럼 | 의미 | 비고
|—–:|———————————–|————————
| 1 | 종류 | class
| 2 | 번호판 좌측 상단 x 좌표 | area.x
| 3 | 번호판 좌측 상단 y 좌표 | area.y
| 4 | 폭 | area.width
| 5 | 높이 | area.height
| 6 | 신뢰도 | conf
| 7 | 소요 시간(초) | elapsed
| 8(1) | 차량번호 | licensePlate.text
| 9 | 번호판 x픽셀 좌표 | licensePlate.area.x
| 10 | 번호판 y픽셀 좌표 | licensePlate.area.y
| 11 | 번호판 폭 | licensePlate.area.width
| 12 | 번호판 높이 | licensePlate.area.height
| 13 | 번호판 각도 | licensePlate.area.angle
| 14 | 문자 인식 신뢰도 | licensePlate.conf.ocr
| 15 | 번호판 인식 신뢰도 | licensePlate.conf.plate
| 16 | 문자 인식 소요 시간 (초) | licensePlate.elapsed
| 17(2) | 친환경 전기자동차 여부 | licensePlate.attrs.ev
- (1) 8번 컬럼부터는
r옵션을 사용하여 차량 번호가 인식된 경우만 출력되며 아니면 이하 컬럼이 모두 생략됨 - (2) (한국 번호판 전용) 17번 컬럼은 친환경 전기자동차로 인식된 경우
ev로 출력되며 아니면 공란으로 표시됨
객체가 인식되지 않은 경우는 빈 텍스트NULL terminated string (0x00)를 출력합니다.
오류가 반환되는 경우는 아래와 같은 텍스트 형식으로 출력합니다.
error,1,Invalid parameters
3.2.2. json
객체 인식 결과를 json 형식으로 출력합니다.
[
{ // 첫번째 객체
"class": "car", // 객체 종류
"area": { // 객체 영역 (픽셀 단위)
"x": 2171, // 좌측 상단 x 좌표
"y": 2281, // 좌측 상단 y 좌표
"width": 396, // 폭
"height": 521 // 높이
},
"conf": 0.9679, // 객체 인식 신뢰도 (범위: 0 ~ 1)
"elapsed": 0.2513, // 소요 시간 (초)
"licensePlate": [ // 번호판
{
"text": "51조8969" // 차량 번호
"area": { // 번호판 영역 (픽셀 단위)
"x": 2420, // 좌측 상단 x 좌표
"y": 2295 // 좌측 상단 y 좌표
"width": 110, // 폭
"height": 81, // 높이
"angle": 147.5933 // 기울기 (도)
},
"attrs": { // 번호판 속성
"ev": true // 친환경 전기자동차 여부
},
"conf": { // 신뢰도 (범위: 0 ~ 1)
"ocr": 0.9005, // 문자 인식 신뢰도
"plate": 0.7864 // 번호판 인식 신뢰도
},
"elapsed": 0.3525, // 소요 시간 (초)
}
]
},
{ // 두번째 객체
"class": "car",
"area": {
"x": 264,
"y": 2266,
"width": 433,
"height": 543
},
"conf": 0.9706,
"elapsed": 0.2513,
"licensePlate": [
{
"text": "41노7656"
"area": {
"x": 315,
"y": 2281,
"width": 103,
"height": 81,
"angle": 211.3135
},
"attrs": {
"ev": false
},
"conf": {
"ocr": 0.916,
"plate": 0.8299
},
"elapsed": 0.4402
}
]
},
{ // 세번째 객체 (번호판 정보가 없는 경우)
"class": "car",
"area": {
"x": 777,
"y": 0
"height": 403,
"width": 579,
},
"conf": 0.9716,
"elapsed": 0.2513
}
]
객체가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
[];
오류가 반환되는 경우는 아래와 같은 json 형식으로 출력합니다.
{
"error": {
"code": 1,
"message": "Invalid parameters"
}
}
3.2.3. yaml
객체 인식 결과를 yaml 형식으로 출력합니다.
- class: car # 첫번째 객체, 객체 종류
area: # 객체 영역 (픽셀 단위)
x: 2171 # 좌측 상단 x 좌표
y: 2281 # 좌측 상단 y 좌표
width: 396 # 폭
height: 521 # 높이
conf: 0.9678 # 객체 인식 신뢰도 (범위: 0 ~ 1)
elapsed: 0.3190 # 소요 시간 (초)
licensePlate: # 번호판
- text: 51조8969 # 차량 번호
area: # 번호판 영역 (픽셀 단위)
x: 2420 # 좌측 상단 x 좌표
y: 2295 # 좌측 상단 y 좌표
width: 110 # 폭
height: 81 # 높이
angle: 147.5933 # 기울기 (도)
attrs: # 번호판 속성
ev: true # 친환경 전기자동차 여부
conf: # 신뢰도 (범위: 0 ~ 1)
ocr: 0.9005 # 문자 인식 신뢰도
plate: 0.7864 # 번호판 인식 신뢰도
elapsed: 0.3226 # 소요 시간 (초)
- class: car # 두번째 객체
area:
x: 264
y: 2266
width: 433
height: 543
conf: 0.9706
elapsed: 0.3191
licensePlate:
- text: 41노7656
area:
x: 315
y: 2281
width: 103
height: 81
angle: 211.3135
conf:
ocr: 0.916
plate: 0.8299
attrs:
ev: false
elapsed: 0.5527
- class: car # 세번째 객체 (번호판 정보가 없는 경우)
area:
x: 777
y: 0
width: 579
height: 403
conf: 0.9716
elapsed: 0.3191
객체가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
오류가 반환되는 경우는 아래와 같은 yaml 형식으로 출력합니다.
error
code: 1
message: Invalid parameters
3.2.4. xml
객체 인식 결과를 xml 형식으로 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<data>
<!-- 첫번째 객체
class: 객체 종류
conf: 객체 인식 신뢰도 (범위: 0 ~ 1)
elapsed: 소요 시간 (초)
-->
<object class="car" conf="0.9679" elapsed="0.3287">
<!-- 객체 영역 (픽셀 단위)
x: 좌측 상단 x 좌표
y: 좌측 상단 y 좌표
width: 폭
height: 높이
-->
<area x="2171" y="2281" width="396" height="521"/>
<!-- 번호판
text: 차량 번호
elapsed: 소요 시간 (초)
-->
<license-plate text="51조8969" elapsed="0.3961">
<!-- 번호판 속성
ev: 친환경 전기자동차 여부
-->
<attrs ev="true"/>
<!-- 번호판 영역 (픽셀 단위)
x: 좌측 상단 x 좌표
y: 좌측 상단 y 좌표
width: 폭
height: 높이
angle: 기울기 (도)
-->
<area x="2420" y="2295" width="110" height="81" angle="147.5933"/>
<!-- 신뢰도 (범위: 0 ~ 1)
ocr: 문자 인식 신뢰도
plate: 번호판 인식 신뢰도
-->
<conf ocr="0.9005" plate="0.7864"/>
</license-plate>
</object>
<!-- 두번째 객체 -->
<object class="car" conf="0.9706" elapsed="0.3287">
<area x="264" y="2266" width="433" height="543"/>
<license-plate text="41노7656" elapsed="0.4364">
<attrs ev="false"/>
<area x="315" y="2281" width="103" height="81" angle="211.3135"/>
<conf ocr="0.9160" plate="0.8299"/>
</license-plate>
</object>
<!-- 세번째 객체 (번호판 정보가 없는 경우) -->
<object class="car" conf="0.9716" elapsed="0.3287">
<area x="777" y="0" width="579" height="403"/>
</object>
</data>
객체가 인식되지 않은 경우는 아래와 같이 빈 데이터를 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<data />
오류가 반환되는 경우는 아래와 같은 xml 형식으로 출력합니다.
<?xml version="1.0" encoding="utf-8"?>
<error code="1" message="Invalid parameters" />
4. 오류 코드표
전체 오류 목록은 아래 표와 같습니다.
| code | message | 설명 |
|---|---|---|
1 |
Invalid parameters |
함수 호출 인자가 잘못된 경우 |
2 |
File not found |
입력 이미지 파일이 존재하지 않는 경우 |
3 |
Invalid image |
입력 이미지 메모리가 형식에 맞지 않는 경우 |
4 |
Unsupported image format |
입력 이미지가 지원되지 않는 형식인 경우 |
100 |
License expired |
라이선스가 만료된 경우 |
101 |
Corrupted library |
라이브러리 구성 파일 중 일부가 없거나 손상된 경우 |
102 |
Not initialized |
엔진이 초기화되지 않은 상태 |
103 |
Too many workers |
라이브러리 호출 쓰레드 수가 한계를 초과한 경우 (최대 256개) |
104 |
Resource exhausted |
더 이상 자원을 할당할 수 없는 경우 |
105 |
License not installed |
라이선스가 설치되지 않은 상태 (리눅스에서 무료 평가판 라이센스가 설치되지 않은 경우 발생함) |
106 |
USB dongle I/O error |
USB 라이선스 동글 읽기 실패시 발생 |
107 |
License required |
해당 기능을 사용하기 위한 라이선스가 없음 |
108 |
Unsupported platform |
지원되지 않는 환경에서 실행시 발생 |
200 |
Unknown |
기타 정의되지 않은 오류 |