label studioでvideo annotationで、export to yoloができない話

# label studio

LabelImgが開発終了し、label studioを使えとあったので、、、( https://github.com/HumanSignal/labelImg )
label-studioをinstalしてvideo annotationする話です

## install

```
brew tap humansignal/tap
brew install humansignal/tap/label-studio
brew install label-studio-converter
```

label-studio-converterは、optionalですが.

## 多分全員がやらないといけない設定： 環境変数の設定

```
label-studio
```

なぜか、立ち上げると、accountを作成みたいにしなければいけません。local hostなのに。。。

で、いきなり使おうとしたいところですが、罠があります。起動できるけれど、local fileをdrag&dropしても、使えないんです。。。(.mp4でで試しました)

local fileを使うときに、毎回、local fileをsourceとして登録しないとだめみたいなんです。なんじゃそれ。（後述）

で、local fileを使う場合は以下の環境変数の設定が必要です。

```.zprofile
export LABEL_STUDIO_LOCAL_FILES_SERVING_ENABLED=true
export LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT=/User/xxxx/dataset
```

のように、local file sourceで利用するためのパスとフラグを環境変数を設定もしておく必要があります。。。。。。
(設定してからlabel-studioを立ち上げましょう)

# 起動

注意！：上の環境変数を設定しておくこと！

```
label-studio
```

でbrowserがたちあがるはず

# Create Project

で、その上で、create projectをするのですが、ここでも注意が必要です。

Videoを使うときは、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100425/d3940860-e934-cc39-7f4c-973e6c8382bd.png)

のように、Labelling Setupで、Videos以下を使わないと、.mp4のvideo timelineが出てきません！（面倒・・・)

ComputerVision以下でやっても、.mp4では、アクセスできないとかのエラーで使えないのです。でも、アクセスできないじゃなくて、このLabelling SetupでVideoを選ばないと使えないんです。

で、 https://labelstud.io/videos/label-studio-video-annotation-feature-overview/のtutorial でも、ここふれられずにさらっとすぎていくのです(笑)

## Projectの設定： さらなる設定 (これがlocal fileの追加)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100425/66c66743-75b5-44e8-0d21-dc697a137535.png)

Projectを開いたときに、Settingsがあり、そこの「Cloud Storage」でlocal sourceの追加という感じです。

1. Add source storageをクリックします (in Project/Settings/Cloud Storage)
1. 一番上のawsとかの部分のコンボボックスの中にlocal fileを選択
1. pathは、 ```LABEL_STUDIO_LOCAL_FILES_DOCUMENT_ROOT``` よりも1階層下にしないといけない (例: ...dataset/*hoge*)
1. .*mp4のようなregexpを追加して、認識したいファイルを登録
1. Check connectionでsuccessになることを確認しましょう。

なお、Add後、その下に、sourceが出ていると思いますので、"Sync"を押してみてください。
その後、projectに戻ると、認識したファイルが出てくると思います。


# Video annotation

これ、動画のframe毎にannotation (label付け)していけるんですが、やりかたも少し独特で、

(labelに番号が振られているので、その番号のキーを押します。ここでは1)
1キーを押して、そのlabelがactiveになっている（box -> boxfillになる)のを確認後、video状のobjectにrect指定します。

で、frameを">"で1 frameずらしてから (video上でRectはactiveのままで、inactiveにしないこと)、再生をして、そのobjectが消える直前のframeまでにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100425/218799bb-d471-9e82-4914-2f568ef0f9d7.png)

で、◆-みたいになっているアイコン (上で左から2番目)を押すと、そこまでinterpolateしてobjectの動きを補完してくれます。

そして、この動作をしないと、最初のframeからそのframeまで、そのobjectがいる、ということをtimeline上で示すことができません。

消えたframe上でrectをdelすると、そのobject自体が消えてしまうので注意！！！！

もう一度同じobjectの開始位置から再生して、annotationしたobjectの移動とRectのずれがあれば、ずらすと、適宜interpolateを調整してくれます。

# Export

Projectのところで、annotateしたvideoをチェックして、exportボタンを押すと、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100425/fc9f24a3-1834-448f-4925-cd2061ebe4c7.png)

このように、exportできません。

なんと、2022年に、issueでrequestされているのに、放置なんです。。。

https://github.com/HumanSignal/label-studio/issues/3405

見かねた人が

https://github.com/HumanSignal/label-studio/issues/3405#issuecomment-1381520623

のように変換scriptを作っています。。。。

なんで、一番メジャーなユースケースの、exportをサポートしていないのかわかりませんが、、、そういう感じです。

特に、個別のmodelが出ていないんだったら、わかるんですが・・・・出ているのにグレーって、皆同じissueあげることになります。。。

https://github.com/HumanSignal/label-studio/issues/4385


# ここまでの感想

label-studioはちょっと癖があります。video annotationのeditorは、これこれ、これがほしかったという感じなのですが、あと今一歩でした。特に、.jpgなどへの変換exportは、video annotationがあるのであれば、標準で用意してくれるとうれしいですね・・・

slackで問い合わせたら、github見ろ。自分でscriptで変換しろ、と言う感じなのでしたが、より発展して皆が使いやすいツールに育つのを期待です・・・