スポンサーリンク

【Python】Vott ソフトでアノテーションタグ付したデータからアノテーション範囲を Python コードを使って切り取る方法。

Python
スポンサーリンク

今回の記事は物体検知学習モデルを作る際に何かとお世話になる「Vott」のタグ付をすでにした画像範囲を切りとるコードについて記載します。

なぜ、私が、この様な作業を行なったかと言うと、先に物体検知モデルを作るためにある画像等にタグ付を行なっているプロジェクトがありました。

そのプロジェクトに追加で、そのタグ内が何を表しているかまで識別させるモデルを作ることになり、タグ付した範囲の画像が必要になった為、この様な記事を巻いております。

スポンサーリンク

この記事で記載すること

・Pythpnでのjsonファイルの値取得方法(こちらは別記事へのリンクのみ)
・Vottでタグ付を行なった際に同時に作成されているjsonファイルについて
・opencvによる切り取り

Pythpnでのjsonファイルの値取得方法(こちらは別記事へのリンクのみ)

はじめから手抜きじゃねーかと思うかもしれませんが、それはさておき下記記事を参照ください。笑

では今回のメインのVottによって生成されたjsonを見ていきます。

Vottでタグ付を行なった際に同時に作成されているjsonファイルについて

{
    "asset": {
        "format": "jpg",
        "id": "7ad198164f8e135978eb12b08ce9bf18",
        "name": "exit0.jpg",
        "path": "「各自のプロジェクトパス」",
        "size": {
            "width": 800,
            "height": 430
        },
        "state": 2,
        "type": 1
    },
    "regions": [
        {
            "id": "lfbVDhAx2",
            "type": "RECTANGLE",
            "tags": [
                "exit"
            ],
            "boundingBox": {
                "height": 47.26982365642994,
                "width": 124.77102683178533,
                "left": 551.9930340557275,
                "top": 232.88980026391556
            },
            "points": [
                {
                    "x": 551.9930340557275,
                    "y": 232.88980026391556
                },
                {
                    "x": 676.7640608875129,
                    "y": 232.88980026391556
                },
                {
                    "x": 676.7640608875129,
                    "y": 280.1596239203455
                },
                {
                    "x": 551.9930340557275,
                    "y": 280.1596239203455
                }
            ]
        }
    ],
    "version": "2.2.0"
}

jsonの形式を紹介するとすると、この様になっております。
region内の「boundingbox」の表示方法はタグ範囲をheight, width,top,leftにて指定しています。
そのしたの「point」は座標4点を知らせてくれています。

今回は一つのタグ付しかしておりませんが複数になっても内容は同じでこの二つの要素が配列として追加されるのみです。

ではこの座標を使って画像切り取りましょう。

切り取りといえばこの人みたいなopencvを使います。

opencvによる切り取り

import cv2
import os
import numpy
import json

#読み込み
image_np = cv2.imread(”自身の切り取り画像path”)
#リサイズ
image_np = cv2.resize(image_np, (300,300))



json_open = open('「指定パス」.json', 'r')
json_load = json.load(json_open)
height = json_load.key("regions").key("boundingBox")[0]
width = json_load.key("regions").key("boundingBox")[1]

left = json_load.key("regions").key("boundingBox")[2]
top = json_load.key("regions").key("boundingBox")[3]

bottom = top + height
right = left + width

cut_image = original_image[int(top) : int(bottom), int(left): int(right), :]
cv2.imwrite("保存passディレクトリ" + str(image_num) + ".jpg", cut_image)

長くなりましたが要はopencvで領域指定をして切り取っているのみです。
その切り取り領域をjsonから読み取っているのが今回のメインです。

Python
スポンサーリンク
tomoをフォローする
スポンサーリンク
SunnyDayTravel-Blog

コメント

タイトルとURLをコピーしました