Visual Localization

Prev Next

Classic/VPC 환경에서 이용 가능합니다.

카메라를 포함한 비전 디바이스로부터 수집된 정보를 통해 실외 및 GPS가 통하지 않는 실내에서도 이미지만으로도 현재 위치의 측위 정보를 조회합니다. 또한 디바이스에서 수집된 WiFi 신호세기(RSSI)를 이용하여 GPS가 통하지 않는 실내에서 현재 위치를 대략적으로 알려주는 위치 측위 서비스(WiFi Localization)도 추가 지원합니다. 이를 통해 디바이스가 위치한 대략적인 위치와 함께 로케이션 정보도 함께 제공되므로 좀 더 정확하게 요청(반경 서치: lastPose + odometry 조합)이 가능합니다.

참고

WiFi Localization 기능 관련 다음 내용을 참고해 주십시오.

  • RSSI에 대한 자세한 내용은 Received signal strength indicator를 참조해 주십시오.
  • 2024년 7월 이전에 스캔한 공간에 대해서는 WiFi Localization 기능이 지원되지 않습니다.

사전 단계

ARC eye VL API를 사용하기 위한 사전 단계는 다음과 같습니다.

1. 공간데이터 구축

콘솔에서 공간데이터를 구축합니다. SLAM 데이터 변환부터 SLAM 데이터 병합, 로컬라이즈, VL 데이터 변환까지 모든 작업을 순서대로 진행해 주십시오. 자세한 진행 방법은 ARC eye 사용 가이드를 참조해 주십시오.

2. API 배포

VL 데이터 병합이 성공하면 네이버 클라우드 플랫폼 콘솔의 ARC eye > Visual Localization > API 메뉴에 대기 상태인 API가 생성됩니다. 해당 API를 선택하여 배포해 주십시오. 완료 상태로 배포가 완료되면 ARC eye VL API를 사용할 수 있습니다. API 서비스가 중지 중인 상태에서는 다른 API를 배포할 수 없습니다.
자세한 배포 방법은 ARC eye 사용 가이드를 참조해 주십시오.

요청

요청 형식을 설명합니다. 요청 형식은 다음과 같습니다.

메서드 URI
POST InvokeURL
참고

/api/vi~ 경로는 현재 버전 경로인 /vl/v1/~의 이전 버전입니다.

요청 헤더

ARC eye API에서 공통으로 사용하는 헤더에 대한 정보는 ARC eye 요청 헤더를 참조해 주십시오.

요청 바디

요청 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
image File Required 측위 대상 이미지
  • wifi 요청 시 생략 가능
cameraParameters String Optional 카메라 파라미터 정보
  • 미입력 시 기본값으로 동작
  • fx,fy,cx,cy,k1,k2,p1,p2,k3
    • fx,fy: 카메라 렌즈의 초점 거리(focal length)
    • cx,cy: 이미지 센서의 중심점 좌표(principal point)
    • k1,k2: 렌즈의 1차, 2차 방사 왜곡 보정 계수(radial distortion)
    • p1,p2: 렌즈의 접선 왜곡 보정 계수(tangential distortion)
    • k3: 렌즈의 고차 방사 왜곡 보정 계수(radial distortion)
lastPose String Optional 쿼리 이미지를 생성하는 시점에 추정된 이미지의 6-dof 포즈 정보
  • 쉼표로 구분
  • 최근 응답 받은 포즈 값에 odometry 값을 더함
  • odometry 사용 시 필수 입력
odometry String Optional 마지막 쿼리 이미지를 보낸 시점에서 현재 쿼리 이미지를 보낸 시점 사이의 포즈 변화량
  • 쉼표로 구분
  • lastPose 사용 시 필수 입력
withGlobal Boolean Optional lastPose 값 해석 방법
  • true | false
    • true: lastPose 값을 '위도, 경도, tz, qw, qx, qy, qz'로 해석
    • false: lastPose 값을 'tx, ty, tz, qw, qx, qy, qz'로 해석
withInlier Boolean Optional 위치 측위 시 사용했던 유효한 3D-2D correspondences(3D 공간의 포인트와 대응되는 2D 이미지의 픽셀 좌표) 값 표시 여부
  • true | false
    • true: 표시
    • false: 표시 안 함
wifi File Optional WiFi 신호 강도 스캔 파일
  • JSON 형식
datasetInfo String Optional 로케이션 레이어 이름에 대응되는 가공 데이터만을 이용하여 VL 쿼리 수행
  • 로케이션 이름은 쉼표로 구분

요청 예시

요청 예시는 다음과 같습니다.

curl --location --request POST '{InvokeURL}' \
--header 'X-ARCEYE-SECRET: {SecretKey}' \
--header 'Content-Type: multipart/form-data' \
--form 'image=@location.jpg;type=image/jpeg' \
--form 'odometry=0,0,0,1,0,0,0' \
--form 'lastPose=0,0,0,1,0,0,0' \
--form 'cameraParameters=1186.7,1406.5,540,960,0.0,0.0,0.0,0.0,0.0' \
--form 'withInlier=true' \
--form 'datasetInfo=1F,T2B00652308180853'

응답

응답 형식을 설명합니다.

응답 바디(성공)

조회가 성공한 경우의 응답 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
result String - 응답 결과
  • SUCCESS | FAILURE | ERROR
    • SUCCESS: 성공
    • FAILURE: 실패
    • ERROR: 오류
