DarkLabel1.3 - 이미지/비디오 객체 레이블링 툴 (Image Labeling and Annotation Tool)

개발한 것들 2017.07.18 11:21

동영상(avi, mpg) 또는 이미지목록에서 물체의 사각형 경계(bounding box)를 따서 labeling 및 다양한 포맷으로 저장할 수 있는 유틸러티 프로그램입니다.


이 프로그램은 물체인식이나 영상추적 목적의 DB 생성에 활용될 수 있습니다. 빠른 반응속도, 편리한 인터페이스, 작업부담을 줄여주는 편의기능(자동추적, interpolation을 이용한 라벨링, 자동 ID 라벨링)이 가장 큰 특징입니다.


비상업적 목적이라면 누구나 사용할 수 있으며 사용상 문제점, 건의사항 등이 있으면 댓글로 알려주시기 바랍니다. 원래는 제가 쓸 목적으로 만들었으나 최근에 시간을 들여서 프로그램을 개선했습니다 (ver1.3). 눈에는 잘 드러나지 않지만 프로그램의 품질을 좌우하는 미묘한 부분들, 그리고 실행의 안정성, 그리고 뭔지 모를 것들을 개선했습니다..


데모영상1(초창기 버전): https://www.youtube.com/watch?v=zFpX2bORz5E

데모영상2(darklabel1.2): https://www.youtube.com/watch?v=vbydG78Al8s

데모영상3(darklabel1.3): 조만간 잘 찍어서 올릴 예정...


DarkLabel1.3 인터페이스 화면



프로그램 다운로드 (Download)


DarkLabel1.3_part1.zip

DarkLabel1.3_part2.zip


- 무설치(실행파일 1개) / windows에서 동작 (xp 이상)

- part1과 part2를 모두 다운로드 (첨부파일 용량제한으로 나누어 올림)

- part2의 opencv_ffmpeg320.dll을 DarkLabel.exe와 같은 폴더에 놓고 프로그램 실행


[주요 기능 및 특징]

- 다양한 포맷의 비디오(avi, mpg, ...) 및 이미지 목록(jpg, bmp, png, ...) 지원

- 복수 개의 박스(box) 설정 및 label 설정 지원

- 물체인식 및 영상추적 분야에서 사용되는 다양한 데이터 포맷 지원

- 영상추적기를 이용한 자동 labeling 지원 (labeling by tracking)

- 인터폴레이션(interpolation) 기능을 이용한 구간 labeling 지원

- 각 개체에 클래스별 고유 ID를 자동으로 부여하는 auto labeling 기능 지원


[프로그램 사용법]


마우스/키보드 인터페이스 (Shift/Ctrl = Shift 또는 Ctrl)

- 마우스 드레그(drag): 박스 생성

- Shift/Ctrl + 드레그: 박스 편집

- 마우스 더블클릭: 동일 ID 객체 trajectory 일괄선택/해제 (구간 선택)

- 마우스 우클릭: 일괄선택한 객체 trajectory 전체 삭제 (구간 삭제)

- 마우스 우클릭: 가장 최근에 생성한 박스 삭제 (선택된 trajectory 없을 경우)

- Shift/Ctrl + 우클릭(특정박스): 선택한 박스만 삭제

- Shift/Ctrl + 우클릭(빈공간): 현재 화면의 모든 박스 삭제

- Shift/Ctrl + 더블클릭(특정박스): 선택한 박스의 label 수정

- Shift/Ctrl + 더블클릭(trajectory): 선택한 trajectory 상의 label 일괄 변경

- 화살표키/PgUp/PgDn/Home/End: 비디오프레임(이미지) 이동

- Enter키: 영상추적 기능을 이용한 자동 박스 생성 (labeling by tracking)


레이블 및 ID 지정

- no label: 레이블 없는 박스 생성

- box label: 사용자가 지정한 레이블 부여 (ex. human)

- box label + auto id: 사용자 지정 레이블에 id 자동 부여 (ex. human0, human1, ...)

- id가 지정될 경우 trajectory 단위 객체 선택/편집이 가능

- popup labeleditor: 미리 등록한 레이블 목록창 팝업 (labels.txt 파일에 등록)

- popup시 단축키(1~9) 누르면 해당 label 자동 입력 (여러 클래스 동시 작업에 유용)

- 화면에는 label+id 형태로 표시되지만 내부적으로는 label과 id를 구분

- gt 데이터로 저장시, label만 있는 포맷을 선택하면 화면 보이는 레이블(label+id) 저장

