何だか面白そう!先日新しくこんな仕事をいただいた、新米エンジニア小林です。思いついたのは1.一定時間ごとにWebカメラで写真を撮影する2.画像認識を使って、写真に写った、対象となっている人が自分の席にいるか判定するという単純な手法。画像認識ってどうやってやるの?......うーん、とりあえずやってみるか!というわけで、「とりあえず画像認識してみたい」という人に向けて、簡単な画像認識の方法を、実際に今回の仕事で行った順序に沿って紹介します。まとめ目的を明確化する何を、どのように画像認識するのか?実際に画像認識を始める前に、改めて手短に目的を明確化しておきます。定点Webカメラからの撮影範囲内に自分の席を持つ3人を対象に、自分の席にいる人が何人か判定を行います。次に、「どのように」。自分の席についている人が何人かという判定条件については、簡素化のため以下のような前提とします。・写真内に対象となっている3人以外は現れない・必ず自分以外の席には座らないこの前提の元、人の上半身を検出できれば自分の席にいると判定するようにします。この条件にヒットする人が何人いるか数えることで本題を満たします。Pythonというプログラム言語とOpenCVという画像認識ライブラリを用います。今回は以下のような環境を構築しました。ver10.11.5・Python3.4.4・OpenCV3.1.0環境構築の方法についてはこちらを参考に。・プログラムに「『上半身』とはこういうものだ」と学習させる・実際に、判定させたい画像をプログラムに投げて判定させるという順序で進めていきます。始めに、プログラムに「『上半身』とはこういうものだ」と学習させます。具体的には、「この写真は『上半身』の写真だ」「これは『上半身』の写真ではない」ということをプログラムに学習させることによって、「上半身」の写真の特徴量を抽出します。抽出した特徴量をまとめたデータをカスケード分類器といいます。最後に、判定させたい画像を、カスケード分類器のデータを読み込ませたプログラムに対して投げることで、プログラムが写真内に写っている上半身を検出します。カスケード分類器を作成するどのようにカスケード分類器を作成するのか?以下に手順を示します。・「上半身」の画像を集める・「上半身」の画像のリストを作成する・vecファイルをつくる・「上半身」でない画像を集める・「上半身」でない画像のリストを作成する・カスケード分類器を作成する「上半身」の画像を集めるまず、プログラムに「『上半身』とはこういうものだ」と教えるために必要となる「上半身」の画像を集めます。ここで注意事項があります。それは画面いっぱいに人の上半身が一つ写っている画像を探すことです。することで、「上半身」の画像のリストを作成するの段階で大きく手間を省くことができます。プログラムに学習させるにあたって、「上半身」の画像はできる限り多めに用意しましょう。こちらによると7000枚ぐらいあると良いです。「そんなに大量の画像を集められない!」というそこのあなた。そんな場合は以下の方法で枚数を増やすことができます。・データセットを配布しているサイトを探す・持っている画像を反転、回転した画像を新たに生成する「上半身」でない画像を集める次にプログラムに「「これは『上半身』の写真ではない」と教えるために必要となる「上半身」でない画像を集めます。この写真は「上半身」が写っていない画像であれば何でもOKです。「上半身」でない画像もできる限り多めに用意しましょう。こちらによると3000枚ぐらいあると良いです。「上半身」の画像のリストを作成する画像収集が終了したら、次は集めた画像の一覧を作成します。リストのフォーマットは以下のようになります。{画像ファイルの縦幅}と単純化できます。「上半身」でない画像のリストを作成する先ほどと同様に「上半身」でない画像の一覧を作成します。リストのフォーマットは以下のようになります。---${画像ファイルへのパス}${画像ファイルへのパス}vecファイルを作成する「上半身」の画像及び画像リスト、「上半身」でない画像及び画像リストが作成できたら、これらを用いてvecファイルというカスケード分類器を作成するために必要となるファイルを作成します。${「上半身」の画像のファイル数}とコマンドを実行することで、vecファイルを作成できます。カスケード分類器を作成するここまででカスケード分類器を作成する準備が整いました。${「上半身」でない画像のファイル数}とコマンドを実行することで、カスケード分類器(xmlファイル)の作成が開始されます。これでしばらくするとカスケード分類器が完成します!実験:自分の席にいる人が何人か数える判定させたい画像を、カスケード分類器のデータを読み込ませたプログラムに対して投げてみます。具体的には、まず下記のソースコードを.py形式で保存します。${人の上半身を検出したい画像ファイル}とコマンドを実行することで、人の上半身が検出された際にその部分を赤い四角で囲ってくれます。まとめ「とりあえず画像認識に触れてみる」ことに焦点を当てて紹介しました。いかがだったでしょうか?興味を持たれた方は、画像認識の理論的な部分に触れてみるとさらに理解が深まると思います。実際に、自分の席にいる人が何人いるのか確かめてみました。検出はできているようです。KobayashiA.Kobayashii3DESIGNのインターン生。プログラミングはもちろん、Webサイトのデザインを行うことも。大学では情報系の学科に所属する傍ら、出版サークルで主にデザイナーとして活動していた。Web系アルバイトを始めたことをきっかけにWebに興味を持ち、今ではWeb開発大好きっ子。Realityと組み合わせたゲームを制作した経験もある。us株式会社アイスリーデザインが発信するオウンドメディアです。デザイン思考でUXを「デザイン」ができる時代、「idea」「internet」「information」.....と世の中には多くの「i」のつくキーワードが存在し、ある意味無限のビジネスが考えられます。ITビジネスでひとつ時代の先を行く人が、ポケットの中にとっておきたくなるような情報を発信しているメディア、それが「in-Pocket」です。(10)Facebookアイスリーデザインi3DESIGN(アイスリーデザイン)は渋谷を本社、ウクライナを開発拠点に据えるIT企業です。ITサービスのプロフェッショナルとして、お客様のビジネスにおけるデジタルトランスフォーメーションを支援します。「デザイン思考」のアプローチを起点に、ビジネスの創出に必要な”右脳部分”のUX/UI、”左脳部分”の開発体制を社内にそろえています。]を一貫してご提供できることが、i3DESIGNの強みです。お問い合わせご意見、ご要望からサービスについてのご質問など、お気軽にお尋ねください。popupqewqe。