안녕하세요, 인디아이 담당자 송희준입니다.
저번 원격 연결을 통해 지원해드렸던 내용을 다시 간추려서 추가로 답변드리고자 합니다.
먼저, 첫 번째로 문의 주신 내용에 대해서 답변드립니다.
IndyEye 제품 배송시, 함께 배송되는 Calibration Sheet와 Tool Marker를 검출하시려면 다음과 같이 설정 해주셔야 합니다.
IndyEye 안드로이드 앱의 검출 탭 구성_
1. 위의 사진과 같이 Camera - DetectMarker - Select 로 구성된 그래프를 작성합니다.
2. DetectMarker의 설정 중, 검출을 원하시는 시트를 선택합니다. (sheet / marker 중 택1)
---- 이후 ----
앱의 설정이 완료되었다면, 사용 중이신 python 스크립트에서 indyeye 클라이언트의 detect 함수를 사용하시면 마커의 좌표점을 얻을 수 있습니다.
예제_
task_pos = dcp_client.get_task_pos()
marker_pos = indy_eye.detect(1, task_pos, 'Tbo')
print(marker_pos)
수정 및 추가해주신 질문에 대한 답변은 아래와 같습니다.
indy dcp를 사용하실 경우, IndyEye 안드로이드 앱에서 연결 중인 로봇과 접속을 끊어야 합니다.
Python 스크립트에서 IndyEye Client를 통해 인디아이 그래프를 작동시키는 경우, 인디아이에서 로봇과 반드시 연결하여야 하는 것은 아닙니다.
만약 추정한 값이 전혀 엉뚱한 값이 나온다면, detect 함수 호출 시에 인자 값으로 입력한 로봇의 task position과 검출하고자 하시는 class를 정확히 입력하셨는지 확인하여 보시기 바랍니다.
detect 함수에 인자값으로 사용되는 task_pos의 경우, 로봇의 현재 자세에 대한 position을 전달하여야 하며, 검출시 전달된 로봇의 position을 좌표점 추정에 활용합니다.
따라서 marker의 pose estimation의 경우, indyeye_client.py의 detect 함수를 통해 추정된 좌표점을 반환받으실 수 있습니다.
마지막으로 말씀주신 cls 인자값의 경우, indyeye_client.py의 get_object_dict 함수에서 반환되는 값을 사용하여야 합니다.
get_object_dict 함수의 경우, 현재 그래프상에 등록된 타겟 물체의 정보를 python의 dictionary 형태로 반환합니다.
예를 들어, IndyEye 앱에서 "Camera-DetectMarker-Select"와 같이 구성되어 있을 때, DetectMarker에서 설정한 값이 "sheet"라면 다음과 같이 반환됩니다.
{"1":"sheet"}
위의 반환 값에서 "Key" : "Value" 형태의 데이터가 가지는 의미는 다음과 같습니다.
Key : 타겟의 번호(class)
Value : 타겟의 이름
여기서 추출되는 Key 값은 indyeye_client.py의 detect 함수의 cls 인자값으로 사용되며, int 형태로 입력되어야 합니다.
ex)_
objs = eye.get_object_dict()
print(objs)
# 출력 결과 : {"1":"sheet","2":"label_object1","3":"label_object2"}
# 검출하고자 하는 타겟 물체 : 캘리브레이션 시트 (1 번)
sheet_pos = eye.detect(1, task_pos, 'Tbo")
이상으로 답변을 마치도록 하겠습니다.
감사합니다.
- P.S.
마지막에 추가해주신 그림 2에서 None을 반환하는 이유는 다음의 이유 중 하나일 수 있습니다.
1. 영상에서 검출 타겟으로 설정된 sheet가 검출될 만큼의 충분한 거리 안으로 들어오지 않았을 경우
-> 해당 문제의 경우, 초점이 맞지 않는 위치에 시트가 위치할 경우 발생할 수 있습니다.
-> 시트를 인식할 수 있는 감지 가능 영역까지 시트를 위치시켜 주시면 해결할 수
2. 검출 탭에서 검출 알고리즘이 제대로 검출 결과 값을 반환하지 못할 경우
-> 해당 문제는 검출 탭에서 작성하신 그래프에서 DetectMarker와 Select 이후, 다른 알고리즘을 사용하시면서 결과가 덮어씌워진 경우일 수 있습니다.
-> 알고리즘 구성을 다시 한 번 살펴주시기 바랍니다.