2019年7月16日火曜日

OpenCVで実行可能なCascade分類機自作

概要

OpenCV3.4.1で実行可能なCascade分類器を自作する手順をメモします。

OpenCVでは人の顔を判断する分類器や犬を判断する分類器などがデフォルトで準備されています。そのため、それらを分類する用途であれば何も準備する事なく分類器を作成する事が出来ます。しかし、その他(特定の生物や、物体などを判断させたい等)の用途では、専用の分類器を準備する必要があります。そこで、今回は専用の分類器を自作したのでその手順をメモしたいと思います。

用語

・Anaconda:データサイエンス向けに作成された Pythonパッケージ。科学技術計算などを中心とした数多くのモジュールやツールが含まれている。
・OpenCV:インテルが公開しているOSSの画像解析フレームワーク。
・Cascade分類器:OpenCVで画像の中から物体を識別するための判定機

事前準備(前提とする環境)

・Windows10 Pro 1803
・Anaconda 5.3.0

※Ubuntu16.04にOpenCV3.4.1をインストールして下記と同じ手順を試してみましたが、(おそらく)ライブラリのインストールが足りず、うまくCascade分類器を作成する事が出来ませんでした(2週間以上格闘しましたが、何故上手くいかないか特定出来ず)。そのため、Cascade分類器作成には、Anacondaをインストールして実施する事をオススメします。

手順

OpenCVのダウンロードと解凍

OpenCVのダウンロードサイト「https://opencv.org/releases.html」からOpenCV本体(.exe)をダウンロードし、解凍します。exeを実行すると解凍が開始されます。

(解凍先)
「C:\」
※解凍先はお好みのフォルダにアレンジして頂いてOKです。

Cascadeファイル作成フォルダの準備

「C:\conda_opencv」フォルダを作成します。

その後、「conda_opencv」フォルダにCascadeファイル作成に必要な実行ファイルを配置します。配置する対象ファイルは以下です。

(対象ファイル)
opencv_traincascade.exe
opencv_createsamples.exe
opencv_world343.dll

対象ファイルはダウンロードしたOpenCVの下記フォルダ内にあります。

(位置)
C:\opencv\build\x64\vc15\bin

正解ファイルと非正解ファイルの準備

物体の分類器を作成するためには物体の正解画像と非正解画像を覚えさせる必要があります。そのため、正解画像と非正解画像を以下のとおり準備します。

まず、正解画像を準備します(準備する正解画像は1枚でOKです)。正解画像は、「C:\conda_opencv」に「pos」フォルダを作成し、同配下に配置します。

続いて、非正解画像を準備します(こちらは大量に準備する必要があります)。非正解画像は、「C:\conda_opencv」に「neg」フォルダを作成し、同配下に配置します。
因みに、画像を大量に収集する方法は「http://blog.livedoor.jp/k_k_it/archives/13507518.html」で紹介しているので参考にしてみてください。

ここまで準備出来ると、以下のようなフォルダ構成になっているはずです。

Cascadeファイル作成

いよいよCascadeファイル作成ですが、まずは正解ファイルを学習させるために大量に増幅します。

(コマンド)
$ opencv_createsamples -img ./pos/<正解画像ファイル名> -vec ./vec/image.vec -num <増幅する枚数> -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5
(例)
$ opencv_createsamples -img ./pos/correct_image.jpg -vec ./vec/image.vec -num 1000 -bgcolor 255 -maxidev 40 -maxxangle 0.8 -maxyangle 0.8 -maxzangle 0.5

続いて、正解ファイルと非正解ファイルからいよいよCascadeファイルを作成します。

(コマンド)
$ opencv_traincascade -data ./cascade/trained_data/ -vec ./vec/image.vec -bg nglist.txt -numPos <正解画像枚数> -numNeg <非正解画像枚数>
(例)
$ opencv_traincascade -data ./cascade/trained_data/ -vec ./vec/image.vec -bg nglist.txt -numPos 900 -numNeg 190

※ここで、正解画像枚数は、実際の正解画像枚数×0.9程度(上記例では正解画像を1000枚に増幅しているため、900枚に指定している)とうまくいきます。うまくいかないとエラーが発生してCascadeファイル作成失敗します。



以上でCascadeファイルがうまく作成出来ました。
あとは本Cascadeファイルを用いて画像解析を行うと、物体認識が出来ると思います。

0 件のコメント:

コメントを投稿

FX自動トレード_2021年6月実績

      概要 2021年6月が終わり、FX自動トレードによる収益実績を取り纏めましたので振り返ってみたいと思います。 2021年6月結果 2021年6月の実績は、実利利益額:\66,761、実績利益率は1.42%でした。 今月もボラが全く出ず。利益率の連続過去最低記録更新は免...