- gt 데이터로 저장시, label, id 구분 포맷을 선택하면 label, id가 분리되어 저장됨


Tracking 기능

- 영상추적 기능을 이용해서 다음 프레임의 박스 설정 (동일 id/label 부여)

- 최대 100개까지 동시 추적

- tracker1(robust) 알고리즘: 대상을 오래 추적 (정확도는 떨어짐)

- tracker2(accurate) 알고리즘: 대상을 정확하게 추적 (자동차 등에 유리)

- Enter키 / Next&Predict 버튼

- 주의!! 추적기능을 이용하면 다음 프레임에 원래 있던 박스는 사라짐


Interpolation 기능

- 추적 기능은 편리하지만 정확도가 떨어지는 문제점이 있음

- 비디오 구간에 걸쳐서 객체 단위로 레이블링 필요시 이용

- 1. begin interpolation 버튼: interpolation 기능 시작

- 2. 대상 객체의 궤적을 따라서 박스를 중간 중간 그려줌 (일종의 way point)

- 3. way point 박스는 자주색, 보간된(interpolated) 박스는 검은색으로 표시됨

- 4. 보간이 잘못된 부분은 수정(Shift/Ctrl+drag), way point는 얼마든지 추가(순서 무관)/삭제

- 5. end interpolation 버튼: 작업 종료 & 작업한 trajectory가 데이터로 등록됨


비디오/영상 불러오기 및 프레임간 이동

- Open Video File: 비디오 파일을 불러온다 (avi, mpg, mp4, wmv, mov, ...)

- Open Image Directory: 폴더 안의 모든 이미지를 불러온다 (jpg, bmp, png, ...)

- 영상 프레임간 이동: 키보드 →, ←, PgUp, PgDn, Home, End, 슬라이더 컨트롤


작업 데이터 저장 및 불러오기

- Load GT: ground truth 파일을 선택한 포맷으로 불러온다.

- Save GT: 선택한 데이터 포맷으로 현재까지 작업한 결과를 저장한다.

- 데이터를 불러올 때에는 실제 데이터 파일과 일치하는 포맷을 선택해야 하나 데이터를 저장할 때에는 자신이 원하는 임의의 포맷으로 저장할 수 있음

