HyperAI초신경
Back to Headlines

Python으로 오프라인 이미지 주석 도구 제작, 빠르고 간편하게 AI 데이터셋 구축

2일 전

AI 이미지 데이터셋 작업 시 주석이 빠르게 중요한 장애물이 되곤 합니다. 대부분의 웹 기반 도구들은 느리거나 간단한 작업에는 필요 이상으로 많은 기능을 제공하거나 오프라인에서 잘 작동하지 않는 경우가 많습니다. 저는 브라우저 UI에서 수백 개의 바운딩 박스를 마우스로 클릭하는 것에 지쳤기 때문에, Python을 사용해 가볍고 오프라인에서도 잘 작동하며 핫키를 통해 과정을 빠르게 진행할 수 있는 데스크톱 주석 도구를 만들었습니다. 이 도구는 YOLO 객체 태깅, 분할을 위한 다각형 그리기, 이미지 분류 등 다양한 작업을 빠르게 수행할 수 있습니다. 이제 직접 Python으로 사용자 정의 주석 유틸리티를 만드는 방법을 설명하겠습니다. 설정: LabelMe와 Tkinter 설치 주석 기능을 위해 LabelMe를, UI를 위해 Tkinter를 사용할 것입니다. python pip install labelme Tkinter는 Python과 함께 제공되는 경우가 많지만, 일부 시스템에서는 다음과 같이 별도 설치가 필요할 수도 있습니다. bash sudo apt-get install python3-tk 주석 도구 구현 LabelMe와 Tkinter를 사용해 주석 도구를 구현하는 단계입니다. 먼저, LabelMe의 주석 기능을 활용하기 위해 기본 코드를 작성합니다. ```python import sys import os.path as osp import labelme 주석 파일 저장 경로 설정 output_dir = osp.join(osp.dirname(file), "output") LabelMe 주석 도구 실행 labelme.MainWindow(output_dir).show() ``` 이 코드는 LabelMe 주석 도구를 실행하고, 주석 결과를 지정한 폴더에 저장합니다. 이제 이 도구를 더 사용자 맞춤화하기 위해 핫키를 추가하고, 사용자 인터페이스를 개선해 보겠습니다. 핫키 설정 마우스 클릭보다 훨씬 빠른 주석 작업을 위해 핫키를 설정합니다. LabelMe는 기본적으로 여러 핫키를 지원하지만, 필요한 핫키만 선택적으로 활성화하거나 새로운 핫키를 추가할 수 있습니다. ```python from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QAction def setup_hotkeys(main_window): # 객체 선택 핫키 (E) select_object_action = QAction("Select Object", main_window) select_object_action.setShortcut("E") select_object_action.triggered.connect(main_window.selectObject) main_window.addAction(select_object_action) # 다음 이미지로 이동 핫키 (Space) next_image_action = QAction("Next Image", main_window) next_image_action.setShortcut("Space") next_image_action.triggered.connect(main_window.nextImage) main_window.addAction(next_image_action) # 이전 이미지로 이동 핫키 (Backspace) prev_image_action = QAction("Previous Image", main_window) prev_image_action.setShortcut("Backspace") prev_image_action.triggered.connect(main_window.prevImage) main_window.addAction(prev_image_action) ``` 사용자 인터페이스 개선 사용자 경험을 높이기 위해 간단하면서도 효과적인 UI를 설계합니다. LabelMe의 기본 UI를 확장하여 필요한 기능만 추가하도록 하겠습니다. ```python class CustomMainWindow(labelme.MainWindow): def init(self, output_dir): super().init(output_dir) self.setup_hotkeys() def setup_hotkeys(self): setup_hotkeys(self) def selectObject(self): # 객체 선택 로직 print("Object selected") def nextImage(self): # 다음 이미지로 이동 로직 print("Next image loaded") def prevImage(self): # 이전 이미지로 이동 로직 print("Previous image loaded") ``` 이제 모든 설정이 완료되었으므로, 주석 도구를 실행해 보겠습니다. ```python if name == "main": import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) output_dir = osp.join(osp.dirname(__file__), "output") window = CustomMainWindow(output_dir) window.show() sys.exit(app.exec_()) ``` 이렇게 하면 가볍고 오프라인에서도 잘 작동하며 핫키를 통해 주석 작업을 빠르게 진행할 수 있는 사용자 정의 주석 도구를 완성할 수 있습니다. 이 도구는 AI 이미지 데이터셋 작업을 크게 효율화시킬 것으로 기대됩니다. 업계 전문가들은 이 도구가 AI 개발자의 생산성을 크게 향상시킬 수 있다고 평가합니다. Python과 LabelMe, Tkinter를 활용한 이 접근 방식은 성능과 유연성 사이의 균형을 잘 잡아주며, 다양한 주석 작업을 쉽게 수행할 수 있도록 돕습니다. 또한, 이 도구는 간단한 설정으로도 빠르게 시작할 수 있어, 초기 설정 시간을 줄이는 데 도움이 됩니다. 이 프로젝트를 진행한 개발사는 Python 기반의 오픈 소스 솔루션을 선호하며, 이를 통해 개발자들이 더욱 효과적으로 일할 수 있도록 지원하는 것을 목표로 하고 있습니다.

Related Links