3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

opencv_createsamplesで複数の画像データをまとめて水増しして一つのvecファイルを生成するプログラム

Posted at

前置き

OpenCVで画像認識させる際にopencv_createsamples.exeを用いて画像データの水増しをすると思いますが、この機能の欠点としてポジティブ画像を複数準備した際にまとめて回転や変形の処理をしてくれない...

”-info 〇.txtで実行するとポジティブ画像のフォルダ内から-numで指定した枚数を使ってvecファイルを生成しますという仕様”

であるため、画像データ1つからvecファイルを生成してから最後にmergevec.pyを用いて一つにする作業が発生します。
なので本記事では勝手にポジティブ画像のフォルダ内からvecファイルを生成できるコードを自分自身のためにも残しておこうと思い投稿します。

お役に立てたら幸いです。

環境

・VScode+Python3.6.13+OpenCV3.4.14

参考記事は↓

作業フォルダは以下の通り

下3つのopecv~~のファイルはOpenCVのサイトから
ver3.〇.〇(ver4.〇.〇にはopencv_createsamples.exeがないらしい)のexeファイルをダウンロードし実行後、opencv/build/x64/vc15/binから作業フォルダに移動させましょう。

<DIR>          cascade
<DIR>          ng
<DIR>          pos
<DIR>          vec
               samplecreates.py
               samplecreates_ALL.py
               mergevec.py
               opencv_createsamples.exe
               opencv_traincascade.exe
               opencv_world3414.dll

mergevec.pyについて

https://github.com/wulfebw/mergevec/blob/master/mergevec.py
上記のgithubからmaergevec.pyをダウンロードし、作業フォルダに入れておく。

以下のコードを実行すれば、1つのvecファイルが生成される。

!python mergevec.py -v vec -o vec/pos.vec

-v vec : いままで生成されたvecファイルがあるフォルダを指定
-o vec/pos.vec : 出力先のフォルダと出力するファイル名の指定

CODE

必要なファイルは2つ

呼び出されるファイル(コマンドプロンプトに書き込むメインのファイル)↓

samplecreates.py
import subprocess
from subprocess import PIPE

def main(img):

    print(img) #実行中のファイルを確認する
    
    #opencv_createsamples実行(-numの数字が増やす枚数)
    subprocess.run("opencv_createsamples.exe -img pos/"+img+" -vec vec/positive"+img+".vec -num 20 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5 -w 24 -h 24",shell=True)

subprocess.run("python mergevec.py -v vec -o vec/pos.vec",shell=True) #vecファイルを一つにする

※エラーが出る場合はパスの見直しを忘れずに

上のファイルを呼ぶファイル(ポジティブ画像のフォルダからリストを作成しファイルの数だけループさせる。)↓

creates_ALL.py
import os
import samplecreates

#パスの取得&リスト作成 
path = r'C:/Users/user/Desktop/cascade/pos' #ポジティブ画像があるファイルのフルパス
files = os.listdir(path)

for dir in files:
    samplecreates.main(dir)

・pathにはポジティブ画像が入っているフォルダのフルパスを貼り付ける。

2つ目のファイルを実行すれば、ポジティブ画像が何百枚もあった場合でも勝手にvecファイルが生成され最終的にはpos.vecというファイルが生成されるのでこれを使って学習を始めます。
加えて-numで指定した枚数まで手軽に増やせるので目安とされる7000枚まで簡単にそろえることが出来ると思います。

以上

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?