Exhibition: The Ulixes Project - Beta v2.0
The Ulixes Project
소식
10월 2일 The Ulixes Project Beta v2.0이 출시되었습니다.
진행 이유
본 프로젝트 진행 이유는 아래 게시글을 참고해주시면 감사드리겠습니다.
그러나 지금 현재 본 프로젝트는 합성 이미지의 제작보다는 원본 이미지의 원활한 레이블링을 서포트해줄 소프트웨어로서의 방향성만 지니고 있습니다.
개발 환경
개발 도구
- Visual Studio Code
개발 언어
- Python 3.8.2
라이브러리
- Tkinter
- Pillow
- OpenCV
- Matplotlib
기능
Beta v2.0에 개선된 기능 및 추가된 기능은 다음과 같습니다.
- 대략적인 이미지 회전 (기존에는 명시적인 이미지 회전만 존재)
- 레이블링된 이미지에 대한 이미지 변환 (Thresholding을 이용)
- 이미지 미리보기
- 이미지 삭제 (목록에 있는)
- 이미지 자르기
- 이미지 검사 (이미지가 에러를 가지고 있는지/없는지, 수동 검사)
- 이미지 이름 변경 (옵션: Labeled)
모든 기능은 빠른 작업을 위하여 지정된 단축키를 이용하여 해당 기능이 동작하도록 제작되었습니다.
화면
메인 화면
이미지 불러오기 전
이미지 불러오기 후
회전 메뉴
대략적인 회전
명시적인 회전
이미지 자동 이름 짓기
이미지 레이블링
이미지 자르기
이미지 검사하기
이미지 미리보기
이미지 내보내기
사용법
프로그램 실행
아래의 주소에서 zip 파일을 다운로드합니다.
The Ulixes Project - Beta v2.0
다운로드한 zip 파일을 사용하실 특정 폴더로 이동시킵니다.
zip 파일의 압축을 해제합니다.
압축 해제되어 나온 Ulixes.exe 파일을 실행합니다.
이미지 불러오기
Import 버튼을 클릭하여 나온 Dialog 창에서 이미지 파일을 단일 또는 다중 선택합니다.
선택된 이미지들의 목록이 리스트 박스에 표시됩니다.
이미지 회전
회전을 적용할 이미지들을 리스트 박스에서 선택합니다.
단축키 r 키(대문자 아님)를 누르면 다음의 메뉴 창이 화면에 표시됩니다.
대략적인 회전
UI에 설정되어 있는 회전각을 설정하기 위해서는 대략적인 회전(Rough Rotation) 기능을 사용하시면 됩니다.
회전 메뉴 창에서 Rough Rotation을 클릭하면 다음 창이 화면에 표시됩니다.
UI에 설정되어 있는 회전각을 클릭하면 Ulixes.exe가 존재하는 폴더에 다음과 같이 export 폴더가 생성되고,
그 내부에 결과 이미지들이 추출되어집니다.
구체적인(명시적인) 회전
Rough Rotation에서처럼 UI에 설정되어 있는 회전각을 설정하는 것이 아닌 임의로 회전각을 설정하기 위해서는 다음의 구체적인(명시적인) 회전(Specific Rotation) 기능을 사용하시면 됩니다.
회전 메뉴 창에서 Specific Rotation을 클릭하면 다음 창이 화면에 표시됩니다.
다음과 같이 회전 각을 입력하신 후 Apply 버튼을 눌러주면,
이미지들에 회전각이 적용됩니다.
그러나 이는 위의 대략적인 회전에서와는 다르게 Ulixes.exe Directory의 export Directory 내에 결과 이미지들이 자동으로 생성되지 않으므로 이를 위해서는 먼저 열려있는 Rotation 창을 닫고 메인 화면에 있는 다음의 Export 버튼을 눌러주어야 합니다.
그러면 다음과 같이 Ulixes.exe 파일이 존재하는 Directory 내에 export 폴더가 생성되고,
그 내에 회전된 결과 이미지들이 다음과 같이 저장됩니다.
이미지 자동 이름 짓기
이름을 새로 지을 이미지들을 리스트 박스에서 선택합니다.
단축키 n 키(대문자 아님)를 누르면 다음의 메뉴 창이 화면에 표시됩니다.
어떠한 숫자(여기서는 1)부터 파일명이 시작될지를 다음과 같이 명시한 후 Apply 버튼을 클릭하면,
다음과 같이 프로그램의 목록에서 뿐만 아니라,
다음과 같이 실제 그 이미지 파일들이 존재하는 Directory 내에서도 파일명이 변경됨을 확인하실 수 있습니다.
그렇다면 Labeled 옵션을 클릭하면 어떻게 될까요?
이번에도 어떠한 숫자(여기서도 1)부터 파일명이 시작될지를 다음과 같이 명시한 후, Labeled 체크박스까지 체크하고서,
Apply 버튼을 클릭하면 다음과 같이 프로그램의 목록에서 Label_로 파일명이 시작되게끔 변경될 뿐만 아니라,
실제 그 Directory 내에서도 변경됨을 확인하실 수 있습니다.
이렇게 함으로써 원본 이미지와 레이블링된 이미지들의 이름을 간편하고 빠르게 지을 수 있고, 그렇기에 이러한 이미지들을 바로 모델에 주입하는 데도 용이합니다.
이미지 미리보기
이미지 미리보기 기능은 필자가 Matlab 플랫폼에서 레이블링을 진행했을 때 그 이미지를 확인하는 것이 불편할 뿐만 아니라 별도의 처리 없이는 확인이 불가능하기에 제작된 기능입니다.
먼저 다음과 같이 레이블링된 이미지를 확인해보면, 검은색 사진에서 어느 부분이 Labeled 되어 있는지 확인하는 것이 불가능합니다.
Thresholding을 이용하여 Matlab의 결과 이미지에서 매우 작은 픽셀 값을 지니는 영역을 모두 255로 변환해주기에 레이블링된 영역을 육안으로 확인할 수 있습니다.
Matlab이나 기타 플랫폼에서 레이블링이 되어 육안으로 확인할 수 없는 이미지를 다음과 같이 불러오고 선택해줍니다.
그 다음 단축키 p 키(대문자 아님)를 누르면 다음과 같이 미리보기 창이 뜨면서 위에서는 보이지 않았던 Labeled 된 영역을 확인하실 수 있습니다.
참고: 목록에서 복수 개의 이미지를 선택하고 단축키 p키를 입력하였다면, 엔터 키를 눌러서 다음 사진을 미리보기 할 수 있다.
이미지 레이블링
이미지 레이블링 기능은 기존 사용하던 Matlab 플랫폼에서 Pixel Label을 등록한 순서에 맞게 순서대로 \(1, 2, 3, \cdots\)이 Pixel 값으로 자동 배정되어 편리하였으나, Mac OS에는 최적화가 제대로 이루어지지 않아 속도가 매우 느렸고, 오류가 잦아 다른 플랫폼으로 이전을 하게 되었습니다. 하지만 이전한 플랫폼에서는 Matlab에서와는 다르게 Pixel 값을 자동으로 배정해주는 기능이 존재하지 않았고, 그래서 본 기능을 제작하게 되었습니다.
이번에는 Mask Layer을 Greyscale로 Export하여 생성된 다음 Pixel Image를
위의 Labeled 된 이미지는 카테고리 값 즉, 매우 작은 값으로 변환되지 않았기 때문에 육안으로 확인이 가능한 것입니다.
다음과 같이 프로그램으로 불러온 후 선택해줍니다.
그 다음 단축키 t 키(대문자 아님)를 누르면 다음과 같은 창이 뜨게 됩니다.
다음과 같이 적당한 Threshold 값을 부여해주고, (적당한 Threshold 값은 본 프로그램의 미리보기 기능을 활용하면 도움이 될 것입니다.) 변환하고자 하는 Pixel Value (예를 들어, 1)도 입력해준 다음, Apply 버튼을 누릅니다.
그러면 다음과 같이 Ulixes.exe 파일이 있는 Directory 내의 export Directory 내에 Label이라는 Directory가 생성된 것을 확인하실 수 있으실 뿐만 아니라,
그 내에 변환된 이미지도 존재함을 확인하실 수 있습니다.
이것 역시 이미지를 열어보면 다음과 같이 Threshold Value 이상인 값들이 모두 Pixel Value 1로 변환되기 때문에 육안으로는 확인이 불가능합니다.
그러므로 본 프로그램의 미리보기 기능을 활용하면 다음과 같이 이를 확인하실 수 있습니다.
또한, Matlab을 이용하여 본 이미지를 읽어들인 후에 Pixel Value를 .Xslx로 Export하여 이를 확인해보면, Threshold Value보다 큰 Pixel Value에 대해서는 모두 1로 변경되었음을 확인하실 수 있습니다.
이미지 자르기
본 기능은 원본 이미지와 레이블링된 이미지에 대해서 서로 측면 부분에서 매칭이 되지 않아 이것을 동시에 맞추기 위해서 개발한 기능입니다.
매칭이 되지 않아 수정이 필요한 원본 이미지와 레이블링된 이미지 2장을 다음과 같이 불러온 후 선택해줍니다.
그 후, 단축키 o 키(대문자 아님)를 누르면 다음과 같은 창이 뜨게 됩니다.
다음과 같이 시작 너비 값과 끝 너비 값 그리고 시작 높이 값과 끝 높이 값을 각각 설정한 후 Apply 버튼을 누릅니다.
그러면 Ulixes.exe 파일이 있는 Directory 내의 Export Directory 내에 다음과 같이 두 결과 이미지가 내보내졌음을 확인하실 수 있습니다.
이미지 삭제 (목록)
이는 프로그램 목록에 존재하는 파일들을 삭제하기 위해서 개발한 기능입니다.
다음과 같이 삭제하고자 하는 파일들을 목록에서 선택한 후, (복수 선택 가능합니다.)
단축키 d 키(대문자 아님)를 누르면 다음과 같이 프로그램의 목록에서 선택한 파일들이 삭제됨을 확인하실 수 있습니다.
이미지 검사하기
본 기능은 원본 이미지와 레이블링된 이미지를 불러온 뒤, 두 이미지 중 어떤 이미지가 매칭이 되지 않는지를 검사할 때 사용하는 기능입니다.
다음과 같이 검사하고자 하는 원본 이미지와 레이블링된 이미지를 복수로 불러오고 선택한 후,
단축키 c 키(대문자 아님)를 누르면 다음과 같은 창이 표시됨을 확인하실 수 있습니다.
(또한, 위에서 복수로 불러온 뒤 선택한 파일 리스트와 다음에서 표시되는 리스트가 동일함도 확인해보실 수 있습니다.)
그 다음, 다시 Main 화면으로 돌아가서 원본 이미지와 레이블링된 이미지를 각각 선택한 후, (복수 선택 가능합니다.)
단축키 p 키(대문자 아님)를 눌러 각 사진들의 미리보기를 진행한 뒤, (미리보기 생략)
만약 오류가 있는 사진이 있다면, 다시 다음의 창으로 넘어와서 해당 이미지를 선택한 다음, (EX, Label_2.jpg)
Export 버튼을 클릭하면, 다음과 같이 Ulixes.exe 파일이 있는 Directory 내에 extract.txt 파일이 생성됨을 확인하실 수 있습니다.
해당 파일을 열어보면 다음과 같이 위에서 선택한 파일의 이름이 작성되어 있음을 확인할 수 있고,
이곳에 추출된 파일명에 해당하는 이미지들만 다시 레이블링 작업을 진행하면 신속하게 작업을 수행할 수 있을 것입니다.
참고
The Ulixes Project는 OpenSource Project로서 본 프로젝트에 관심이 있으신 분들께서는 아래의 깃헙 링크로 접속하신 후에 포크해주시고 Contribute 해주시면 감사드리겠습니다.
댓글남기기