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

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

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

 

※ 이 프로그램은 코드서명을 하지 않았기 때문에 Windows 및 웹브라우져에 의해 다운로드 및 실행이 차단될 수 있습니다 (참고링크). 100% 안전한 프로그램이긴 합니다만 필요한 분들만 사용하시기 바랍니다..

 

 

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.

 

※ Since this program is not code-signed, download and execution may be blocked by Windows and web browsers. This is a personally created program and a 100% safe program, but only for those who need it.

 

 

DarkLabel (Ver.2.3-update1, 2021.03.23)

 

direct download: DarkLabel2.3-update1.zip

github: https://github.com/darkpgmr/DarkLabel

previous versions: check Version History below

 

DarkLabel2.0 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 (주요 기능 및 특징)

  • Video/image object labeling & annotation tool (bounding box with ID and label)

- automatic object labeling by visual tracking (multi-target)

- semi-automatic labeling by linear interpolation

- user-configurable hotkeys and zoom in / zoom out support

- user-configurable data formats (pascal voc, darket yolo, xml/txt, any other user-defined formats)

  • Video splitting (into images) & image merging (into a video file) tool
  • Video cropping tool (cut and save only the selected section in the video)
  • Video/image privacy masking tool (mosaic the box area in the image)
  • Windows only (32/64 bits)

 

Program Configuration (프로그램 설정)

 

The program can be configured by modifying darklabel.yml attached in the zipped archive.

  • define and modify data formats
  • change hotkeys (frame navigation, action keys)
  • change video/image export setting (video codec, frame rate, image format)
  • set default save/load directory
  • define class labels
  • adjust GUI drawing (box width, box color, ...)

 

Basic Instruction (프로그램 사용법)

 

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

 

Mouse: Left(create box), Right(cancel the most recently created box)

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

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

 

DoubleClick: select/deselect box trajectory

*box trajectory: boxes connected across frames with the same ID and label

 

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

Ctrl+Arrow: scroll zoomed window

Ctrl+MouseWheel: zoom in/out

Ctrl+MouseDrag: scroll zoomed window

 

Enter: apply tracking (selected trajectories or newly created boxes only)

Ctrl+'s': save gt

F1: show this help

 

 

Advanced Instruction (고급 사용법)

 

  • Labeling by object tracking

- By pressing 'Return' key, newly created bounding boxes in the current frame are tracked in the next frame and labeled automatically. (newly created boxes: the boxes that are created after entering the frame)

- If there are selected trajectories in the frame (object trajectory can be selected by double clicking a box), only the trajectory boxes are tracked (newly created boxes are not tracked).

- If tracking is applied to trajectories, it first deletes their tail parts (connected trajectory boxes after the current frame) and then continue the tracking, keeping their IDs and labels. This functionality can be used to correct previous wrong tracking.

  • Data Sampling/gathering

If you want to sample images in a video and save them (e.g. gathering training samples), draw dummy boxes on the images and then export the annotation results as images with the "no box drawing" option selected and the "labeled frames only" checked.

  • Privacy Masking

draw boxes on the privacy area (e.g. human faces) and then export the annotation results with the "mosaic the box area" option selected.

  • Full screen mode

do annotation in full screen mode in case the image is too large to show in your monitor (double click the title bar of image window). You also can utilize zoom in functionality.

  • Don't forget to save your annotation results as often as possible. You can just press Ctrl+S.

 

Remark (2020.7.9)

 

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

 

Version History

 

DarkLabel 2.3-update1 (2021.03.23)

- fix the program to sort image list naturally by their file name

. before: 0.jpg, 1.jpg, 10.jpg, 100.jpg, 101.jpg, ...

. after: 0.jpg, 1.jpg, 2.jpg, 3.jpg, ...

 

DarkLabel 2.3 (2020.10.25)

- enable selection of multiple object trajectories at the same time

- tracking is applied for object trajectories.

- minor bug fixes..

 

DarkLabel 2.2 (2020.10.20)

- support media cropping (the selected section in the video / image list)

- it's able to change export settings on the GUI.

 

DarkLabel 2.1 (2020.09.10)

- add two new parameters to support easy data gathering/sampling in darklabel.yml

  . export_labeled_frame_only

  . export_without_box_drawing

