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枚の写真になっているので
これを水増しする
なお複数の写真をダウンロードすると
圧縮ファイルになっているのでこれを解凍する
vim generate_images.py
で内容を
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)
という画像を回転させてコピーするスクリプトを作成
次に写真をコピーしておく
cp ~/Downloads/Photos-001\ \(1\)/PXL_20240504_1732* .
ファイル名を変えた方が楽なので
ターミナルで
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
を実行
すると
basclin1.jpg
basclin2.jpg
basclin3.jpg
basclin4.jpg
というようにファイル名が変わる
よくみたらスペルミスなので
i=1 for file in basclin*.jpg; do mv "$file" "Baskulin$i.jpg" i=$((i + 1)) done
で修正
これでファイル名が
Baskulin1.jpg
Baskulin2.jpg
Baskulin3.jpg
Baskulin4.jpg
となったので
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つのフォルダにまとめる
ls -d */ | grep Bas
で
Basと書かれたディレクトリのみ表示できるので
move_files.sh
というスクリプトを作成
#!/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."
として保存
chmod +x move_files.sh
で実行権限付与
./move_files.sh
で実行すれば全てのファイルが
1つのフォルダに移動される
そしてこのフォルダをアップロード
これでsave and continueをクリック
なお100枚以上に増やしたけど
同じ画像の場合は全て1つのものとしてみなすため
意味がなかった
回転させたりした場合は
異なる画像としてカウントされる
これでデータがアップできたので
次はアノテーション