スポンサーリンク

【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から読み取っているのが今回のメインです。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Python
スポンサーリンク
スポンサーリンク

コメント

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