이 장은 AI 분석 동작이 지원하는 분석 타입 하나하나의 명령, 설정 항목, 출력 변수, JSON 결과
형식을 적습니다. 동작의 개념과 구성 절차는 4부 AI 분석,
분석기의 등록과 모드·검출 FPS 설정은 6부 AI 분석기를
참고합니다. 모든 분석은 컨트롤러에서 수행되며 영상과 소리를 외부로 전송하지 않습니다.
공통 사항
분석기와 타입
AI 분석기에서 사용할 분석기를 선택합니다. 분석기는 선택 창에서 바로
추가, 편집, 삭제할 수 있고 설정 > AI 분석기에서도 관리할 수
있습니다. 분석 타입은 분석기의 AI 모델로 정해지므로, 동작 창에는 선택한
분석기의 모델에 해당하는 명령과 항목만 표시됩니다.
타입 항목은 이 동작이 분석기에 무엇을 할지 정합니다.
| 타입 | 설명 |
| 분석 추가 | AI 분석기에 분석을 추가합니다. 하나의 분석기에 여러 개의 분석을 추가할 수 있습니다. 아래의 명령·설정·출력 항목은 이 타입일 때만 표시됩니다. |
| 분석 삭제 / 분석 모두 삭제 | 이 분석기에 등록된 모든 분석을 삭제합니다. 비디오 분석기에서는 분석 삭제, 오디오 분석기에서는 분석 모두 삭제로 표시됩니다. |
| 분석 시작 | 오디오 캡처와 분석을 시작합니다. 오디오 분석기에만 표시됩니다. |
| 분석 중지 | 오디오 캡처와 분석을 중지합니다. 오디오 분석기에만 표시됩니다. |
주의
비디오 분석은 동작 > 카메라에서 해당 카메라를 시작해야
동작하고, 오디오 분석은 분석 추가 뒤에 분석 시작
명령을 실행해야 동작합니다. 둘 중 하나를 빠뜨리면 출력 변수가 빈 값으로 남습니다.
명령
명령은 분석 타입마다 다르며, 무엇을 계산하여 어느 변수에 기록할지
정합니다. 명령을 고르면 그 명령에 필요한 설정 항목과 출력 항목만 표시됩니다. 타입별 명령은
아래 각 절의 표에 있습니다.
공통 설정
여러 타입에 같은 뜻으로 쓰이는 항목입니다. 값의 범위와 기본값이 타입마다 다르면 각 절에 따로 적었습니다.
| 항목 | 설명 |
| 신뢰도 (%) | 이 값 이상인 감지 결과만 사용합니다. 0~100 사이의 값이며 높일수록 확실한 결과만 남고 낮출수록 놓치는 것이 줄어듭니다. 기본값은 대부분 50이고 얼굴 감지는 70입니다. 임계값, 최소 신뢰도, 감지 임계값이라는 이름으로 표시되는 타입도 뜻은 같습니다. |
| 감지 영역 | 카메라 프리뷰 위에서 드래그하여 감지할 사각형 범위를 지정합니다. 지정하지 않으면 화면 전체에서 감지하고, 지정하면 그 영역 안의 결과만 사용합니다. |
| 선택 기준 | 여러 개가 감지되었을 때 어느 것의 값을 변수에 기록할지 정합니다. 객체 감지·얼굴 감지는 최고 신뢰도, 신뢰도 인덱스 (0부터), 최대 크기, 기준점에서 가장 가까움, 색상 추적은 최대 크기, 기준점에서 가장 가까움, 면적 인덱스, QR / 바코드는 최대 면적, 가장 가까움, 인덱스, Edge Impulse 객체 감지는 최고 신뢰도, 인덱스, 가장 큰, 가장 가까운 중에서 고릅니다. |
| 인덱스 (0부터) | 선택 기준이 인덱스일 때 고를 순번입니다. 객체 감지·얼굴 감지는 신뢰도가 높은 순으로 0, 1, 2…, 색상 추적과 QR / 바코드는 면적이 큰 순으로 0, 1, 2…, Edge Impulse 객체 감지는 모델이 검출한 순서입니다. 객체·얼굴은 0~15, 색상은 0~100 범위입니다. |
| 기준점 | 선택 기준이 기준점에서 가장 가까움일 때 카메라 프리뷰에서 클릭하여 지정하는 기준 좌표입니다. |
출력 변수와 값 규약
출력 항목에 연결한 변수는 분석이 실행되는 동안 계속 갱신됩니다. 연결하지 않은 출력은 기록하지
않으므로 필요한 항목에만 변수를 연결합니다. 변수 타입은 항목에 따라 정해져 있습니다.
- 디지털: 감지 여부, 매칭 여부, 일치 여부처럼 참/거짓으로 기록되는 항목입니다.
- 숫자: 개수, 좌표, 너비·높이, 신뢰도, 확률, 각도, 거리입니다. 좌표와 크기는 카메라 프레임의 픽셀 단위이고, 중심점은 감지 상자의 가운데입니다. 신뢰도와 확률은 0~100 범위의 값입니다(OCR 은 예외, 해당 절 참고).
- 텍스트: 클래스 이름, 인식된 이름, 데이터, JSON 출력입니다.
- 색상: 색상 추적의 평균 색상입니다.
감지되지 않았을 때의 값은 타입마다 정해져 있습니다. 텍스트는 none 또는 빈 문자열,
숫자는 -1 또는 0 이 기록되며 각 절의 출력 표에 적혀 있습니다.
출력 (JSON 텍스트) 항목은 감지 결과 전체를 JSON 문자열로 텍스트 변수에 기록합니다. 결과가
여러 개인 타입은 배열이고 감지된 것이 없으면 빈 배열 [] 입니다. 키 이름과 예시는 각
절의 JSON 출력에 있으며, 값을 골라 쓰려면 블록 코딩에서 파싱합니다.
객체 감지
카메라 영상에서 사람, 차량 등 80종의 일반 객체를 실시간으로 감지합니다. 클래스는 COCO 데이터셋의 80종이며 여러 개를 함께 선택할 수 있습니다.
명령
| 명령 | 설명 |
| 객체 감지 여부 | 선택한 클래스 중 하나라도 감지되었는지 확인합니다. |
| 객체 개수 | 선택한 클래스 객체의 총 개수를 기록합니다. |
| 객체 가져오기 | 선택한 클래스 중 선택 기준에 맞는 객체 1개의 클래스 이름, 신뢰도, 중심점, 너비·높이를 변수에 기록합니다. |
| 전체 객체 가져오기 | 감지된 모든 객체의 정보를 JSON 으로 기록합니다. |
감지 영역을 지정하면 모든 명령이 그 영역 안의 객체만 대상으로 합니다.
설정
| 항목 | 설명 |
| 객체 | 감지할 객체의 종류입니다. 80종 중에서 여러 개를 선택할 수 있으며 기본값은 사람입니다. |
| 신뢰도 (%) | 0~100, 기본값 50. |
| 감지 영역 | 공통 사항 참고. |
| 선택 기준 | 최고 신뢰도(기본), 신뢰도 인덱스 (0부터), 최대 크기, 기준점에서 가장 가까움. |
| 인덱스 (0부터) | 0~15, 기본값 0. 신뢰도가 높은 순서입니다. |
| 기준점 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 객체가 감지되면 참. |
| 갯수 | 숫자 | 감지된 객체 수. |
| 객체 | 텍스트 | 선택된 객체의 클래스 이름(영문, 예: person). |
| 신뢰도 (%) | 숫자 | 선택된 객체의 신뢰도, 0~100. |
| 중심점 X / 중심점 Y | 숫자 | 선택된 객체 중심의 픽셀 좌표. |
| 너비 (픽셀) / 높이 (픽셀) | 숫자 | 선택된 객체 상자의 크기. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 객체의 배열. |
JSON 출력
객체마다 class_name, confidence(0~100), 상자의 두 꼭짓점 bbox, 중심 center, width, height를 담은 배열입니다.
[
{
"class_name": "person",
"confidence": 85,
"bbox": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 },
"center": { "x": 200, "y": 225 },
"width": 200,
"height": 350
},
{
"class_name": "car",
"confidence": 72,
"bbox": { "x1": 400, "y1": 200, "x2": 550, "y2": 300 },
"center": { "x": 475, "y": 250 },
"width": 150,
"height": 100
}
]
감지할 수 있는 객체 80종
화면에는 한글 이름이 표시되고 변수와 JSON 에는 괄호 안의 영문 클래스 이름이 기록됩니다.
사람(person), 자전거(bicycle), 자동차(car), 오토바이(motorcycle), 비행기(airplane), 버스(bus), 기차(train), 트럭(truck), 보트(boat), 신호등(traffic light), 소화전(fire hydrant), 정지 표지판(stop sign), 주차 미터기(parking meter), 벤치(bench), 새(bird), 고양이(cat), 개(dog), 말(horse), 양(sheep), 소(cow), 코끼리(elephant), 곰(bear), 얼룩말(zebra), 기린(giraffe), 백팩(backpack), 우산(umbrella), 핸드백(handbag), 넥타이(tie), 여행 가방(suitcase), 프리스비(frisbee), 스키(skis), 스노보드(snowboard), 공(sports ball), 연(kite), 야구 방망이(baseball bat), 야구 글러브(baseball glove), 스케이트보드(skateboard), 서핑보드(surfboard), 테니스 라켓(tennis racket), 병(bottle), 와인잔(wine glass), 컵(cup), 포크(fork), 나이프(knife), 숟가락(spoon), 그릇(bowl), 바나나(banana), 사과(apple), 샌드위치(sandwich), 오렌지(orange), 브로콜리(broccoli), 당근(carrot), 핫도그(hot dog), 피자(pizza), 도넛(donut), 케이크(cake), 의자(chair), 소파(couch), 화분(potted plant), 침대(bed), 식탁(dining table), 변기(toilet), TV(tv), 노트북(laptop), 마우스(mouse), 리모컨(remote), 키보드(keyboard), 휴대폰(cell phone), 전자레인지(microwave), 오븐(oven), 토스터(toaster), 싱크대(sink), 냉장고(refrigerator), 책(book), 시계(clock), 꽃병(vase), 가위(scissors), 곰 인형(teddy bear), 헤어 드라이어(hair drier), 칫솔(toothbrush)
얼굴 감지
카메라 영상에서 사람의 얼굴을 실시간으로 감지하고 위치를 추적합니다. 감정 인식과 나이·성별 추정을 포함합니다.
명령
| 명령 | 설명 |
| 얼굴 감지 여부 | 얼굴이 감지되었는지 확인합니다. |
| 얼굴 개수 | 감지된 얼굴의 수를 기록합니다. |
| 얼굴 정보 읽기 | 선택 기준에 맞는 얼굴 1개의 신뢰도, 중심점, 너비·높이를 변수에 기록합니다. |
| 모든 얼굴 정보 읽기 | 감지된 모든 얼굴의 정보를 JSON 으로 기록합니다. |
| 감정 인식 | 얼굴이 감지되면 표정을 분석하여 8가지 감정 중 하나로 분류합니다. |
| 나이/성별 추정 | 감지된 얼굴의 나이와 성별을 추정합니다. |
감지 영역을 지정하면 그 영역 안의 얼굴만 대상으로 합니다.
설정
| 항목 | 설명 |
| 신뢰도 (%) | 기본값 70. |
| 감지 영역 | 공통 사항 참고. |
| 선택 기준 | 최고 신뢰도(기본), 신뢰도 인덱스 (0부터), 최대 크기, 기준점에서 가장 가까움. |
| 인덱스 (0부터) | 0~15, 기본값 0. |
| 기준점 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 얼굴이 감지되면 참. |
| 갯수 | 숫자 | 감지된 얼굴 수. |
| 신뢰도 (%) | 숫자 | 선택된 얼굴의 신뢰도, 0~100. |
| 중심점 X / 중심점 Y | 숫자 | 선택된 얼굴 중심의 픽셀 좌표. |
| 너비 (픽셀) / 높이 (픽셀) | 숫자 | 선택된 얼굴 상자의 크기. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 얼굴의 배열. |
| 감정 | 텍스트 | 인식된 감정의 영문 이름. 미감지 시 none. |
| 감정 ID | 숫자 | 감정 번호 0~7. 미감지 시 -1. |
| 감정 신뢰도 (%) | 숫자 | 0~100. 미감지 시 -1. |
| 나이 | 숫자 | 추정 나이 0~100. 미감지 시 -1. |
| 성별 | 텍스트 | male 또는 female. 미감지 시 none. |
| 성별 신뢰도 (%) | 숫자 | 0~100. 미감지 시 -1. |
JSON 출력
얼굴마다 score(신뢰도 0~100), bbox, center, width, height를 담습니다. 감정 항목(emotion, emotion_id, emotion_confidence)은 감정 인식이, 나이·성별 항목(age, gender, gender_confidence)은 나이/성별 추정이 실행 중일 때만 포함됩니다. 신뢰도 키가 객체 감지의 confidence와 달리 score인 점에 주의합니다.
[
{
"score": 95,
"bbox": { "x1": 120, "y1": 80, "x2": 250, "y2": 300 },
"center": { "x": 185, "y": 190 },
"width": 130,
"height": 220,
"emotion": "happy",
"emotion_id": 4,
"emotion_confidence": 87,
"age": 28,
"gender": "male",
"gender_confidence": 92
}
]
감정 8종과 ID
| ID | 감정 | 뜻 |
| 0 | angry | 분노 |
| 1 | contempt | 경멸 |
| 2 | disgust | 혐오 |
| 3 | fear | 공포 |
| 4 | happy | 행복 |
| 5 | neutral | 무표정 |
| 6 | sad | 슬픔 |
| 7 | surprise | 놀람 |
얼굴 인식
얼굴 감지의 확장 기능으로, 감지된 얼굴을 등록된 얼굴과 비교하여 누구인지 인식합니다. 얼굴의 등록과 삭제도 이 동작의 명령으로 수행합니다.
명령
| 명령 | 설명 |
| 얼굴 인식 | 현재 감지된 얼굴이 등록된 얼굴 중 누구인지 식별하여 이름과 유사도를 기록합니다. |
| 등록된 얼굴 수 | 등록되어 있는 얼굴의 총 개수를 기록합니다. |
| 등록된 얼굴 목록 | 등록된 얼굴 이름 목록을 콤마로 구분한 문자열로 기록합니다. |
| 얼굴 등록 | 현재 화면의 얼굴을 얼굴 이름으로 등록합니다. |
| 얼굴 삭제 | 등록된 얼굴 중 얼굴 이름과 같은 이름의 얼굴을 삭제합니다. |
| 모든 얼굴 삭제 | 등록된 모든 얼굴을 삭제합니다. |
설정
| 항목 | 설명 |
| 임계값 (%) | 유사도 임계값입니다. 0~100, 기본값 70. 유사도가 이 값 이상일 때만 매칭된 것으로 판단합니다. |
| 최소 얼굴 면적 (px²) | 인식할 얼굴의 최소 픽셀 면적입니다. 이보다 작은(먼) 얼굴은 인식 대상에서 제외됩니다. 0이면 제한이 없습니다. 입력은 112×112 로 정규화되므로 너무 작은 얼굴은 확대 과정에서 정확도가 떨어집니다. 기본값 6400(80×80)은 권장 균형값이며, 근거리 정밀 인식만 원하면 12544(112×112)로 높입니다. |
| 얼굴 이름 | 등록하거나 삭제할 얼굴의 이름입니다. 예: john, 홍길동. |
얼굴 데이터의 저장소는 분석기 설정의 DB 이름(기본 default)으로 정하며 같은
이름을 쓰는 분석기끼리 데이터를 공유합니다. 사진이나 화면으로 된 얼굴을 차단하는
안티 스푸핑도 분석기 설정에 있습니다(6부 AI 분석기).
출력 변수
| 항목 | 타입 | 값 |
| 얼굴 감지 여부 | 디지털 | 얼굴이 감지되면 참. |
| 매칭 여부 | 디지털 | 등록된 얼굴과 유사도가 임계값 이상으로 매칭되면 참. |
| 인식된 이름 | 텍스트 | 매칭된 얼굴의 이름. 얼굴이 없으면 빈 문자열, 얼굴은 있으나 등록된 얼굴과 매칭되지 않으면 Unknown. |
| 유사도 (%) | 숫자 | 가장 비슷한 등록 얼굴과의 유사도, 0~100. |
| 등록된 얼굴 수 | 숫자 | 등록된 얼굴의 수. |
| 등록된 얼굴 목록 | 텍스트 | 등록된 이름을 콤마로 구분한 문자열. |
이 타입에는 JSON 출력이 없습니다.
자세 추정
카메라 영상에서 사람의 자세를 실시간으로 추정하여 17개 키 포인트(관절) 좌표를 제공합니다. 키 포인트 사이의 거리와 관절 각도를 바로 계산할 수 있습니다.
명령
| 명령 | 설명 |
| 사람 감지 | 사람이 감지되었는지 확인합니다. |
| 키 포인트 좌표 | 지정한 키 포인트(예: 손목, 무릎)의 좌표와 신뢰도를 기록합니다. |
| 키 포인트 간 거리 | 두 키 포인트 사이의 픽셀 거리를 기록합니다. |
| 관절 각도 | 세 키 포인트로 이루어진 관절의 각도를 계산하여 기록합니다(예: 팔꿈치 각도). |
| 영역내 키 포인트 여부 | 지정한 키 포인트가 감지 영역 안에 있는지 확인합니다. |
| 모든 키 포인트 읽기 | 17개 키 포인트의 좌표를 JSON 으로 기록합니다. |
설정
| 항목 | 설명 |
| 키 포인트 | 좌표를 읽거나 영역 안 여부를 확인할 키 포인트입니다. 17종 중에서 선택합니다. |
| 키 포인트1 / 키 포인트2 | 거리를 계산할 두 키 포인트입니다. |
| 관절 | 각도를 계산할 관절입니다. 왼쪽 팔꿈치, 오른쪽 팔꿈치, 왼쪽 어깨, 오른쪽 어깨, 왼쪽 무릎, 오른쪽 무릎, 왼쪽 골반, 오른쪽 골반, 척추 기울기, 목 기울기 중에서 선택합니다. |
| 감지 영역 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 사람 감지, 키 포인트 좌표, 영역내 키 포인트 여부의 결과. |
| 키 포인트 X / 키 포인트 Y | 숫자 | 지정한 키 포인트의 픽셀 좌표. |
| 신뢰도 (%) | 숫자 | 지정한 키 포인트의 신뢰도, 0~100. |
| 감지 여부 | 디지털 | 키 포인트 간 거리·관절 각도 명령에서 두 키 포인트(관절)가 모두 감지되어 값을 계산했으면 참. |
| 관절 각도 (°) | 숫자 | 지정한 관절의 각도. |
| 거리 (픽셀) | 숫자 | 두 키 포인트 사이의 거리. |
| 출력 (JSON 텍스트) | 텍스트 | 17개 키 포인트의 배열. |
JSON 출력
키 포인트마다 id, name, x, y, confidence(0~100)를 담은 배열입니다. 아래는 일부만 보인 예시입니다.
[
{ "id": 0, "name": "nose", "x": 320, "y": 180, "confidence": 95 },
{ "id": 5, "name": "left_shoulder", "x": 280, "y": 260, "confidence": 91 },
{ "id": 6, "name": "right_shoulder", "x": 360, "y": 258, "confidence": 93 },
{ "id": 15, "name": "left_ankle", "x": 270, "y": 470, "confidence": 78 }
]
키 포인트 17종
| ID | JSON 이름 | 화면 표시 |
| 0 | nose | 코 |
| 1 | left_eye | 왼쪽 눈 |
| 2 | right_eye | 오른쪽 눈 |
| 3 | left_ear | 왼쪽 귀 |
| 4 | right_ear | 오른쪽 귀 |
| 5 | left_shoulder | 왼쪽 어깨 |
| 6 | right_shoulder | 오른쪽 어깨 |
| 7 | left_elbow | 왼쪽 팔꿈치 |
| 8 | right_elbow | 오른쪽 팔꿈치 |
| 9 | left_wrist | 왼쪽 손목 |
| 10 | right_wrist | 오른쪽 손목 |
| 11 | left_hip | 왼쪽 엉덩이 |
| 12 | right_hip | 오른쪽 엉덩이 |
| 13 | left_knee | 왼쪽 무릎 |
| 14 | right_knee | 오른쪽 무릎 |
| 15 | left_ankle | 왼쪽 발목 |
| 16 | right_ankle | 오른쪽 발목 |
손 추적
카메라 영상에서 손을 실시간으로 추적하여 21개 키 포인트(손가락 관절) 좌표를 제공합니다. 왼손·오른손 판별, 손가락 펴짐 상태, 제스처 인식을 포함합니다.
명령
| 명령 | 설명 |
| 손 감지 | 손이 감지되었는지 확인합니다. |
| 키 포인트 좌표 | 지정한 키 포인트의 X, Y, Z 좌표를 기록합니다. |
| 왼손/오른손 판별 | 감지된 손이 왼손인지 오른손인지 기록합니다. |
| 손가락 상태 | 지정한 손가락이 펴졌는지 접혔는지 기록합니다. |
| 영역내 손 여부 | 손이 감지 영역 안에 있는지 확인합니다. |
| 영역내 키 포인트 여부 | 지정한 키 포인트가 감지 영역 안에 있는지 확인합니다. |
| 키 포인트 간 거리 | 두 키 포인트 사이의 픽셀 거리를 기록합니다. |
| 모든 키 포인트 읽기 | 21개 키 포인트의 좌표를 JSON 으로 기록합니다. |
| 제스처 인식 | 21개 키 포인트의 배치로 손 제스처(예: 주먹, 브이, 엄지 들기)를 분류하여 이름과 ID 를 기록합니다. |
설정
| 항목 | 설명 |
| 신뢰도 (%) | 0~100, 기본값 50. |
| 키 포인트 | 좌표를 읽거나 영역 안 여부를 확인할 키 포인트입니다. 21종 중에서 선택합니다. |
| 키 포인트1 / 키 포인트2 | 거리를 계산할 두 키 포인트입니다. |
| 손가락 | 상태를 확인할 손가락입니다. 엄지, 검지, 중지, 약지, 새끼 중에서 선택합니다. |
| 감지 영역 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 손 감지, 키 포인트 좌표, 영역내 손 여부, 영역내 키 포인트 여부의 결과. |
| 키 포인트 X / 키 포인트 Y / 키 포인트 Z | 숫자 | 지정한 키 포인트의 좌표. X, Y 는 픽셀 좌표이고 Z 는 모델이 추정한 깊이 방향의 값입니다. |
| 손 구분 값 | 숫자 | 왼손 0, 오른손 1, 구분할 수 없으면 -1. |
| 손 구분 텍스트 | 텍스트 | left 또는 right, 구분할 수 없으면 빈 문자열. |
| 거리 (픽셀) | 숫자 | 두 키 포인트 사이의 거리. |
| 감지 여부 | 디지털 | 키 포인트 간 거리 명령에서 두 키 포인트가 모두 감지되어 거리를 계산했으면 참. |
| 손가락 상태 | 숫자 | 접힘 0, 펴짐 1, 감지할 수 없으면 -1. |
| 출력 (JSON 텍스트) | 텍스트 | 21개 키 포인트의 배열. |
| 제스처 이름 | 텍스트 | 인식된 제스처의 영문 이름. 미감지 시 none. |
| 제스처 ID | 숫자 | 제스처 번호. 미감지 시 -1. |
JSON 출력
키 포인트마다 id, name, x, y, z를 담은 배열입니다. 아래는 일부만 보인 예시입니다.
[
{ "id": 0, "name": "wrist", "x": 320, "y": 350, "z": 0 },
{ "id": 4, "name": "thumb_tip", "x": 280, "y": 310, "z": -15 },
{ "id": 8, "name": "index_tip", "x": 310, "y": 260, "z": -25 },
{ "id": 12, "name": "middle_tip", "x": 330, "y": 255, "z": -22 }
]
키 포인트 21종
| ID | JSON 이름 | 화면 표시 |
| 0 | wrist | 손목 |
| 1 | thumb_cmc | 엄지 손목관절 |
| 2 | thumb_mcp | 엄지 뿌리관절 |
| 3 | thumb_ip | 엄지 첫번째 관절 |
| 4 | thumb_tip | 엄지 끝 |
| 5 | index_mcp | 검지 뿌리관절 |
| 6 | index_pip | 검지 첫번째 관절 |
| 7 | index_dip | 검지 두번째 관절 |
| 8 | index_tip | 검지 끝 |
| 9 | middle_mcp | 중지 뿌리관절 |
| 10 | middle_pip | 중지 첫번째 관절 |
| 11 | middle_dip | 중지 두번째 관절 |
| 12 | middle_tip | 중지 끝 |
| 13 | ring_mcp | 약지 뿌리관절 |
| 14 | ring_pip | 약지 첫번째 관절 |
| 15 | ring_dip | 약지 두번째 관절 |
| 16 | ring_tip | 약지 끝 |
| 17 | pinky_mcp | 새끼 뿌리관절 |
| 18 | pinky_pip | 새끼 첫번째 관절 |
| 19 | pinky_dip | 새끼 두번째 관절 |
| 20 | pinky_tip | 새끼 끝 |
제스처 33종과 ID
제스처 ID 는 아래 표의 번호이고 제스처 이름은 영문 이름입니다.
| ID | 이름 | 뜻 |
| 0 | call | 전화 제스처(엄지와 새끼손가락 펴기) |
| 1 | dislike | 싫어요(엄지 아래로) |
| 2 | fist | 주먹 |
| 3 | four | 숫자 4(엄지 접기) |
| 4 | grabbing | 잡기 |
| 5 | grip | 쥐기 |
| 6 | hand_heart | 손가락 하트(엄지와 검지) |
| 7 | hand_heart2 | 손가락 하트(다른 형태) |
| 8 | holy | 합장 |
| 9 | like | 좋아요(엄지 위로) |
| 10 | little_finger | 새끼손가락 펴기 |
| 11 | middle_finger | 가운뎃손가락 펴기 |
| 12 | mute | 조용히(검지를 입에) |
| 13 | ok | OK 사인(엄지와 검지로 원) |
| 14 | one | 숫자 1(검지 펴기) |
| 15 | palm | 손바닥 펴기 |
| 16 | peace | 브이 |
| 17 | peace_inverted | 뒤집힌 브이 |
| 18 | point | 가리키기(검지) |
| 19 | rock | 락(검지와 새끼손가락) |
| 20 | stop | 정지(손바닥 앞으로) |
| 21 | stop_inverted | 뒤집힌 정지 |
| 22 | take_picture | 사진 찍기 |
| 23 | three | 숫자 3 |
| 24 | three2 | 숫자 3(다른 형태) |
| 25 | three3 | 숫자 3(세 번째 형태) |
| 26 | three_gun | 손가락 총(세 손가락) |
| 27 | thumb_index | 엄지와 검지 펴기 |
| 28 | thumb_index2 | 엄지와 검지 펴기(다른 형태) |
| 29 | timeout | 타임아웃(T 자) |
| 30 | two_up | 숫자 2(두 손가락 위로) |
| 31 | two_up_inverted | 뒤집힌 숫자 2 |
| 32 | xsign | X 사인(두 검지 교차) |
색상 추적
카메라 영상에서 지정한 색상 범위의 영역을 실시간으로 찾아 위치, 크기, 면적, 평균 색상을 제공합니다.
명령
| 명령 | 설명 |
| 색상 감지 | 지정한 색상 범위가 감지되었는지 확인합니다. |
| 색상 개수 | 감지된 색상 영역의 수를 기록합니다. |
| 색상 정보 | 선택 기준에 맞는 색상 영역 1개의 중심점, 너비·높이, 면적, 평균 색상을 변수에 기록합니다. |
| 모든 색상 읽기 | 감지된 모든 색상 영역의 정보를 JSON 으로 기록합니다. |
감지 영역을 지정하면 그 영역 안의 색상 영역만 대상으로 합니다.
설정
| 항목 | 설명 |
| 시작 색상 / 끝 색상 | 감지할 색상 범위입니다. 두 색상 사이의 색상이 감지됩니다. 기본값은 #FF0000 ~ #FF5555 입니다. |
| 최소 면적 (px²) | 이 값보다 작은 영역은 무시합니다. 작은 잡음을 걸러내는 데 씁니다. 1~100000, 기본값 300. |
| 감지 영역 | 공통 사항 참고. |
| 선택 기준 | 최대 크기(기본), 기준점에서 가장 가까움, 면적 인덱스. |
| 기준점 | 공통 사항 참고. |
| 인덱스 (0부터) | 0~100, 기본값 0. 면적이 큰 순서입니다. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 색상 영역이 감지되면 참. |
| 개수 | 숫자 | 감지된 색상 영역 수. |
| 중심점 X / 중심점 Y | 숫자 | 선택된 영역 중심의 픽셀 좌표. 미감지 시 0. |
| 너비 (픽셀) / 높이 (픽셀) | 숫자 | 선택된 영역의 크기. 미감지 시 0. |
| 면적 | 숫자 | 선택된 영역의 면적(px²). 미감지 시 0. |
| 평균 색상 | 색상 | 선택된 영역의 평균 색상. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 색상 영역의 배열. |
JSON 출력
영역마다 중심 x, y, width, height, area, 평균 색상 color(16진수)를 담은 배열입니다.
[
{ "x": 320, "y": 240, "width": 50, "height": 60, "area": 3000, "color": "#FF5733" },
{ "x": 500, "y": 300, "width": 40, "height": 45, "area": 1800, "color": "#33FF57" }
]
QR / 바코드
QR 코드와 여러 형식의 1차원 바코드를 실시간으로 감지하고 디코딩합니다.
명령
| 명령 | 설명 |
| 스캔 | 코드 1개를 읽어 데이터, 코드 유형, 위치와 크기를 기록합니다. 여러 코드가 감지되면 선택 기준에 따라 하나를 고릅니다. |
| 전체 스캔 | 감지된 모든 코드의 정보를 JSON 배열로 기록합니다. |
| 코드 감지 여부 | 코드가 감지되었는지 확인합니다. |
| 코드 개수 | 감지된 코드의 수를 기록합니다. |
설정
| 항목 | 설명 |
| 코드 유형 | 특정 유형의 코드만 감지합니다. 기본값 전체는 모든 유형을 감지합니다. 선택할 수 있는 유형은 아래 목록에 있습니다. |
| 선택 기준 | 최대 면적(기본), 가장 가까움, 인덱스. |
| 인덱스 (0부터) | 선택 기준이 인덱스일 때의 순번입니다. 면적이 큰 순서이며 기본값 0. |
| 기준점 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 코드가 감지되면 참. |
| 데이터 | 텍스트 | 디코딩된 문자열. |
| 코드 유형 | 텍스트 | 디코더가 보고한 코드 유형 이름(예: QR-Code, EAN-13). |
| 중심점 X / 중심점 Y | 숫자 | 코드 중심의 픽셀 좌표. |
| 너비 (픽셀) / 높이 (픽셀) | 숫자 | 코드 영역의 크기. |
| 개수 | 숫자 | 감지된 코드 수. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 코드의 배열. |
JSON 출력
코드마다 data, type, 중심 x, y, width, height를 담은 배열입니다.
[
{ "data": "https://example.com", "type": "QR-Code", "x": 320, "y": 240, "width": 100, "height": 100 },
{ "data": "1234567890123", "type": "EAN-13", "x": 500, "y": 300, "width": 80, "height": 40 }
]
코드 유형 선택지
전체, QR 코드, EAN-8, EAN-13, UPC-A, UPC-E, Code-128, Code-39, Code-93, Codabar, ITF, DataBar, DataBar-Expanded
OCR (문자 인식)
카메라 영상에서 문자를 실시간으로 감지하고 읽어옵니다. 인식 언어는 분석기 설정의 OCR 언어에서 영어(기본), 한국어, 일본어, 중국어 (간체), 독일어, 프랑스어, 스페인어, 포르투갈어, 힌디어, 아랍어, 러시아어 중 하나를 고릅니다. 분석기 하나는 한 언어만 인식합니다.
- 시간 안정화로 프레임마다 흔들리는 인식 결과를 억제합니다.
- 감지된 텍스트를 읽기 순서(위에서 아래, 왼쪽에서 오른쪽)로 정렬합니다.
명령
| 명령 | 설명 |
| 스캔 | 최소 신뢰도 이상인 텍스트를 읽기 순서대로 병합하여 기록합니다. 여러 줄이면 줄바꿈 문자 \n으로 구분됩니다. 인식 텍스트 변수를 연결하면 여러 프레임의 결과를 비교하여 안정된 텍스트가 정해졌을 때와 바뀌었을 때만 변수를 갱신하고, 텍스트가 한동안 사라지면 빈 값으로 되돌립니다. |
| 전체 스캔 | 감지된 모든 텍스트 항목을 JSON 배열로 기록합니다. |
| 텍스트 감지 여부 | 텍스트가 감지되었는지 확인합니다. |
| 텍스트 개수 | 감지된 텍스트 항목의 수를 기록합니다. |
설정
| 항목 | 설명 |
| 최소 신뢰도 (%) | 이 값 이상의 신뢰도를 가진 텍스트만 결과에 포함합니다. 0~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 텍스트가 감지되면 참. |
| 인식 텍스트 | 텍스트 | 읽기 순서대로 병합한 문자열. 여러 줄이면 \n으로 구분. |
| 신뢰도 (%) | 숫자 | 포함된 텍스트들의 평균 신뢰도. 다른 분석 타입과 달리 0~1 범위의 소수로 기록됩니다. |
| 개수 | 숫자 | 감지된 텍스트 항목 수. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 텍스트 항목의 배열. |
JSON 출력
항목마다 text, confidence(0~1 소수), 중심 x, y, width, height를 담은 배열입니다.
[
{ "text": "Hello", "confidence": 0.95, "x": 100, "y": 50, "width": 80, "height": 25 },
{ "text": "World", "confidence": 0.88, "x": 190, "y": 50, "width": 70, "height": 25 }
]
라인 트래킹
라인팔로워 로봇을 위한 기능입니다. 바닥의 라인을 감지하여 화면 중심 대비 오프셋, 기울기 각도, 라인 벡터를 제공하므로 이 값으로 조향을 보정합니다.
명령
| 명령 | 설명 |
| 라인 정보 | 감지된 라인의 감지 결과, 오프셋, 각도, 벡터, 라인 폭을 변수에 기록합니다. 주행 제어에 쓰는 핵심 명령입니다. |
| 라인 감지 여부 | 라인이 감지되었는지 확인합니다. |
| 전체 정보 (JSON) | 라인 트래킹의 모든 정보를 JSON 으로 기록합니다. |
설정
| 항목 | 설명 |
| 색상 모드 | 밝은 바탕에 어두운 라인(기본), 어두운 바탕에 밝은 라인, 색상 지정 중에서 고릅니다. 색상 지정은 아래 시작·종료 색상 사이의 색을 가진 라인을 감지합니다. |
| 시작 색상 / 종료 색상 | 색상 지정 모드에서 감지할 색상 범위입니다. 기본값은 둘 다 #FF0000 입니다. |
| 민감도 (%) | 0~100, 기본값 50. 높일수록 희미한 라인도 감지하지만 오검출이 늘고, 낮출수록 선명한 라인만 감지합니다. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 결과 | 디지털 | 라인이 감지되면 참. |
| 오프셋 X (-1~1) | 숫자 | 화면 중심 대비 라인의 수평 위치. -1(왼쪽 끝)~1(오른쪽 끝), 0이면 중앙. 좌우 보정에 씁니다. |
| 각도 (deg) | 숫자 | 라인의 기울기. -90~90도, 0이면 수직. 방향 보정에 씁니다. |
| 벡터 X0 / Y0 / X1 / Y1 | 숫자 | 라인 벡터의 시작점(X0, Y0)과 끝점(X1, Y1) 픽셀 좌표. |
| 라인 폭 | 숫자 | 화면 너비 대비 라인 폭의 비율, 0~1. |
| 결과 (JSON 텍스트) | 텍스트 | 모든 값을 담은 JSON 객체. |
라인이 감지되지 않으면 감지 결과가 거짓이 되고 나머지 숫자 값은 0으로 기록됩니다.
JSON 출력
배열이 아니라 객체 하나입니다. offset_x와 line_width는 위 표와 같이 비율 값입니다.
{
"detected": true,
"offset_x": 0.15,
"angle": 12.5,
"line_width": 0.06,
"vector_x0": 100,
"vector_y0": 200,
"vector_x1": 540,
"vector_y1": 210
}
라인 크로싱 카운터
카메라 프리뷰 위에 그린 가상의 선을 넘는 사람의 입장·퇴장 수를 자동으로 셉니다. 출입구 방문자 집계, 매장 이용객 계수에 활용합니다.
명령
| 명령 | 설명 |
| 카운트 읽기 | 현재의 입장, 퇴장, 순 카운트를 변수에 기록합니다. |
| 카운트 초기화 | 모든 카운트를 0으로 되돌립니다. |
설정
| 항목 | 설명 |
| 카운팅 라인 | 카메라 프리뷰 위에서 드래그하여 그립니다. 라인에 표시되는 화살표 방향이 IN(입장)이며, 반대 방향으로 통과하면 OUT(퇴장)으로 셉니다. |
| 신뢰도 (%) | 10~100, 기본값 50. 이 값 이상으로 감지된 사람만 카운트에 반영합니다. |
출력 변수
| 항목 | 타입 | 값 |
| 입장 카운트 | 숫자 | IN 방향으로 통과한 누적 수. |
| 퇴장 카운트 | 숫자 | OUT 방향으로 통과한 누적 수. |
| 순 카운트 | 숫자 | 입장에서 퇴장을 뺀 현재 인원. |
| JSON 결과 | 텍스트 | 세 카운트와 추적 중인 사람 목록을 담은 JSON 객체. |
JSON 출력
tracks에는 추적 중인 사람마다 추적 ID, 클래스, 중심 x·y, 크기 w·h, 통과 방향 direction(in 또는 out), 통과 여부 crossed가 들어갑니다.
{
"in_count": 5,
"out_count": 3,
"current_count": 2,
"tracks": [
{ "id": 1, "class": "person", "x": 320, "y": 240, "w": 80, "h": 200, "direction": "in", "crossed": true }
]
}
화재 감지
카메라 영상에서 불꽃을 실시간으로 감지합니다. 화재 확률이 임계값을 넘으면 참이 되는 디지털 변수로 경보음, 알림 전송, 설비 정지와 같은 자동 대응 로직을 구성합니다.
명령
| 명령 | 설명 |
| 화재 감지 여부 | 화재가 감지되었는지 확인합니다. |
| 감지 결과 | 현재 프레임의 화재 확률을 기록합니다. |
설정
| 항목 | 설명 |
| 감지 임계값 (%) | 이 값 이상의 확률일 때 화재로 판정합니다. 10~100, 기본값 30. 오탐이 많으면 올리고 미탐이 많으면 낮춥니다. |
출력 변수
| 항목 | 타입 | 값 |
| 화재 확률 | 숫자 | 현재 프레임의 화재 확률, 0~100. |
| 화재 감지 | 디지털 | 확률이 임계값 이상이면 참. |
이 타입에는 JSON 출력이 없습니다. 분석기의 모드 항목은 값에 관계없이 같은 모델로 동작합니다.
동작 인식
사람이 하고 있는 행동을 400가지 동작 카테고리(걷기, 뛰기, 앉기, 박수치기, 요리하기 등) 중에서 인식합니다. 낙상 감지, 운동 자세 확인, 행동 분석에 활용합니다.
명령
| 명령 | 설명 |
| 특정 동작 여부 | 지정한 동작이 임계값 이상의 확률로 감지되었는지 확인합니다. |
| 인식 결과 | 가장 높은 확률의 동작 이름과 확률을 기록합니다. |
| 전체 결과 | 모든 인식 결과를 확률 순으로 JSON 에 기록합니다. |
설정
| 항목 | 설명 |
| 대상 동작 | 특정 동작 여부에서 감시할 동작입니다. Kinetics-400 데이터셋의 400가지 동작 중에서 선택하며 화면에는 한글 이름이 표시됩니다. 기본값은 암벽 하강(abseiling)입니다. |
| 감지 임계값 (%) | 이 값 이상의 확률일 때 해당 동작으로 판정합니다. 10~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 동작 이름 | 텍스트 | 가장 높은 확률로 인식된 동작의 영문 이름. |
| 인식 확률 | 숫자 | 인식된 동작의 확률, 0~100. |
| 동작 일치 | 디지털 | 특정 동작 여부에서 지정한 동작이 임계값 이상으로 감지되면 참. |
| JSON 결과 | 텍스트 | 모든 인식 결과의 배열. |
JSON 출력
결과마다 label, confidence(0~100), 모델 클래스 번호 index를 담은 배열이며 확률이 높은 순서입니다.
[
{ "label": "walking", "confidence": 85, "index": 0 },
{ "label": "running", "confidence": 10, "index": 1 }
]
400가지 동작의 전체 목록은 Kinetics-400 데이터셋의 공식 라벨 목록(github.com/cvdfoundation/kinetics-dataset)을 참고합니다.
손동작 인식
카메라 앞에서 취하는 25가지 손동작(스와이프, 엄지 들기, 정지 신호 등)을 인식합니다. 비접촉 제스처 제어, 게임 입력에 활용합니다. 손 추적의 제스처 인식이 한 장면의 손 모양을 분류하는 것과 달리, 손동작 인식은 시간에 따른 움직임을 분류합니다.
명령
| 명령 | 설명 |
| 특정 손동작 여부 | 지정한 손동작이 임계값 이상의 확률로 감지되었는지 확인합니다. |
| 인식 결과 | 가장 높은 확률의 손동작 이름과 확률을 기록합니다. |
| 전체 결과 | 모든 인식 결과를 확률 순으로 JSON 에 기록합니다. |
설정
| 항목 | 설명 |
| 대상 손동작 | 특정 손동작 여부에서 감시할 손동작입니다. 25종 중에서 선택하며 기본값은 왼쪽 쓸기(Swiping Left)입니다. |
| 감지 임계값 (%) | 이 값 이상의 확률일 때 해당 손동작으로 판정합니다. 10~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 손동작 이름 | 텍스트 | 가장 높은 확률로 인식된 손동작의 영문 이름. |
| 인식 확률 | 숫자 | 인식된 손동작의 확률, 0~100. |
| 손동작 일치 | 디지털 | 특정 손동작 여부에서 지정한 손동작이 임계값 이상으로 감지되면 참. |
| JSON 결과 | 텍스트 | 모든 인식 결과의 배열. |
JSON 출력
결과마다 label, confidence(0~100), 모델 클래스 번호 index를 담은 배열이며 확률이 높은 순서입니다.
[
{ "label": "Swiping Left", "confidence": 85, "index": 0 },
{ "label": "Thumb Up", "confidence": 10, "index": 1 }
]
손동작 25종
화면에는 한글 이름이 표시되고 변수와 JSON 에는 괄호 안의 영문 이름이 기록됩니다.
왼쪽 쓸기(Swiping Left), 오른쪽 쓸기(Swiping Right), 아래로 쓸기(Swiping Down), 위로 쓸기(Swiping Up), 손 밀기(Pushing Hand Away), 손 당기기(Pulling Hand In), 두 손가락 왼쪽(Sliding Two Fingers Left), 두 손가락 오른쪽(Sliding Two Fingers Right), 두 손가락 아래로(Sliding Two Fingers Down), 두 손가락 위로(Sliding Two Fingers Up), 두 손가락 밀기(Pushing Two Fingers Away), 두 손가락 당기기(Pulling Two Fingers In), 손 앞으로 굴리기(Rolling Hand Forward), 손 뒤로 굴리기(Rolling Hand Backward), 손 시계방향 회전(Turning Hand Clockwise), 손 반시계방향 회전(Turning Hand Counterclockwise), 손 펼쳐 확대(Zooming In With Full Hand), 손 모아 축소(Zooming Out With Full Hand), 두 손가락 확대(Zooming In With Two Fingers), 두 손가락 축소(Zooming Out With Two Fingers), 엄지 위로(Thumb Up), 엄지 아래로(Thumb Down), 손 흔들기(Shaking Hand), 정지 신호(Stop Sign), 손가락 두드리기(Drumming Fingers)
번호판 인식
카메라 영상에서 차량 번호판을 실시간으로 감지하고 문자를 읽습니다. 번호판 모델은 분석기 설정의 지역에서 라틴 (EU/US/남미)(기본) 또는 한국을 고릅니다.
- 여러 프레임의 결과를 다수결로 보정하여 한 프레임의 오인식을 자동으로 바로잡습니다.
- 최소 신뢰도 필터로 잡음 결과를 제거합니다.
명령
| 명령 | 설명 |
| 스캔 | 가장 신뢰도 높은 번호판 1개의 번호, 추정 국가, 신뢰도를 기록합니다. |
| 전체 스캔 | 감지된 모든 번호판을 JSON 배열로 기록합니다. |
| 번호판 감지 여부 | 번호판이 감지되었는지 확인합니다. |
| 번호판 개수 | 감지된 번호판의 수를 기록합니다. |
설정
| 항목 | 설명 |
| 최소 신뢰도 (%) | 이 값 이상의 신뢰도를 가진 번호판만 결과에 포함합니다. 0~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 번호판이 감지되면 참. |
| 인식 번호 | 텍스트 | 인식된 번호판 문자열. |
| 추정 국가 | 텍스트 | 모델이 추정한 번호판의 국가(예: Argentina, Germany, Korea). |
| 신뢰도 (%) | 숫자 | 문자 인식의 평균 신뢰도, 0~100. |
| 개수 | 숫자 | 감지된 번호판 수. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 번호판의 배열. |
JSON 출력
번호판마다 text, region, confidence(문자 인식 신뢰도 0~100), 번호판 검출 단계의 점수 det_score, 중심 x, y, width, height를 담은 배열입니다.
[
{ "text": "ABC1234", "region": "Argentina", "confidence": 92, "det_score": 0.97, "x": 320, "y": 240, "width": 120, "height": 40 }
]
Teachable Machine 분류
Google Teachable Machine 으로 학습한 이미지 분류 모델로 카메라 영상을 분류합니다. 모델은 분석기 설정에서 올립니다. 모델 파일 (.tflite)은 TensorFlow Lite 형식의 224×224 RGB 모델만 지원하며 Floating Point 또는 Quantized 타입을 고릅니다. 레이블 파일은 모델과 함께 내보내지는 labels.txt 로, 각 줄에 클래스 이름이 순서대로 들어 있습니다. 모델을 만드는 절차는 부록 B 외부 서비스 준비를 참고합니다.
명령
| 명령 | 설명 |
| 분류 결과 | 가장 높은 확률의 클래스 이름과 신뢰도를 기록합니다. |
| 특정 클래스 여부 | 분류 결과가 대상 클래스와 일치하고 신뢰도가 임계값 이상인지 확인합니다. |
| 전체 결과 읽기 | 모든 클래스의 확률을 JSON 으로 기록합니다. |
설정
| 항목 | 설명 |
| 대상 클래스 | 특정 클래스 여부에서 비교할 클래스(라벨) 이름입니다. labels.txt 의 이름과 정확히 일치해야 합니다. 예: cat, defect. |
| 임계값 (%) | 신뢰도가 이 값 이상일 때만 매칭된 것으로 판단합니다. 0~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 클래스 이름 | 텍스트 | 가장 높은 확률의 클래스 이름. |
| 신뢰도 (%) | 숫자 | 그 클래스의 신뢰도, 0~100. |
| 매칭 여부 | 디지털 | 대상 클래스와 일치하고 임계값 이상이면 참. |
| 출력 (JSON 텍스트) | 텍스트 | 모든 클래스의 확률 배열. |
JSON 출력
클래스마다 label과 confidence(0~100)를 담은 배열이며 확률이 높은 순서입니다.
[
{ "label": "apple", "confidence": 92 },
{ "label": "banana", "confidence": 6 },
{ "label": "orange", "confidence": 2 }
]
Edge Impulse 분류
Edge Impulse 로 학습한 분류 모델로 이미지 또는 소리를 분류합니다. 비디오 분석기와 오디오 분석기 양쪽에서 같은 명령과 항목을 쓰며, 모델은 분석기 설정의 모델 파일 (.eim)에 Edge Impulse Studio 에서 내보낸 .eim 파일을 올립니다. 모델을 만드는 절차는 부록 B 외부 서비스 준비를 참고합니다.
명령
| 명령 | 설명 |
| 분류 결과 | 가장 높은 확률의 클래스 이름과 신뢰도를 기록합니다. |
| 특정 클래스 여부 | 분류 결과가 대상 클래스와 일치하고 신뢰도가 임계값 이상인지 확인합니다. |
| 전체 결과 읽기 | 모든 클래스의 확률을 JSON 으로 기록합니다. |
| 이상 탐지 여부 | 모델이 입력을 이상(anomaly)으로 판정했는지 확인합니다. 이상 탐지를 포함한 모델에서만 의미가 있습니다. |
| 이상 점수 | 이상 탐지 점수를 기록합니다. |
설정
| 항목 | 설명 |
| 대상 클래스 | 특정 클래스 여부에서 비교할 클래스(라벨) 이름입니다. 모델의 라벨과 정확히 일치해야 합니다. 예: cat, defect. |
| 임계값 (%) | 신뢰도가 이 값 이상일 때만 매칭된 것으로 판단합니다. 0~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 클래스 이름 | 텍스트 | 가장 높은 확률의 클래스 이름. |
| 신뢰도 (%) | 숫자 | 그 클래스의 신뢰도, 0~100. |
| 매칭 여부 | 디지털 | 대상 클래스와 일치하고 임계값 이상이면 참. |
| 이상 여부 | 디지털 | 이상으로 판정되면 참. |
| 이상 점수 | 숫자 | 이상 탐지 점수. |
| 출력 (JSON 텍스트) | 텍스트 | 모든 클래스의 확률 배열. |
JSON 출력
클래스마다 label과 confidence(0~100)를 담은 배열이며 확률이 높은 순서입니다.
[
{ "label": "normal", "confidence": 89 },
{ "label": "defective", "confidence": 11 }
]
Edge Impulse 객체 감지
Edge Impulse 로 학습한 객체 감지 모델로 카메라 영상에서 객체를 감지합니다. 모델은 분석기 설정의 모델 파일 (.eim)에 올립니다.
명령
| 명령 | 설명 |
| 객체 있음 | 객체가 감지되었는지 확인합니다. 객체에 라벨을 적으면 그 라벨만, 비우면 아무 객체나 대상으로 합니다. |
| 객체 개수 | 해당 라벨(또는 전체) 객체의 수를 기록합니다. |
| 객체 정보 가져오기 | 선택 기준에 맞는 객체 1개의 클래스 이름, 신뢰도, 중심점, 너비·높이를 변수에 기록합니다. |
| 모든 객체 정보 읽기 | 감지된 모든 객체를 JSON 으로 기록합니다. |
| 이상 감지 여부 | 모델이 입력을 이상으로 판정했는지 확인합니다. |
| 이상 점수 읽기 | 이상 탐지 점수를 기록합니다. |
감지 영역을 지정하면 그 영역 안의 객체만 대상으로 합니다.
설정
| 항목 | 설명 |
| 객체 | 찾을 클래스(라벨) 이름을 직접 입력합니다. 모델의 라벨과 정확히 일치해야 하며 비우면 모든 객체가 대상입니다. |
| 신뢰도 (%) | 0~100, 기본값 50. |
| 감지 영역 | 공통 사항 참고. |
| 선택 기준 | 최고 신뢰도(기본), 인덱스, 가장 큰, 가장 가까운. |
| 인덱스 (0부터) | 선택 기준이 인덱스일 때의 순번. 모델이 검출한 순서이며 기본값 0. |
| 기준점 | 공통 사항 참고. |
출력 변수
| 항목 | 타입 | 값 |
| 감지 여부 | 디지털 | 객체가 감지되면 참. |
| 갯수 | 숫자 | 감지된 객체 수. |
| 클래스 이름 | 텍스트 | 선택된 객체의 라벨. 미감지 시 빈 문자열. |
| 신뢰도 (%) | 숫자 | 선택된 객체의 신뢰도, 0~100. 미감지 시 -1. |
| 중심점 X / 중심점 Y | 숫자 | 선택된 객체 중심의 픽셀 좌표. 미감지 시 -1. |
| 너비 (픽셀) / 높이 (픽셀) | 숫자 | 선택된 객체 상자의 크기. |
| 이상 여부 | 디지털 | 이상으로 판정되면 참. |
| 이상 점수 | 숫자 | 이상 탐지 점수. |
| 출력 (JSON 텍스트) | 텍스트 | 감지된 모든 객체의 배열. |
JSON 출력
객체마다 label, confidence(0~100), 상자의 왼쪽 위 x, y, width, height를 담은 평면 배열입니다. 내장 객체 감지와 달리 bbox·center 중첩 객체가 없고 x, y가 중심이 아닌 점에 주의합니다.
[
{ "label": "person", "confidence": 87, "x": 100, "y": 50, "width": 200, "height": 350 },
{ "label": "car", "confidence": 75, "x": 400, "y": 200, "width": 150, "height": 100 }
]
Edge Impulse 이상 탐지
Edge Impulse 로 학습한 시각적 이상 탐지(Visual Anomaly) 모델로 정상과 비정상 상태를 판별합니다. 화면을 격자로 나누어 셀마다 이상 점수를 매기고, 전체의 평균과 최대 점수를 제공합니다. 모델은 분석기 설정의 모델 파일 (.eim)에 올립니다.
명령
| 명령 | 설명 |
| 결과 가져오기 | 평균 점수, 최대 점수, 이상 여부를 변수에 기록합니다. |
| 이상 탐지 여부 | 결과가 임계값 기준으로 이상인지 확인합니다. |
| 그리드 정보 | 격자 셀마다의 이상 점수를 JSON 으로 기록합니다. |
설정
| 항목 | 설명 |
| 이상 임계값 (%) | 이 값보다 높은 점수를 이상으로 판정합니다. 0~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 평균 점수 | 숫자 | 모든 격자 셀의 평균 이상 점수, 0~100. |
| 최대 점수 | 숫자 | 격자 셀 중 가장 높은 이상 점수, 0~100. |
| 이상 여부 | 디지털 | 이상으로 판정되면 참. |
| 출력 (JSON 텍스트) | 텍스트 | 평균, 최대, 격자 정보를 담은 JSON 객체. |
JSON 출력
배열이 아니라 객체 하나입니다. grid의 각 셀은 위치 x, y, 크기 width, height, 이상 점수 value(0~100)를 가집니다.
{
"mean": 45,
"max": 78,
"grid": [
{ "x": 0, "y": 0, "width": 32, "height": 32, "value": 12 },
{ "x": 32, "y": 0, "width": 32, "height": 32, "value": 67 },
{ "x": 64, "y": 0, "width": 32, "height": 32, "value": 78 }
]
}
소리 분류
오디오 분석기의 타입입니다. 마이크 입력(또는 스피커 출력)의 소리를 Google YAMNet 모델이 학습한 AudioSet 의 521가지 범주(사람 목소리, 음악, 개 짖는 소리, 알람, 유리 깨지는 소리, 비명, 자동차 경적 등) 중에서 분류합니다. 이상 소리 감지, 환경음 분석에 활용합니다. 소리의 입력원은 분석기 설정의 오디오 소스에서 마이크 (입력) 또는 스피커 (출력)로 고릅니다.
알아두기
오디오 분석은 분석 추가 뒤에 분석 시작 명령을 실행해야
결과가 기록됩니다.
명령
| 명령 | 설명 |
| 특정 소리 여부 | 지정한 소리가 임계값 이상의 확률로 감지되었는지 확인합니다. |
| 인식 결과 | 가장 높은 확률의 소리 이름과 확률을 기록합니다. |
| 전체 결과 | 모든 인식 결과를 확률 순으로 JSON 에 기록합니다. |
설정
| 항목 | 설명 |
| 감지 소리 | 특정 소리 여부에서 감시할 소리입니다. 521가지 범주(영문 이름) 중에서 선택하며 기본값은 Speech입니다. |
| 감지 임계값 (%) | 이 값 이상의 확률일 때 해당 소리로 판정합니다. 10~100, 기본값 50. |
출력 변수
| 항목 | 타입 | 값 |
| 소리 이름 | 텍스트 | 가장 높은 확률로 인식된 소리의 영문 이름. |
| 소리 확률 | 숫자 | 인식된 소리의 확률, 0~100. |
| 소리 감지 | 디지털 | 특정 소리 여부에서 지정한 소리가 임계값 이상으로 감지되면 참. |
| JSON 결과 | 텍스트 | 모든 인식 결과의 배열. |
JSON 출력
결과마다 label과 confidence(0~100)를 담은 배열이며 확률이 높은 순서입니다. 동작 인식·손동작 인식과 달리 index 항목이 없습니다.
[
{ "label": "Speech", "confidence": 85 },
{ "label": "Music", "confidence": 10 }
]
521가지 범주의 전체 목록은 YAMNet 의 공식 클래스 표(yamnet_class_map.csv)를 참고합니다.
Edge Impulse 분류 (오디오)
오디오 분석기의 AI 모델에서 Edge Impulse 분류를 고르면 Edge Impulse 로 학습한 오디오 분류 모델로 소리를 인식하고 분류합니다. 명령, 설정, 출력 변수, JSON 형식은 Edge Impulse 분류와 같습니다.
- 모델은 분석기 설정의 모델 파일 (.eim)에 올리고, 입력원은 오디오 소스에서 마이크 또는 스피커로 고릅니다.
- 분석 추가 뒤에 분석 시작 명령을 실행해야 결과가 기록됩니다.