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

개발한 것들 2017. 7. 18. 11:21

동영상 또는 이미지에 ID를 가진 물체 경계사각형(bounding box)를 labeling할 수 있는 유틸러티 프로그램입니다. 학습 데이터 생성 외에도 이미지들을 동영상으로 합치거나 분리할 때, 개인정보 보호를 위해 사람 얼굴 등을 모자이크하는 용도로도 활용할 수 있습니다.


This is a utility program that can label object bounding boxes with ID in videos and images. Anyone can use it for non-commercial purposes. If you have any inquiry or suggestion, you can leave message below or email to darkpgmr.lee at gmail dot com.


※ This program is not code-signed and can be blocked by Windows.



DarkLabel 2.0 (2020.07.14)


download executable: DarkLabel2.0.zip (last updated July 14, 2020)

download previous versions: check Version History below


Tutorial Video (https://www.youtube.com/watch?v=lok30aIZgUw)


old demo1(gt_extractor): https://www.youtube.com/watch?v=zFpX2bORz5E

old demo2(darklabel1.2): https://www.youtube.com/watch?v=vbydG78Al8s



Main Features (주요 기능 및 특징)

  • bounding box labeling of video & image objects
  • support predefined data formats (pascal_voc/imagenet, darknet yolo)
  • support user-defined data formats (formats can be defined in 'darklabel.yml')
  • automatic box labeling by visual tracking
  • semi-automatic labeling by linear interpolation
  • user-defined hotkeys and zoom in / zoom out support
  • export annotation result as videos or images (it can be used to split a video file into images or vice versa)
  • privacy masking of annotated regions by resolution degradation (export annotation result after enabling 'apply_bbox_mosaic' parameter in darklabel.yml)
  • windows only (32/64 bits system)


How to use (프로그램 사용법)


Arrow/PgUp/PgDn/Home/End: navigate image frames

Mouse: Left(create box), Right(cancel latest)

Shift+Mouse: Left(modify box), Right(delete selected/all)

Shift+DoubleClick: modify box properties (label, ID, difficulty)

Ctrl+DoubleClick: select/deselect box trajectory

*box trajectory: linked boxes over frames with the same ID and label

Ctrl+'+'/'-': zoom in/out

Ctrl+Arrow: scroll zoomed window

Ctrl+MouseWheel: zoom in/out

Ctrl+Mouse: scroll zoomed window

Enter key: apply tracking (newly created boxes only)

F1 key: show this help

Ctrl+'s': save gt


Remark (2020.7.9)


그동안 프로그램이 이유없이 죽는다는 댓글들이 종종 있었는데, 원인을 모르다가 최근에야 UI delay를 없애기 위해 도입했던 thread 처리에 문제가 있었음을 알게 되었습니다. 이번 DarkLabel 2.0에서는 대부분  문제를 제거했지만 혹시 남은 문제가 발견되면 피드백 바랍니다.


Version History


DarkLabel 2.0 (2020.06.29)

- support machine learning formats: xml(pascalvoc/imagenet), txt(darknet yolo)

- support user-defined data formats (data formats can be defined in 'darklabel.yml')

- correct program stability problem (bug-fix related to unexpected program exit)

- support zoom in / zoom out of working image

- add user-configurable hotkeys (it can be modified in 'darklabel.yml')

- labeling by tracking is now applied only to newly created boxes (keep the old boxes)

- lots of minor revision to enhance user convenience and program stability


* 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 다크 프로그래머

  • 이전 댓글 더보기
  • habi 2018.10.22 09:09 ADDR 수정/삭제 답글

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

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

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

    • BlogIcon Haewon Lee 2019.07.05 10:47 신고 수정/삭제

      이 에러때문에 저도 들어왔습니다.
      왼/오른쪽 방향키로 이미지를 넘길 때는 상관이 없습니다만 라벨링과 함께 할 때만 에러가 나면서 프로그램이 죽습니다.

      에러 재현방법은 다음과 같습니다.
      1. 이미지가 담겨있는 폴더를 불러온다.
      2. 이미지 박싱을 하고 다음 사진으로 넘긴다.(predict 버튼으로 넘기는게 아님.)
      3. 2번 작업을 계속 반복하다보면 에러가 나면서 프로그램이 종료된다.(박싱을 많이 그려놨을 수록 튕길확률 높아짐)

      참고하시면 될 것 같습니다

    • BlogIcon 다크pgmr 2019.07.10 18:51 신고 수정/삭제

      감사합니다. 저도 동일하게 테스트해 보았는데 제 경우는 에러가 안나서 좀더 봐야겠습니다. 두 분이 동일한 증상이시니 어딘가 문제가 있을텐데 좀더 원인 파악을 해봐야겠습니다.

  • 김희건 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 수정/삭제 답글

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

  • 다크비전 2019.08.29 17:10 ADDR 수정/삭제 답글

    안녕하세요 프로그램 너무나 잘쓰고 있습니다.
    공부할겸 비슷한 툴을 만들어보고 있습니다 그중에 혹시 c#에서 어떻게 Rectangle에서 line 하나만을 선택해서 편집하는기능이 너무 유용해서 꼭 추가 하고싶은데 하나의 라인을 선택하는방법에 대해서 잘 떠오르지 않습니다. 어떻게 하는지 검색에도 잘 안나오네요 혹시 이부분 답변 가능하시면 정말 감사하겠습니다.

    • BlogIcon 다크pgmr 2019.09.03 13:41 신고 수정/삭제

      c#은 제가 다루는 언어가 아니라 잘 모릅니다. 하지만, 라인이라는 객체가 따로 존재하는 것이 아니라 단지 이미지에 선을 그리는(drawing) 기능을 이용한 것입니다.

  • 2 2019.11.12 12:30 ADDR 수정/삭제 답글

    혹시 바운딩박스 선의 색상이나 모양을 바꿀수는 없는건가요 ㅠㅠ

  • thap 2019.11.18 23:18 ADDR 수정/삭제 답글

    안녕하세요, 편리한 툴 만들어 주셔서 감사합니다.
    영상 어노테이션을 하고 있는데 프레임을 7, 15, 30프레임 단위로 넘길 수 있으면 좋겠습니다.
    모든 프레임을 태깅하기 힘들어서 일정프레임당 샘플링하려고 하니, 일일히 화살표 누르면서
    프레임 스킵하는게 중노동이더군요.
    기능이 구현된다면 30fps영상이라면 화살표 한번에 30프레임(1초) 넘기고 박스 하나씩 그리면서
    빠른 어노테이션이 가능할 것 같아서 문의드려 봅니다. 감사합니다.

    • BlogIcon 다크pgmr 2020.02.24 13:59 신고 수정/삭제

      안녕하세요. 말씀하신 것처럼 이동값을 설정할 수는 없지만 현재 PgUp이나 PgDn 키를 누르면 30 프레임씩 이동하도록 구현되어 있긴 합니다.. Annotation이 중노동이긴 합니다..

    • BlogIcon 다크pgmr 2020.06.03 09:09 신고 수정/삭제

      해당 기능을 지원토록 수정 중에 있습니다.

  • Pavel 2020.03.07 05:36 ADDR 수정/삭제 답글

    你好如果您跟踪對象並保存在avi中。我可以恢復\繼續編輯嗎?我無法以任何方式找到此功能,請幫忙!答案是電子郵件ppavelk@mail.ru,請!

  • pavi 2020.06.30 01:47 ADDR 수정/삭제 답글

    6.29 현재버전 작동이안됩니다. ㅜㅜ 수정좀해주세요. 윈도우7 64비트 윈도우10 64비트 둘다 작동이안됩니다.

    • BlogIcon 다크pgmr 2020.06.30 09:41 신고 수정/삭제

      아마도 윈도우즈 보안 때문에 실행이 차단된 것 아닌가 싶습니다. 보안 문제를 해결하려면 인증서를 구매해서 프로그램에 전자서명을 해야 하는데, 만만치 않은 일이네요.
      만일 프로그램 실행은 되지만 정상적으로 동작하지 않는 문제라면 좀더 구체적으로 어떤 현상인지 알려주시면 상황 파악에 도움이 될 것 같습니다.

  • paci 2020.06.30 13:55 ADDR 수정/삭제 답글

    윈10 64비트는 더블클릭하여실행했을때 무반응입니다.
    윈7 64비트는 작동이중지되었습니다라는메시지가뜨면서 실행이안됩니다.

  • paci 2020.06.30 13:57 ADDR 수정/삭제 답글

    방화벽 디펜더해제해도안되는것같습니다

    • BlogIcon 다크pgmr 2020.06.30 17:28 신고 수정/삭제

      글쎄요 저도 원인은 모르겠네요.. 제가 가진 pc들, 노트북들, 지인들 컴퓨터들에서는 특별히 방화벽이나 보안수준 변경 없이 모두 실행이 됩니다.
      지금으로서는 저도 원인을 알기 어려우니 기회되는대로 좀더 많은 컴퓨터에서 테스트를 해봐야겠습니다.

    • BlogIcon 다크pgmr 2020.07.14 13:16 신고 수정/삭제

      안녕하세요. 저도 다시 확인해보니 예전 버전의 윈도우에서는 동작하지 않는 것을 확인했습니다. 32비트 윈도우에서도 동작할 수 있도록 프로그램을 다시 빌드해서 올렸습니다. 문제를 알려주셔서 감사합니다.

  • zoooo 2020.07.20 17:00 ADDR 수정/삭제 답글

    안녕하세요 다크프로그래머 님의 글에 늘 도움을 받고 있습니다 진심으로 감사드립니다 지금 labeling을 만들고 있는데 저는 도저히 ctrl+휠로 확대하는 기능이 안돼서요 ㅠㅠ 새로 확대된 화면이 나타나고 전은 지워지는 방식으로 가네요 .. 혹시 화면 zoom in/out 기능은 어떻게 구현하셨는지 도움 받을 수 있을까요?

    • BlogIcon 다크pgmr 2020.07.20 18:14 신고 수정/삭제

      새로 확대된 화면이 나타나고 전에 것이 지워지는 것은 이상한 것이 아닌데.. 그게 왜 문제인지
      모르겠네요.
      구현은 여러가지가 있겠지만 저는 opencv에서 Mat에 roi를 설정하는 방법을 이용했습니다.

  • 우주대스타 2020.07.21 20:24 ADDR 수정/삭제 답글

    이 프로그램은 오픈소스인가요??