roboflow Workspaceでアノテーション
https://axross-recipe.com/recipes/1469
を参考に行う
https://blog.roboflow.com/train-yolov8-obb-model/
のチュートリアルも参考にする
https://blog.roboflow.com
へアクセスし
GoogleIDなどで、Sign InすればOK
その場合
Continue with Google をクリック
ユーザ名を入力すると
プランが2つ出る
Free の無料か
Starter traialの月額249$
のどっちかになるので
とりあえずはFree にする
これでCreate workspace をクリック
次に
Invite teammates.
Add collaborators to help with labeling, upload data, train models, and more.
チームメイトを招待します。
ラベル付け、データのアップロード、モデルのトレーニングなどを支援するコラボレーターを追加します。
とあるけど
とりあえずSkipでOK
これでプロジェクトの作成画面になるが
デフォルトだとライセンスが
CC BY 4.0
になっている
Project Name は
anotation_test
とした
Annotation Group
注釈グループ
が識別のため必要らしい
とりあえずバスクリンなので
Baskulin
Project Typeには
Object Detection
を選択
これで
Create Project をクリック
次に画像ファイル
もしくは画像フォルダを選択する
ここでバスクリンを撮影したフォルダを指定するが
せっかくなので
画像の水増しをする
まず
Pixcel 8 で撮影したバスクリンの画像を
Google Photo からダウンロード
4枚の写真になっているので
これを水増しする
なお複数の写真をダウンロードすると
圧縮ファイルになっているのでこれを解凍する
1 | vim generate_images.py |
で内容を
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import sys import os from PIL import Image # コマンドライン引数から画像ファイル名を取得 if len(sys.argv) != 2: print( "Usage: python generate_images.py imagefile.png" ) sys. exit (1) image_file = sys.argv[1] # 画像を読み込む try: image = Image. open (image_file) except IOError: print(f "Could not open the image file {image_file}" ) sys. exit (1) # ファイル名と拡張子を分離し、ディレクトリ名を決定 file_name, file_extension = os.path.splitext(os.path. basename (image_file)) directory_name = file_name # ディレクトリが存在しない場合は作成 if not os.path.exists(directory_name): os.makedirs(directory_name) # 画像の変形と保存を行う関数 def save_images(image, prefix, transform, count=100): for i in range(count): filename = f '{prefix}{i+1:03}{file_extension}' filepath = os.path. join (directory_name, filename) transformed_image = image.transpose(transform) transformed_image.save(filepath) # 各変換を適用して画像を保存 save_images(image, f '{file_name}_' , Image.FLIP_TOP_BOTTOM, 100) save_images(image, f '{file_name}_rot90_' , Image.ROTATE_90, 100) save_images(image, f '{file_name}_rot270_' , Image.ROTATE_270, 100) |
という画像を回転させてコピーするスクリプトを作成
次に写真をコピーしておく
1 | cp ~ /Downloads/Photos-001 \ \(1\) /PXL_20240504_1732 * . |
ファイル名を変えた方が楽なので
ターミナルで
1 2 3 4 5 | i=1 for file in PXL_20240504_173232354.jpg PXL_20240504_173242547.jpg PXL_20240504_173237123.jpg PXL_20240504_173253414.jpg; do mv "$file" "basclin$i.jpg" i=$((i + 1)) done |
を実行
すると
1 2 3 4 | basclin1.jpg basclin2.jpg basclin3.jpg basclin4.jpg |
というようにファイル名が変わる
よくみたらスペルミスなので
1 2 3 4 5 | i=1 for file in basclin*.jpg; do mv "$file" "Baskulin$i.jpg" i=$((i + 1)) done |
で修正
これでファイル名が
1 2 3 4 | Baskulin1.jpg Baskulin2.jpg Baskulin3.jpg Baskulin4.jpg |
となったので
1 2 3 4 | python generate_images.py Baskulin1.jpg python generate_images.py Baskulin2.jpg python generate_images.py Baskulin3.jpg python generate_images.py Baskulin4.jpg |
でファイルを量産
これで各ファイルごとのフォルダができたので
これを1つのフォルダにまとめる
1 | ls -d */ | grep Bas |
で
Basと書かれたディレクトリのみ表示できるので
1 | move_files.sh |
というスクリプトを作成
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash # 移動先のディレクトリを作成(存在しない場合) mkdir -p baskulin # Baskulinで始まる全ディレクトリのファイルを baskulin ディレクトリに移動 for dir in Baskulin*/; do # ディレクトリ内のファイルを baskulin に移動 mv "$dir" * baskulin/ done echo "All files have been moved to the 'baskulin' directory." |
として保存
1 | chmod +x move_files.sh |
で実行権限付与
1 | . /move_files .sh |
で実行すれば全てのファイルが
1つのフォルダに移動される
そしてこのフォルダをアップロード
これでsave and continueをクリック
なお100枚以上に増やしたけど
同じ画像の場合は全て1つのものとしてみなすため
意味がなかった
回転させたりした場合は
異なる画像としてカウントされる
これでデータがアップできたので
次はアノテーション