Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

誰でも手軽にNTTドコモのサービスのような機能を持つアプリが作れる ~顔検出APIでモザイクカメラを作ろう

スマホアプリを豊かにする「docomo Developer support」で遊ぼう(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2015/02/04 14:00

 「docomo Developer support」というサイトをご存じでしょうか。このサイトは、NTTドコモが公開している開発者向けのAPI提供サイトです。ここで公開されているAPIを使えば、NTTドコモのサービス「しゃべってコンシェル」などと同様の機能を、自作のアプリから簡単に利用できるようになります。みなさんも、公開されているAPIやSDKを使って、楽しいAndroidアプリを作ってみませんか。

目次

はじめに

 第3回目の本稿は、「docomo Developer support」で公開予定となっている、PUX社の技術を用いた顔・オブジェクト認識APIを使って、顔がモザイクになって写るモザイクカメラアプリを作ってみます。「docomo Developer support」では、このAPIのように、NTTドコモ以外が開発したAPIも公開されており、今後もさまざまなAPIが増える予定になっています(本稿は、2015年1月29日時点の最新情報に基づいております)。

モザイクカメラで保存した画像
モザイクカメラで保存した画像

対象読者

 JavaとEclipseを用いたAndroidアプリの開発で、基本的な知識がある方を対象とします。

顔・オブジェクト認識API

 顔・オブジェクト認識とは、写真や動画などの画像から、特定の人物やもの(オブジェクト)を認識する技術です。最初に、どのような機能があるかを紹介しておきます。

提供されるAPIの概要

 提供されるAPIは、次の4つです。

(1)顔検出

 写真などの画像から、人間の顔を見つけることができます。一度のアクセスで、最大20人までの顔を認識することができます。また、顔の情報として、目や鼻などのパーツの位置や性別、年齢までも判定できます。

(2)顔認証

 画像の中から、事前に登録した顔画像と似た顔を見つけられます。結果の情報には「どの程度似ているか」というレベルの数値が含まれています。

(3)オブジェクト認識

 任意の画像を登録し、登録したものを別の画像から探し出すことができます。ブレていたり傾いていたり、大きさの違うものでも認識可能です。

(4)手書き文字認識

 画面上にペンなどで書いた文字を、独自のパターン認識技術で、文字として特定できます。画像データのような事前に書かれた文字の認識ではなく、リアルタイムに入力される筆跡の認識が可能です。

ブラウザでAPIを試してみよう

 これらのAPIは、Web APIとして提供されますので、まずはブラウザを使って、具体的にどのような機能なのかを見ていきましょう。

顔検出(faceDetection)

 検出元の画像は、インターネット上のURLを指定するか、画像データをアップロードします。画像データをアップロードする場合は、HTMLフォームを使ってファイル送信するか、または画像データを、バイナリのままかBase64文字列に変換して、POSTメソッドで送信します。ここでは、フリー素材アイドルの画像(フリー素材アイドルの顔画像)を使って検出してみます。

 ブラウザで、以下のURLを開いてみましょう。なお、APIKEYのパラメータには、「docomo Developer support」で取得したキーを設定してください。

https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/faceDetection?APIKEY=XXXXX&imageURL=http://takae.sakura.ne.jp/wings/image1.jpg
顔検出APIのレスポンスデータ
顔検出APIのレスポンスデータ

 APIのベースのURLは、https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/で、その後に、機能名(ここではfaceDetection)を付加します。

 パラメータは、APIKEY以外では、顔画像のURL(imageURL)を指定するだけで認識可能です。レスポンスは、デフォルトではXML文字列ですが、オプションのresponseパラメータにjsonを指定すれば、JSON文字列になります。

 レスポンスデータは、顔検出結果情報(faceRecognition)をルートとして、顔情報(detectionFaceInfo)、顔座標(faceCoordinates)、顔部品座標(facePartsCoordinates)、各判定結果(~Judge)です。

 各判定は、デフォルトで、瞬き、年齢、性別、顔の向き、笑顔度の結果が含まれます。オプションでは、動物顔、どや顔、困り顔なども判定可能です。

 そのほか、詳細については、サイトの仕様書を参照してください。

顔認証(faceRecognition)

 今度は、特定の顔で認証してみましょう。まず、顔の画像を登録します。

 顔の登録は、faceRecognitionの後に、modeパラメータとして、registerを指定します。

https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/faceRecognition?APIKEY=XXXXXX&mode=register&imageURL=http://takae.sakura.ne.jp/wings/image1.jpg

 登録されると、レスポンスのregistrationFaceInfoタグに、付与された画像のIDが格納されます。

<registrationFaceInfo>
  <meta/>
  <faceId>1</faceId>
  <imagePath>http://eval.st1.polestars.jp/webapi/public/41016555a056124b20d013758cea2b04/20150109153901834_PC.jpg
  </imagePath>
</registrationFaceInfo>

 登録できましたので、別の画像で認証してみましょう。

 認証は、modeパラメータに、verifyを指定します。

https://api.apigw.smt.docomo.ne.jp/puxImageRecognition/v1/faceRecognition?APIKEY=XXXXXX&mode=verify&imageURL=http://takae.sakura.ne.jp/wings/image2.jpg

 認証結果は、verificationFaceInfoタグに格納されます。認証に用いた画像のID(faceId)と、どのくらい似ているかの認識スコア(score、100以下)の情報が含まれています。

<verificationFaceInfo>
  <faceCoordinates>
  </faceCoordinates>
  <candidate>
    <score>91</score>
    <faceId>1</faceId>
    <meta/>
   </candidate>
</verificationFaceInfo>

オブジェクト認識(objectRecognition)

 オブジェクト認識APIは、顔認証APIと同様の使い方です。ただし、レスポンスデータには、顔認証と異なり、認識オブジェクト情報(recognitionObjectInfo)として、オブジェクトの座標、角度、認識スコアが含まれています。

手書き文字認識(rakuhira)

 手書き文字認識では、一文字の認識が可能です。APIの呼び出しは、筆跡の座標データが必要となり、データ量が多くなりますので、POSTメソッドのみに対応しています。

 パラメータには、文字入力の枠サイズ(frameSizeWidth、frameSizeHeight)、その枠内の筆跡座標情報(coordinatePointArray)などを指定します。認識可能な文字は、漢字、カタカナ、ひらがな、記号、アルファベットになります。

 レスポンスデータは、認識結果(handwritingRecognition)として、文字コード(recognitionResult)のリストが含まれます。

 例えば、「高」の文字を認識させた場合は、次のように、高、萵、窩、富、貢、蒿という文字コードのリストとなりました。

リスト1 文字認識APIのパラメータ例
"frameSizeWidth":256
"frameSizeHeight":256
"coordinatePointArray":{(96,22),(97,22),(98,23),(98,24),(99,24),...}
リスト2 文字認識APIのレスポンスデータ
<handwritingRecognition>
  <recognitionResultList>
    <recognitionResult>0x9ad8</recognitionResult>
    <recognitionResult>0x8435</recognitionResult>
    <recognitionResult>0x7aa9</recognitionResult>
    <recognitionResult>0x5bcc</recognitionResult>
    <recognitionResult>0x8ca2</recognitionResult>
    <recognitionResult>0x84bf</recognitionResult>
  </recognitionResultList>
</handwritingRecognition>

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 高江 賢(タカエ ケン)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

バックナンバー

連載:スマホアプリを豊かにする「docomo Developer support」で遊ぼう
All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5