パース画像をGoogleの画像解析AIで解析してみます。
「Google Cloud Vision」は、学習済みモデルを使った画像解析の汎用AIです。
1,000回/月まで無料で使う事ができます。IBMのWatsonも同じ条件で使えますが、こちらは30日間利用しないとアカウントが削除されてしまうので、今回はGoogleのAIを使う事にしました。
このAIを通す事で、その画像が写真なのかパースなのか、何の空間なのか、どんな家具があるのか、誰が使っているのかなどを判別してくれます。
パースを解析できれば、図面検索システムが作れる
図面を直接AIで解析しようとすると、学習データ作成費や解析精度など様々な高いハードルにぶつかるのですが、図面に紐づいたパースや竣工写真を汎用AIで画像解析すればキーワードで図面検索できる様になります。これを使って、過去図面を検索する社内システムを作ろうという訳です。
検索精度を上げるには人間が判断して手作業でキーワード登録していくのが一番良いのですが、今回はメンテ負荷を最小限に抑える為にAIを使います。
「Google Cloud Vision」をPHPから使ってみる
図面検索システムの仕組みはおいといて、本題です。
PCでもスマホでも使える様にしたいので、ブラウザで動くWEBアプリとしてPHPからAPIを呼び出します。解析タイプがいくつかあるのですが、今回は「LABEL_DETECTION」を使います。このAPIは社内プロキシ環境からそのまま通信できないので、cURLのオプションでプロキシ設定を追加します。
PHPを使ったコードはこんな感じです。
function GetTagByGoogleAI($api_key, $image_path){
// リクエスト用JSONを作成
$json = json_encode(
array(
"requests" => array(
array(
"image" => array(
"content" => base64_encode(file_get_contents ($image_path)),
),
"features" => array(
array(
"type" => "LABEL_DETECTION",
"maxResults" => 50,
),
),
),
),
)
);
// cURLを初期化する
$curl = curl_init();
//cURLオプションの設定
curl_setopt( $curl, CURLOPT_URL, 'https://vision.googleapis.com/v1/images:annotate?key='.$api_key ;
curl_setopt( $curl, CURLOPT_HEADER, true);
curl_setopt( $curl, CURLOPT_HTTPHEADER, array ("Content-Type: application/json"));
curl_setopt( $curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt( $curl, CURLOPT_TIMEOUT, 30);
curl_setopt( $curl, CURLOPT_POSTFIELDS, $json);
//社内環境からAPIを使う場合のプロキシ設定
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($curl, CURLOPT_PROXY, 'ここにプロキシアドレス');
//curl_setopt($curl, CURLOPT_PROXYPORT, '50');
//APIにリファラ制限を掛けている場合は設定する
//curl_setopt( $curl, CURLOPT_REFERER, ‘ここにリファラ’);
//cURLリクエストを実行
$res1 = curl_exec( $curl );
$res2 = curl_getinfo( $curl );
curl_close( $curl );
// ラベル情報を取り出す
$json = substr($res1, $res2['header_size']);
$array = json_decode($json, true);
$labels = (isset($array['responses'][0]['labelAnnotations'])) ? $array['responses'][0]['labelAnnotations'] : null;
//タグ情報だけを取り出す
$result_tags = array();
foreach ($labels as $tag){
array_push($result_tags, $tag['description']);
}
return $result_tags;
}
一連の処理を関数にまとめたものです。
この関数は、APIキーと画像ファイルのパスを与えると、最大50個のラベル配列を返します。これをデータベースに登録すればWEBシステムから高速検索できますし、そこまで必要なければ画像のメタデータにラベルをタグ情報として埋め込むだけでWindowsのExplorerやMacのFinderで検索できます。
上の関数をこんな感じで実行します。
//実行
$tags = GetTagByGoogleAI(‘APIキー’, ‘画像パス’);
// 出力テスト
foreach($tags as $tag) {
echo($tag."<br>");
}
某自動車ショールームのパース解析結果がこちら
Architecture | Floor | Building | Interior design | Ceiling | Design | Product | Automotive exterior | Automotive design | Manufacture | Vehicle | Luxury vehicle | Car | Car dealership | Subcompact car | Auto show | Lexus | Concept car
AIが、「Lexus」という具体的な車種(ブランド名)を認識しているのが面白いですね。
実際にパースで配置した車はLexusではありませんでしたが、自動車関連であること、建築写真であること、カーデザインに関連している事をAIが認識できています。
このタグ情報を画像のメタ情報に追加したり、データベースに登録する事でAIによる画像検索ができる様になります。
ちなみに…WindowsのExplorerから検索した場合、数千枚のパースから検索結果が表示されるまで1~2分掛かるのですが、データベースを使った検索システムだと0.1秒以内に結果を表示する事ができます。