- 이미지 목록에서 작업할 경우 프레임 번호(frame#) 포맷을 사용하면 파일명 순으로 정렬했을 때의 이미지 순서가 프레임 번호가 됨 (00001.jpg, 00002.jpg, ... 와 같은 목록에 유용)

- Save Settings: 현재 선택한 데이터 포맷 및 옵션을 저장 (프로그램 실행시 자동 복원)


데이터 포맷 (Syntax)

- |: 줄바꿈

- []: 반복되는 구문

- frame#: 프레임 번호 (동영상의 프레임 번호, 이미지 목록에서는 이미지 순서)

- iname: 이미지 파일 이름 (이미지 목록에서 작업할 경우에만 유효)

- label: 레이블

- id: 객체 고유의 id

- n: 이미지에 설정된 경계사각형 개수

- x,y: 경계사각형의 left, top 위치

- w,h: 경계사각형의 폭, 높이

- cx,cy: 경계사각형의 중심(center) 좌표

- x1,y1,x2,y2: 경계사각형의 left, top, right, bottom 위치


[버전 히스토리]


* DarkLabel 1.3 (2018.03.31)

- 프로그램의 완성도를 높임 (ui, 반응속도, 안정성, 에러체크, 미세한 기능들, ...)

- trajectory 단위로 박스 선택/삭제/label수정 가능

- label(class)과 id를 분리해서 저장/로드할 수 있는 데이터 포맷 추가


* DarkLabel 1.2 (2018.02.19)

- 심각한 버그 수정: 숫자를 label로 사용할 경우 gt 데이터 로드시 오류 현상 수정

- interpolation을 이용한 labeling 기능 추가 (본문의 프로그램 사용법 참조)

- 개체 ID 자동부여 및 auto labeling 기능 추가 (본문의 프로그램 사용법 참조)

- 비디오내 프레임 이동시(navigation) GUI 반응성 개선


* DarkLabel 1.1 (2017.09.06)

- 작업결과를 동영상/이미지로 저장할 수 있는 기능 추가


* DarkLabel 1.0 (2017.07.18)

- labeling 기능 추가, tracker의 성능 및 UI 반응성 개선, 최신 비디오코덱 지원

- 프로그램 이름을 GT_Extractor에서 DarkLabel로 변경


* GT_Extractor 2.3 (2016.09.29)

- 버그 수정 (이미지 리스트에서 GT 파일 저장/불러올 때 오류 현상)


* GT_Extractor 2.2 (2016.08.26)

- 지원 비디오 포맷 추가 (avi, mpg, mp4, wmv, ...)


* GT_Extractor 2.1 (2013.08.12)

- 비디오 뿐만 아니라 이미지 목록에 대해서도 편집 가능


* GT_Extractor 2.0 (2013.01.15)

- 복수개의 대상 설정 및 추적 기능


* GT_Extractor 1.0 (2013.01.08)

- 이미지 당 하나의 대상만 설정할 수 있음


by 다크 프로그래머

  • 이전 댓글 더보기
  • yium31 2018.02.01 15:07 ADDR 수정/삭제 답글

    제가 레이블링 툴을 찾고 있었는데, 이 프로그램만큼 좋은 툴이 없네요.
    감사히 쓰겠습니다!

    • BlogIcon 다크pgmr 2018.02.02 10:14 신고 수정/삭제

      감사합니다. 최근 DarkLabel의 기능을 좀더 개선했는데 아직 시간이 없어서 올리지 못하고 있습니다 (한 2주후 업로드 예상). 개선 버전이 올라가면 그것도 한번 써보시기 바랍니다. ^^

  • kkid 2018.03.13 09:03 ADDR 수정/삭제 답글

    포스팅 정말 잘 봤습니다.
    한가지 궁금한것이 있습니다.
    만약 빅 데이터 같은경우 수동으로 일일히 레이블링 하기는 무리가 있는데
    이 경우 혹시 자동으로 레이블링 할수있습니까?

    • BlogIcon 다크pgmr 2018.03.13 17:49 신고 수정/삭제

      데이터가 많은 경우에는 인적 리소스를 이용하는게 어떠신지요. 돈을 조금 지불하면 레이블링을 해주는 곳들이 있다고 들었습니다.

  • 김동현 2018.04.06 10:38 ADDR 수정/삭제 답글

    안녕하세요 졸업프로젝트로 영상처리를 처음으로 공부하고있는 대학생입니다. 다크프로그래머님의 포스팅글들 읽으면서 큰 도움을 받고있습니다. 프로젝트 진행중에 GUI를 만들어야해서 MFC를 공부중에 다크프로그래머님의 레이블링툴을 보게되었습니다. 제가 생각했던 기능들이 많이 포함된 이상적인 툴이라 코드를 참고하고 싶은데 혹시 가능할까요??

    • BlogIcon 다크pgmr 2018.04.06 16:31 신고 수정/삭제

      코드는 공개하지 않습니다. 양해바랍니다.

  • 김현정 2018.04.09 17:14 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님. 항상 도움주셔서 감사합니다.

    혹시 bounding box/labeling 한 결과만을 저장할 수 잇는 기능이 추가된 버전이 있는지 궁금합니다.

    • BlogIcon 다크pgmr 2018.04.09 17:36 신고 수정/삭제

      네 지금은 지원하지 않는 포맷입니다. 딱히 필요한 경우가 없다고 생각되어서 포함하지 않았는데요, 혹시 어떤 경우에 필요하신가요? 말씀하신 포맷이 x, y, w, h, label 형태이지요?

  • a 2018.07.11 15:11 ADDR 수정/삭제 답글

    안녕하세요
    jpg가 들어있는 파일을 선택하면 empty image folder 라는 알림이 뜨는데 왜그럴까요?
    파일이 커지면 인식하지 못하는 건가요?
    감사합니다

    • BlogIcon 다크pgmr 2018.07.13 18:27 신고 수정/삭제

      파일이 크다고 그렇지는 않을 것 같은데요.. 제가 실행했을 때는 별 문제없이 잘 읽어집니다. 특정 jpg 이미지만 안 읽어지는 것인지 모든 jpg를 읽지 못하는 것인지 체크해 보시면 좋을 것 같습니다.

  • gchn 2018.07.15 00:17 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머님. 좋은 프로그램들을 덕분에 잘 사용하고 있습니다. 항상 감사합니다.
    다름이 아니라 혹시 해당 프로그램에서 단축키의 갯수를 늘리거나 단축키를 지정하게끔 기능을 추가 하실 계획이 있으신가요?!
    무례했다면 죄송합니다!

    • BlogIcon 다크pgmr 2018.07.19 19:00 신고 수정/삭제

      네, 가능합니다. 어떤 기능이 필요하신가요? 꼭 반영한다고 장담은 못하지만 필요한 기능이라고 판단되면 반영토록 하겠습니다.

  • 짱짱Tracking 2018.08.09 18:43 ADDR 수정/삭제 답글

    안녕하세요 최근 Tracking 관련 공부하고 있는 학생입니다
    현재 객체의 특징정을 뽑아 KLT Tracker 로 이동을 찾아서 박스를 움직이는 정도만하고있는데
    다크프로그래머 님의 프로그램에서
    알고리즘은 스케일까지
    보정해주는거 같아서 어떤방식으로 힌트라도 얻을수 있을지 궁금해서 댓글남김니다.

    • BlogIcon 다크pgmr 2018.08.10 16:23 신고 수정/삭제

      두 이미지의 대응점들 사이의 모션 변환행렬을 추정하면 스케일, 회전, 평행이동 등을 추출할 수 있습니다. http://darkpgmr.tistory.com/56 글에 관련 부분이 있으니 참고하시기 바랍니다.

  • 2423 2018.08.22 10:42 ADDR 수정/삭제 답글

    안녕하세요.
    좋은 프로그램을 공개해주셔서 감사합니다.

    사용하면서 겪었던 문제점이나 건의사항을 남기고자 합니다. 다시한번 좋은 프로그램 감사드립니다.

    1) 프로그램이 이유 없이 종료됩니다
    tracking 없이 box를 그린 후 화살표로 다음 또는 이전 이미지로 이동하다 보면 이유없이 프로그램이 갑자기 종료되는 경우가 있습니다. 거의 잦을 때는 50장에 한 번은 나타날 정도로 빈도가 잦습니다. 근데 이거도 복불복이라..
    정확하게는 이동을 하면서 한 1초 정도 버벅이는 듯 하다가 갑자기 종료되어버립니다. 이미지 사이를 화살표로 빠르게 이동할수록 더 잘 발생하는 것 같습니다.
    (1.3버전에 해당, 1.0버전은 없는 현상입니다)

    2) 자동저장 기능 추가
    위와 같은 사고를 당할 때 자동저장이 된다면 덜 낭패를 볼 수 있을 것 같습니다

    3) 단축키 지정 기능
    화살표 이동 등을 다른 단축키로 지정하거나 할 수 있다면 좋겠습니다. 아니면 화살표를 숫자키와 가까운 wasd 이 방향으로 설정할 수 있다면 괜찮을 것 같습니다.

    4) 빈 label을 생성하는 기능
    파일 이름만 기록하고 label부분은 빈 칸으로 남기는 기능이 있으면 더 좋을 것 같습니다. 객체검출에서 일명 negative sample이라는 것이 필요한 경우가 있더군요.

  • hawks 2018.10.22 07:27 ADDR 수정/삭제 답글

    안녕하세요?
    WIndow 환경에서 사용 가능한 편리한 video annotation tool을 만들어 주시고 공유해 주셔서 감사합니다.

    제가 해당 툴을 이용하여 머신 러닝에 필요한 big data를 인적 소스를 통해 만들고자 하는데 (ex. amazon mturk) 혹시 어떻게 하면 이용이 가능한지 알 수 있을까요?

    • BlogIcon 다크pgmr 2018.10.22 20:34 신고 수정/삭제

      본 프로그램은 개용인이지 클라우드 작업용에는 적합하지 않습니다. 프로그램 사용법은 본 블로그 글에 설명된 내용을 참조하시기 바랍니다.

  • habi 2018.10.22 09:09 ADDR 수정/삭제 답글

    화살표로 화면 넘기면 20~50장사이에 팅기는 버그가 있어요

    • BlogIcon 다크pgmr 2018.10.22 20:42 신고 수정/삭제

      제보 감사합니다. 제 생각에는 주기적으로 에러가 발생한다기 보다는 특정 이미지 파일에서 에러가 발생한 것이 아닌지 의심이 됩니다. 원인을 알면 해결책을 찾기 쉬울텐데, 제가 테스트할 때에는 그런 현상이 없기 때문에 원인을 파악하기가 쉽지 않습니다. 혹시 의심되는 원인이 있으면 말씀해 주시면 원인 파악에 도움이 될 것 같습니다. 저도 말씀하신 내용을 염두에 두고 그런 문제점이 발생할 가능성이 있는지 고려해 보도록 하겠습니다.

  • 김희건 2018.11.15 23:48 ADDR 수정/삭제 답글

    안녕하세요
    객체 탐지를 공부중인 대학생입니다.
    최근 yolo를 공부하며 작성자님의 티스토리를 많이 참고하였습니다.
    항상 감사드립니다.
    한가지 질문이 있어 댓글 남깁니다.
    작성자님의 프로그램은 yolo mark랑 다른 포맷으로 txt파일이 저장 되더라구요
    작성자님의 프로그램을 사용하여 뽑은 라벨txt 파일들의 포맷을
    yolo에 적용하는 방법 혹시 조언 주실수 있나요?
    답변 부탁드립니다.
    항상 좋은 정보 감사드립니다.

  • 탱구 2019.01.22 16:02 ADDR 수정/삭제 답글

    안녕하세요 다크님~
    항상 다크님의 글을 보고 많은 배움을 얻고 있습니다. 정말 감사드립니다.
    실례가 안된다면 위의 프로그램을 위해 어떠한 Tracker들을 적용하셨는지 여쭤봐도 될까요
    예전에 개발하신 Tracker과 동일한지 궁금합니다.

    • BlogIcon 다크pgmr 2019.01.22 17:59 신고 수정/삭제

      기존의 알려진 tracker들은 아니고, 제가 개발했던 것들을 조금씩 개선한 것입니다.

  • dkscks 2019.02.15 23:31 ADDR 수정/삭제 답글

    안녕하세요!
    일단 프로그램 개발 너무너무 감사합니다. 쓰기 너무 편한거 같아요!!

    한가지 질문이 있는데요! 혹시 라벨링한 파일을 txt말고 xml로 저장할 순 없는건가요?

    할수 있다면 방법 부탁드리곘습니다.ㅠㅠ 감사합니다.

    • BlogIcon 다크pgmr 2019.02.26 11:25 신고 수정/삭제

      제가 기능을 구현해서 넣으면 될텐데요.. 아직 없으니, 프로그래밍이 가능하시면 직접 변환 툴을 하나 만드시면 좋을 것 같습니다. opencv의 cv::FileStorage 클래스를 이용하면 손쉽게 xml, yml 등의 포맷으로 데이터 저장이 가능합니다.

  • 해피로퍼tv 2019.02.20 16:47 ADDR 수정/삭제 답글

    다크님 으리으리하네요 이런걸 만드시다니 장난이아닙니다 멋져요!!!!!!!!!!!!1

  • 알바96 2019.04.03 11:26 ADDR 수정/삭제 답글

    너무 감사합니다.

  • stb 2019.04.09 20:46 ADDR 수정/삭제 답글

    안녕하세요. 다크프로그래머님, 잘 사용하다가 버그가 있어서 댓글 남깁니다. 원래는 jpg, png 등 상관 없이 잘 동작했었는데, 동영상 파일(.avi)에 몇번 쓰고(auto ID 기능 사용) 다시 이미지에 쓰려고 하니까 이미지가 있는 폴더를 열어도 empty image folder! 라는 오류가 나오고 동작하지 않습니다. 재설치나 재부팅을 해봐도 마찬가지입니다.
    좋은 프로그램 만들어주셔서 감사합니다.

  • stb 2019.04.09 21:02 ADDR 수정/삭제 답글

    버그 원인 파악했습니다. 확장자가 .jpg 면 잘 불러오는데 대문자로 .JPG 써 있는 경우에는 못 불러오네요.

    • BlogIcon 다크pgmr 2019.04.21 22:11 신고 수정/삭제

      감사합니다. 확장자의 대소문자를 구분한다는 것은 생각지도 못했는데.. 발견해 주셔서 감사합니다. 심각한 버그네요. 조만간 수정버전 올릴 때 수정하여 올리겠습니다.

  • ㅇㅇ 2019.04.12 11:20 ADDR 수정/삭제 답글

    트래커 끌 수 있었으면 좋겠습니다. 이전이미지로 돌아가면 트래커가 다시잡아서 덮어씌우네요. 좋은 프로그램 감사합니다.

    • BlogIcon 다크pgmr 2019.04.21 22:13 신고 수정/삭제

      네, 저도 트래커 쪽은 불편한 점이 많아서 수정을 계속 고민중에 있습니다. 다음 버전에 보완하여 올리도록 하겠습니다. 의견 감사합니다.

  • BlogIcon 다크pgmr 2019.05.23 07:56 신고 ADDR 수정/삭제 답글

    이메일로 받은 코멘트인데, 나중에 업데이트할 때 참조용으로 적습니다. label들을 navigation할 수 있는 핫키 기능 추가. (prev, next, first, last)

  • 공부하는아이 2019.06.17 12:01 ADDR 수정/삭제 답글

    정말 멋져요!
    블로그에 글 잘보고 있습니다 :)