status String - 응답 결과 상태
message String - 응답 결과 메시지
tips String - 위치 측위 결과에 대한 참고 정보
pose String - 이미지 이름, tx, ty, tz, qw, qx, qy, qz 값
total Number - 쿼리 이미지에서 추출된 특징점의 전체 개수
inlier Number - 쿼리 이미지에서 추출된 유효한 특징점의 전체 개수
inliers Array - 위치 측위 시 사용했던 유효한 3D-2D correspondences 정보
residual Number - 유효한 특징점의 프로젝션 오류(픽셀 단위)
floor String - 쿼리 이미지의 층 정보
lonLat String - 경도(Longitude), 위도(Latitude) 값
globalPose String - 이미지 이름, 위도, 경도, 고도(altitude), qw, qx, qy, qz 값
nnPose Array - 인접한 레퍼런스 이미지들의 이미지 이름, tx, ty, tz, qw, qx, qy, qz 값
datasetInfo String - 스캔 시 구분한 각 계층의 이름들을 하나로 이어붙인 값
confidence Number - 추정된 포즈에 대한 신뢰도 값
  • 0에 가까울수록 신뢰도가 낮고, 1에 가까울수록 신뢰도가 높음
position String - 매핑 공간에서의 2자유도 위치 값(XY 평면)
datasetInfoScore String - 로케이션 구분 정확도
  • 0에 가까울수록 신뢰도가 낮고, 1에 가까울수록 신뢰도가 높음

inliers

inliers에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
U Number - 2D 이미지상의 픽셀 좌표
V Number - 2D 이미지상의 픽셀 좌표
X Number - 3D X 포인트
Y Number - 3D Y 포인트
Z Number - 3D Z 포인트

응답 바디(WiFi 성공)

WiFi Localization을 통한 조회가 성공한 경우의 응답 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
result String - 응답 결과
  • SUCCESS | FAILURE
    • SUCCESS: 성공
    • FAILURE: 실패
position String - 매핑 공간에서의 2자유도 위치 값(XY 평면)
lonLat String - 경도(Longitude), 위도(Latitude) 값
datasetInfo String - 스캔 시 구분한 각 계층의 이름들을 하나로 이어붙인 값
datasetInfoScore String - 로케이션 구분 정확도
  • 0에 가까울수록 신뢰도가 낮고, 1에 가까울수록 신뢰도가 높음

응답 바디(실패)

조회가 실패한 경우의 응답 바디에 대한 설명은 다음과 같습니다.

필드 타입 필수 여부 설명
result String - 응답 결과
  • SUCCESS | FAILURE
    • SUCCESS: 성공
    • FAILURE: 실패
status String - 응답 결과 상태
message String - 응답 결과 메시지
pose String - 이미지 이름, tx, ty, tz, qw, qx, qy, qz 값
floor String - 쿼리 이미지의 층 정보
lonLat String - 차례대로 경도(Longitude), 위도(Latitude)
globalPose String - 차례대로 이미지 이름, 위도, 경도, 고도(altitude), qw, qx, qy, qz 값
confidence Number - 추정된 포즈에 대한 신뢰도 값
  • 0에 가까울수록 신뢰도가 낮고, 1에 가까울수록 신뢰도가 높음

응답 예시

응답 예시는 다음과 같습니다.

성공

조회가 성공한 경우의 응답 예시는 다음과 같습니다.

{
  "result": "SUCCESS",
  "status": "success",
  "message": "Localization successful",
  "tips": "",
  "pose": "VL0_0000050014880892_000000006.jpg,2.746507,9.889554,-20.729435,0.657244,-0.096816,-0.068169,0.744318",
  "total": 7738,
  "inlier": 1762,
  "inliers": [
    {
      "U": 356.8439,
      "V": 146.9978,
      "X": 114.01553,
      "Y": 233.33755,
      "Z": 12.9115095
    }
  ],
  "residual": 5.998124,
  "floor": "ground",
  "lonLat": "126.61787915108854,37.47318807235039",
  "globalPose": "VL0_0000050014880892_000000006.jpg,37.47318807235039,126.61787915108854,21.688565,0.657244,-0.096816,-0.068169,0.744318",
  "nnPoses" : [
      "40027089_1665033685979869.jpg,753.835632,-1213.756958,10.821537,-0.248478,0.098745,-0.0035,0.963585",
      "40027089_1652160158579869.jpg,734.655884,-1225.50354,11.025743,0.947723,0.057711,-0.073033,0.305217",
      ...
      "40027089_1652160155379869.jpg,732.119873,-1227.255127,11.040028,0.948575,0.056153,-0.07237,0.303009",
      "40027089_1652160158979869.jpg,734.967834,-1225.28418,11.024983,0.946591,0.057514,-0.07298,0.308759"
   ],
  "datasetInfo": "NationalMuseumKorea_1F_T2B00652308180853",
  "confidence": 0.834586441516876
}

성공(WiFi)

WiFi Localization을 통한 조회가 성공한 경우의 응답 예시는 다음과 같습니다.

{
  "result": "SUCCESS",
  "position": "16.6337711608804,5.690108685931897",
  "lonLat": "127.105412759367,37.359465269300976",
  "datasetInfo": "Naver_1784_1F",
  "datasetInfoScore": 0.6852494
}

실패

조회가 실패한 경우의 응답 예시는 다음과 같습니다.

{
  "result": "FAILURE",
  "status": "success",
  "message": "Invalid parameters",
  "pose": "",
  "floor": "",
  "lonLat": "",
  "globalPose": "",
  "confidence": 0
}
참고

API 호출이 실패한 경우의 응답 바디와 응답 예시는 ARC eye 개요를 참조해 주십시오.