- doesn't popup message box now after video/image save is done.

 

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

  • 이전 댓글 더보기
  • 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 수정/삭제 답글

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

    • BlogIcon 다크pgmr 2020.08.08 22:23 신고 수정/삭제

      오픈소스는 아니고 바이너리만 제공하고 있습니다.

  • juchanseo 2020.08.06 19:12 ADDR 수정/삭제 답글

    안녕하세요 혹시 라벨링시에 gpu로도 실행이 가능한가요? 디스플레이 설정에서는 darklabel 프로그램을 gpu로 설정 해놓았는데 cpu로만 실행이 되는것 같아서요!

    • BlogIcon 다크pgmr 2020.08.08 21:35 신고 수정/삭제

      아니요.. gpu 코드는 사용하지 않았습니다.

  • prev 2020.09.01 11:18 ADDR 수정/삭제 답글

    안녕하세요 버전업 감사드립니다.
    예전 1.0 버전에서처럼 frame#,n,[x1,y1,x2,y2,label] 형태로 저장할수있는 방법은 없을까요?
    예를 들면 아래처럼요..

    434,2,654,310,813,703,2,780,158,893,431,4
    436,3,644,313,803,706,2,781,150,894,423,4,95,197,258,519,6

    (434번째 프레임에 2개의 객체, 2번객체와 4번객체)
    (436번째 프레임에 3개의 객체, 2번, 4번, 6번)

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

      네, 그 부분은 저도 버전업하면서 내심 고민했던 부분입니다. 구현의 어려움과 일반적으로 사용되는 포맷과의 호환성을 위해 해당 포맷은 더 이상 지원하지 않게 되었습니다. 이전 포맷은 파일 내의 오류 하나로 인해 해당 프레임 전체의 데이터가 날아가는 문제가 있고, 또한 matlab 등에서의 데이터 파싱이나 csv 등 다른 포맷으로 변환도 어려운 문제점이 있습니다. 계속 고민하다가 구버전 지원을 못하더라도 새로운 포맷으로 전환하게 되었습니다. 원래 첫 단추를 잘 끼웠어야 했는데, ... ㅠㅠ

  • xeblin 2020.09.06 17:48 ADDR 수정/삭제 답글

    안녕하세요 개발자님
    object detection 공부중인 학생입니다. 좋은프로그램 감사합니다.
    라벨링 정보를 입력할때 x1,y1,이 각각, 바운딩박스의 xmin,ymin 좌표인지 아니면 xcenter,ycenter좌표 인지 궁금합니다.

    • BlogIcon 다크pgmr 2020.09.07 12:31 신고 수정/삭제

      annotation data format은 darklabel.yml 파일에서 원하는 형태로 수정 및 등록해서 사용할 수 있습니다. 메모장 등으로 해당 파일을 열어 보시면 어떻게 사용하는지 알 수 있습니다.
      darklabel.yml은 압축 파일 내에 같이 포함되어 있으며 실행화일과 같은 폴더에 있어야 합니다.

  • Tuan Nguyen 2020.09.10 08:50 ADDR 수정/삭제 답글

    Dear Mr. Lee,

    First of all, I would like to thank you so much for your very great annotation Tool.
    I'm using it and I like it very much.

    I send to you some issues on Youtube but I think you rarely go there to check comments. So, I send an email here to you, I hope this message reaches you as fast as possible.

    I already download the new tool (2.0? I saw 2.0 is last updated in your site) which you tell me from this commend "How do I save GT and the only frames with bounding boxes (not save frame without bounding boxes) which annotated? I don't want to save the frames that do not contain the bounding boxes."

    I used it and I get some problems:
    I try to save the images in video with your new tool but it seems not working. It didn't save the image into my selected folder! Can you check it? 2nd time I tried working but it saved image the same 2.0. Did you update this new version? I saw only the 2.0 versions on your site!!

    I have some more issues:
    1. Save setting is not working when I click it. Can you check it out?
    2. I hope you update the save setting (or in YAML file) have additional options such as:- save all frame (previous version)- save specifics frame (only save frame which annotated)- checkbox: + draw bounding boxes on the frames when saving images + not draw bounding boxes on the frames when saving images
    3. Do you public this code in the GitHub account? I think to update some issues in Github is easier.

    Thank you so much for your time.

    Best Regard,
    Tuan Nguyen

    • BlogIcon 다크pgmr 2020.09.10 17:02 신고 수정/삭제

      You are right. I uploaded it yesterday but there might be some error during the upload. The newer version 2.1 which reflects your comments is now uploaded. Please check it and let me know if any further problems. And I thank you for your good comments.
      As for save settings, I guess the program is placed in a system folder and it can't create settings file (darklabel.sav). If it is the case, you can move the program to non-system folder or change authority setting of the folder.

  • high generation 2020.09.10 09:34 ADDR 수정/삭제 답글

    안녕하세요 우연히 이 프로그램을 접하게 되었는데사용법이 아직 미숙해서 몇가지 질문드립니다.
    예를들어 사람이 걸어가는 모습만을 빼오려면 어떻게 해야될까요..

    • BlogIcon 다크pgmr 2020.09.10 17:06 신고 수정/삭제

      질문을 이해하지 못했습니다. 사람의 모습만 빼온다는 것이 어떤 뜻인지요. 사람이 걸어가는 장면이 포함된 이미지만 저장한다는 뜻인가요..

  • BlogIcon Muhammad Maaz 2020.09.16 21:00 ADDR 수정/삭제 답글

    The version 2.1 does not open on Intel i3 370m (https://ark.intel.com/content/www/us/en/ark/products/49020/intel-core-i3-370m-processor-3m-cache-2-40-ghz.html). Please have a look at this and release an update. Thanks

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

      I think it's not a problem of processor but OS (windows only) or security-related problem. The program works only on windows 7 and windows 10. I haven't tested it on windows 8 but I guess it will also work.
      One thing to note is that the program is not commercial. I am sorry not to support everyone's need.

  • yolo 2020.09.23 13:32 ADDR 수정/삭제 답글

    image 프레임 별로 yolo 형식의 레이블 파일로 저장할 순 없나요?

    • BlogIcon 다크pgmr 2020.09.23 22:25 신고 수정/삭제

      가능합니다. darklabel.yml 파일을 열어서 format1 항목에 fixed_filetype 값을 1에서 0으로 바꿔 주면 이미지 프레임별로 저장할 수 있는 옵션이 활성화 됩니다.
      또는 원하는 저장 포맷을 별도로 생성해서 darklabel.yml에 등록해도 됩니다.

  • Woopo666 2020.09.24 16:46 ADDR 수정/삭제 답글

    Person을 라벨링하다가 Car를 라벨링하고 싶은데, Person 에서 Car 박스를 칠수 있게끔 바꿀 수 있는 핫키가 있나요?

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

      그런 핫키는 없습니다. 다만, 입력모드를 "Popup LabelSelect"로 선택한 후, 박스를 그리면 popup되는 대화상자에서 숫자키를 바로 누르면 해당 숫자키 번째에 해당하는 label이 입력됩니다. 아쉬운대로 해당 기능을 이용하시기 바랍니다.

  • Tuan Nguyen 2020.10.01 15:37 ADDR 수정/삭제 답글

    What keyboard shortcut to jump up to 30 frames like in your tutorial video on Begin Interpolation and End Interpolation?

    According to your answer: As for save settings, I guess the program is placed in a system folder and it can't create settings file (darklabel.sav). If it is the case, you can move the program to a non-system folder or change authority setting of the folder.
    -> I save the program in D drive, not C. also I try to run in both drives, it's not working in both.

    • BlogIcon 다크pgmr 2020.10.04 20:00 신고 수정/삭제

      You can use PgUp & PgDn keys (or Q & E) to jump frames and the number of frames to jump can be configured in darklabel.yml.

      As for saving settings, I have no other idea why it doesn't work...

  • 다크pgmr's student 2020.10.27 20:13 ADDR 수정/삭제 답글

    thank you for your hard work.
    really thank you.
    dark programmer....... You are the teacher of my heart.

  • 룡섭 2021.01.12 19:59 ADDR 수정/삭제 답글

    정말 감사합니다. github에서 다른 레이블 코드 쓰려는데 계속 오류 떠서 몇일 째 고생했는데, 이거 정말 편리하네요!

  • 제니스 2021.01.19 15:01 ADDR 수정/삭제 답글

    안녕하세요 해당툴을 사용해보려하는데
    ## Predefined Classes Sets (you can define and add your own classes set here)
    해당 부분은 어떻게 수정해서 써야할가요?
    필요한객체들만 라벨링하고싶은데 없는 항목들이 있어서 추가하려고합니다.

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

      예시된, my_classes1, coco_classes, voc_classes처럼 자신만의 클래스 셋을 하나 만드신 후, 데이터포맷(format1, format2, ...)의 클래스셋(classes_set:)에 만드신 클래스 셋 이름을 적어주면 됩니다. 이후 툴에서 해당 포맷을 선택하면 설정한 클래스 셋이 활성화될 것입니다.

  • 홈런킹 2021.02.24 00:42 ADDR 수정/삭제 답글

    안녕하세요 맥스테드 이승엽 이라고 합니다.

    현재 Dark Label 프로그램을 설치하고 테스트 중에 있습니다.
    이 프로그램에 대한 커스터마이징 기능이 필요합니다.
    혹시 추가 개발이 가능하신지 문의 드립니다.
    당연히 비용은 지불할 예정입니다.
    비용 지불에 대해 2가지 방법이 있을것 같습니다.
    프로그램을 사용하는 방법하고, 소스를 넘겨 받는 경우가 있는데 2가지 경우 모두 가능하신지 궁금합니다.
    가능한 부분에 대한 비용도 궁금합니다.
    감사합니다.

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

      안녕하세요. 말씀하신 것은 현재로서는 모두 어렵습니다. 양해 부탁드립니다. 나중에 오픈소스로 전환할 수 있을지는 모르겠습니다만 장담은 어렵습니다.
      혹시 간단한 기능추가로 해결이 가능한 문제라면 이곳에 댓글로 남겨주시기 바랍니다.

  • 서지니 2021.03.11 09:49 ADDR 수정/삭제 답글

    덕분에 잘 사용하고 있습니다.
    한가지 문제점을 수정 해주실 수 있을지...
    이미지 디렉토리에 파일이 많이 있는 경우 (Linux server에 samba로 연결)
    파일이 이름으로 정렬되지 않고 임의의 순서로 나오는데
    이름 정렬 후 순서대로 나오게 해주실 수 있을지 부탁 드립니다.

    • BlogIcon 다크pgmr 2021.03.18 14:39 신고 수정/삭제

      안녕하세요. 좋은 의견 감사합니다. 그런 문제가 있는 지는 몰랐습니다. 기회가 된다면 다음 업데이트 때에 고려토록 하겠습니다.

    • BlogIcon 다크pgmr 2021.03.23 11:30 신고 수정/삭제

      해당 문제의 수정 버전을 업로드했습니다.

    • BlogIcon 서지니 2021.03.29 10:25 수정/삭제

      바로 반영해주시다니 감사합니다.

  • 학생 2021.04.09 09:50 ADDR 수정/삭제 답글

    딥러닝을 배우고 있는 학생입니다. 덕분에 잘 사용 하고 있습니다. 덕분에 많은 공부가 되었습니다.
    몇가지 문제점 수정 해주실 수 있는지 궁금해서 이렇게 댓글 달아봅니다.

    이미지 디렉토리에서 읽어 올때, 전체화면으로 할 경우 이미지가 전체 화면에 맞춰져서 비율이 이상하게 되는데, 원본 이미지 비율대로 유지 하게 하고. 이미지 라벨링 할때 박스가 제대로 보이지 않는데(오른쪽, 왼쪽선만 보이고 위 아래가 안보임) 할 수 있는지 부탁 드립니다.

    감사합니다. :)

    • BlogIcon 다크pgmr 2021.04.09 19:25 신고 수정/삭제

      고해상도 이미지의 경우 디스플레이 창의 스케일을 줄이다 보면 선이 사라질 수 있습니다. 알고 있는 현상이지만 opencv 라이브러리에 종속된 문제라서 해결이 쉽지 않습니다. 불편하겠지만 프로그램에 있는 zoom 기능을 활용해 보시기 바랍니다.