Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
IBM Bluemix とAlchemyAPI を使って
画像認識アプリケーションを作る
日本アイ・ビー・エム
木村 桂
まずは Free API Key の取得
http://www.alchemyapi.com/
入力項目目的
名
姓
メールアドレス
確認メールアドレス
挑戦すること
(例)To retrieve meta information in images.チェック
Free API Key の条件
•無料
• 1日 1000 トランザクション
• API の種類は問わずに合計した値• 画像関連だけでなく、言語やニュース系 API を使う場合にも適用
• API を1回実行 = 1トランザクション?• →違います
• API を1回実行した時のトランザクション数は実行結果に含まれています。• より複雑な API ほど、トランザクション数が大きくなります
API Key を保管
(申請から5分程度で、このようなメールが届きます)
この文字列を保管しておく
「人工知能」学習の種類
人間型 非人間型
人間の脳 学習モデル 人間の脳ではないもの
先生 上限 無限
人間らしさ 目的 人間を超える
人間の棋譜を使って、人間のように打てるように学習させる
(例)将棋AI 膨大な選択肢から仮説に基いた絞り込みを行い、最適解を探す
AlchemyAPI Watson
ちなみに IBM では「人工知能(AI)」とは言いません。「コグニティブ(Cognitive 認識型人工知能)」と言います。
↑今日はこちら↑
「画像認識」
結果のフォーマット 各配列要素の中身
何が写っているのか? ○○の可能性がある、××の可能性がある、:
(という配列)
識別したものその確率
誰が写っているのか? ○○人が写っている1人目の情報2人目の情報:
(という配列)
顔の位置、性別、その確率、年齢、その確率、個人名、その確率
Alchemy Vision
Alchemy Face Detection
これからこんなアプリを作ります。
認識対象画像のURLを(パラメータで)指定すると、その画像を顔認識/物体認識した結果を視覚的に表示する。
Alchemy Vision の結果をタグクラウド
指定画像と、Alchemy Face Detect の結果を表示
この API で使ったトランザクション数
AlchemyVision デモサイト
http://www.alchemyapi.com/products/demo/alchemyvision
Alchemy Vision API
画像ファイルのURLから「何が写っているのか」の認識を行う※パブリックに公開されている URL であること!
具体的には以下のエンドポイントへ Get メソッドでアクセスする:http://access.alchemyapi.com/calls/url/URLGetRankedImageKeywords?apikey=(API キー)&url=(画像URL)&outputMode=json&knowledgeGraph=1
URLGetRankedImageKeywords API の実行結果
{"status": "OK","usage": "By accessing AlchemyAPI or …","url": "http://xxx.com/wp-content/uploads/2015/05/aaaa.jpg","totalTransactions": “4","imageKeywords": [
{“text": “sport", "score": "0.989013“
},{ “text": “football", "score": "0.985226“
}]
}
結果は imageKeywordsの中(配列)
“sport” の確率が 98.9013% と認識
“football” の確率が 98.5226% と認識
詳細は API リファレンス参照http://www.alchemyapi.com/api/image-tagging/urls.html
この API コールで消費したトランザクションは 4
API リファレンス情報
http://www.alchemyapi.com/api/image-tagging/urls.html
試しにブラウザで実行してみる
ウェブブラウザで以下の URL を指定してアクセスします:http://access.alchemyapi.com/calls/url/URLGetRankedImageKeywords
?apikey=(API Key の値)&outputMode=json&url=画像URL
Alchemy Face Detection デモサイト
http://www.alchemyapi.com/products/demo/face-detection
Alchemy Face Detection API
画像ファイルのURLから「誰が写っているのか」の顔認識を行う※パブリックに公開されている URL であること!
具体的には以下のエンドポイントへ Get メソッドでアクセスする:http://access.alchemyapi.com/calls/url/URLGetRankedImageFaceTags?apikey=(API キー)&url=(画像URL)&outputMode=json&knowledgeGraph=1
URLGetRankedImageFaceTags API の実行結果
{"status": "OK","usage": "By accessing AlchemyAPI or …","url": "http://xxx.com/wp-content/uploads/2015/05/aaaa.jpg","totalTransactions": "5","imageFaces": [{ “age”: { "ageRange": "18-24", "score": "0.702753“ },"gender": { "gender": "FEMALE", "score": "0.991837“ },"identity": {"knowledgeGraph": { "typeHierarchy": "/people/ariana grande“ },"name": "Ariana Grande","score": "0.622459"},"positionX": "116","positionY": "19",“height”: “48”,"width": "48“ }
]}
結果は imageFacesの中(配列)age: 推定年齢層と、その確度
gender: 推定性別と、その確度
個人が特定できた場合は identity 内に情報が入り、名前とその確度
positionX, positionY: 顔の位置width, height: 顔のサイズ
詳細は API リファレンス参照http://www.alchemyapi.com/api/face-detection/urls.html
この API コールで消費したトランザクションは 5
API リファレンス情報
http://www.alchemyapi.com/api/face-detection/urls.html
試しにブラウザで実行してみる
ウェブブラウザで以下の URL を指定してアクセスします:http://access.alchemyapi.com/calls/url/URLGetRankedImageFaceTags
?apikey=(API Key の値)&outputMode=json&url=画像URL
これから作成するアプリ(今日のゴール)
認識対象画像のURLを(パラメータで)指定すると、その画像を顔認識/物体認識した結果を表形式で表示する。
これから作成するアプリ(最終形)
認識対象画像のURLを(パラメータで)指定すると、その画像を顔認識/物体認識した結果を視覚的に表示する。
Alchemy Vision の結果をタグクラウド
指定画像と、Alchemy Face Detect の結果を重ねて表示(男性=青枠、女性=赤枠)
この API で使ったトランザクション数
Bluemix にログイン
ログイン後のダッシュボード画面で「アプリの作成」をクリック
WEB アプリを選択
アプリの種類は「WEB」を選択
PHP ランタイムを選択
ランタイムの種類は「PHP」を選択。※実際はどのランタイムでも作れるが、本資料では PHP で作成する
続行
PHP ランタイムの説明を確認して「続行」。
アプリケーションの名前を指定
PHP ランタイムアプリケーションの名前を指定して入力して「終了」。ホスト名の一部になるので、重ならない名前にする。(例) kkimura(自分の名前)-php-YYYYMMDD(日付)
ステージング処理待ち
PHP ランタイムの作成はこれで終わり。ステージング処理が完了するまで待つ。この画面では、この後にどうやって PHP アプリをランタイムに反映させるか、の方法が紹介されている。
ステージング処理完了
ステージング処理完了(もうアプリケーションサーバーとして利用可能)。一度ダッシュボードに戻る。
ダッシュボード画面
ダッシュボード画面に今作った PHP ランタイムが追加されていることを確認。このアイコンをクリック。
作成した PHP ランタイムの概要
作成して稼働中の PHP ランタイムが表示されていることを確認。
アプリの実装内容(1) PHP ファイルがパラメータで画像URLを受け取る。(例 ***.php?url=http://XXXXXXXX/XXX.jpg)
(2) 受け取ったパラメータの値(画像URL)に対して、Alchemy Vision API と Alchemy Face Detection API をそれぞれ実行する。
(3) 各結果の JSON を解析して、表形式で表示する。
(4) (おまけ)結果表示方法をより視覚的にカスタマイズする。
Bluemixソースコードの開発/デプロイ
•選択肢は3つ• Eclipse 環境で開発し、Eclipse プラグインを使ってデプロイ
• 普通にテキストエディタで開発し、cf ツールを使ってデプロイ
• IDS(IBM DevOps Services) を使って Git リポジトリを作り、リポジトリのコードを編集した後にビルド&デプロイ
今回は cf ツールを使った方法を紹介します。
cf コマンドラインツールをダウンロード
https://github.com/cloudfoundry/cli#downloads
の Stable Installers から環境にあったモジュールをダウンロードしてインストール
cf コマンドラインツールの動作確認
コマンドプロンプト(OS X の場合はターミナル)を開き、”cf –v” と入力。バージョン番号が表示されれば、インストール成功
ドキュメントルート作成
PHP のウェブアプリケーションを作る上での、ドキュメントルートとなる空フォルダをローカルマシン内に作成します。この例では c:¥tmp¥docroot をドキュメントルートとしました。
ドキュメントルートに移動
コマンドプロンプトで、このドキュメントルートのフォルダに移動します。
> cd ¥tmp¥docroot
cf ツールでログイン
cf ツールを使って Bluemix にログインします:
> cf login –a https://api.ng.bluemix.net/
(ユーザー名とパスワードを聞かれるので入力する)
PHP ファイル作成
このドキュメントルートフォルダに PHP ファイルを新規に作成します:
> notepad image.php
image.php の内容(1)<html>
<head>
<title>AlchemyAPI サンプル</title>
</head>
<body>
<?php
$trans1 = 0;
$trans2 = 0;
if( isset( $_GET['url'] ) ){
$apikey = ‘(Alchemy API Key の値)';
$url = $_GET['url'];
$alchemyurl = 'http://access.alchemyapi.com/calls/url/';
?>
<img src='<?php echo $url; ?>'/>
<p/>
<?php
$apiurl1 = $alchemyurl . 'URLGetRankedImageKeywords?apikey=' . $apikey . '&outputMode=json&url=' . urlencode( $url );
$text1 = file_get_contents( $apiurl1 );
$json1 = json_decode( $text1 );
$trans1 = $json1->totalTransactions;
$imageKeywords = $json1->imageKeywords;
if( count( $imageKeywords ) ){
?>
<h2>Keywords</h2>
<table border='1'>
<tr><th>text</th><th>score</th></tr>
<?php
for( $i = 0; $i < count( $imageKeywords ); $i ++ ){
$imageKeyword = $imageKeywords[$i];
$text = $imageKeyword->text;
$score = $imageKeyword->score;
?>
<tr><td><?php echo $text; ?></td><td><?php echo $score; ?></td></tr>
<?php
}
?>
</table>
<p/>
<?php
}
API key の値
画像 URL を取得
モノ認識 API の URL
API を実行して、結果の JSON を取り出す
配列の結果をループで1つずつ取り出す
image.php の内容(2)$apiurl2 = $alchemyurl . 'URLGetRankedImageFaceTags?apikey=' .
$apikey . '&outputMode=json&knowledgeGraph=1&url=' . urlencode( $url );
$text2 = file_get_contents( $apiurl2 );
$json2 = json_decode( $text2 );
$trans2 = $json2->totalTransactions;
$imageFaces = $json2->imageFaces;
if( count( $imageFaces ) ){
?>
<h2>FaceTags</h2>
<table border='1'>
<tr><th>attr</th><th>value</th><th>score</th></tr>
<?php
for( $i = 0; $i < count( $imageFaces ); $i ++ ){
$imageFace = $imageFaces[$i];
$positionX = $imageFace->positionX;
$positionY = $imageFace->positionY;
$width = $imageFace->width;
$height = $imageFace->height;
$ageO = $imageFace->age;
$ageRange = $ageO->ageRange;
$ageScore = $ageO->score;
$genderO = $imageFace->gender;
$gender = $genderO->gender;
$genderScore = $genderO->score;
?>
<tr><th colspan='3'><?php echo $i; ?></th></tr>
<tr><td>positionX</td><td><?php echo $positionX; ?></td><td> </td></tr>
<tr><td>positionY</td><td><?php echo $positionY; ?></td><td> </td></tr>
<tr><td>width</td><td><?php echo $width; ?></td><td> </td></tr>
<tr><td>height</td><td><?php echo $height; ?></td><td> </td></tr>
<tr><td>age</td><td><?php echo $ageRange; ?></td><td><?php echo $ageScore; ?></td></tr>
<tr><td>gender</td><td><?php echo $gender; ?></td><td><?php echo $genderScore; ?></td></tr>
<?php
$identityO = $imageFace->identity;
if( $identityO ){
$name = $identityO->name;
$nameScore = $identityO->score;
?>
<tr><td>name</td><td><?php echo $name; ?></td><td><?php echo $nameScore; ?></td></tr>
顔認識 API の URL
API を実行して、結果の JSON を取り出す
配列の結果をループで1つずつ取り出す
image.php の内容(3)<?php
}
?>
<?php
}
?>
</table>
<p/>
<?php
}
?>
<div align='right'>
使ったトランザクション数:<?php echo $trans1; ?> + <?php echo $trans2; ?> = <?php echo ($trans1 + $trans2); ?>
</div>
<?php
}
?>
</body>
</html>
ソースコード•本ハンズオンセミナーのソースコードはこちらからダウンロード可能です:• https://github.com/dotnsf/alchemyapi_php_sample
•実際に使う場合は、jQCloud ライブラリと合わせて用意する必要があります:• https://github.com/lucaong/jQCloud
上記2サイトからダウンロード&解凍した結果の *.php, *.js, *.css ファイルを全て同じ(ドキュメントルートの)フォルダに展開します。
PHP ファイルをプッシュ
カレントディレクトリを丸ごと Bluemix 上の PHP サーバーのドキュメントルートにプッシュ(転送)します:
> cf push (アプリ名)
プッシュ成功を確認
プッシュが成功すると、図のような PHP サーバーの稼働状態が表示されます:
image.php の動作確認
ウェブブラウザでhttp://(アプリ名).mybluemix.net/image.php?url=(画像のURL)
にアクセスして、期待通りに表が出力される結果になることを確認する。いくつかの画像URLで確認する。
(おまけ)index.php の動作確認
ウェブブラウザでhttp://(アプリ名).mybluemix.net/?url=(画像のURL)
にアクセスして、期待通りにタグクラウドと顔認識結果が出力されることを確認する。いくつかの画像URLで確認する。
(改良に挑戦してほしいこと)
•人間が写っているとは限らないのに顔認識が実行されていて、トランザクションが無駄• 写っているものが人間だった場合のみ、顔認識を実行する
•画像がプライベートネットワーク上にあったり、認証がかかっていて、普通に URL を指定しただけではアクセスできない場合を想定• 画像を一度ダウンロードした上で、そのバイナリデータをポストして認識させる、というアルゴリズムに変更
• ImageGetRankedImageKeywords API とImageGetRankedImageFaceTags API を使う