すでに前から公開されているAWSのサービスですが、弊社のディープラーニング強化の流れにのって、AWSのRekognition APIを試してみました。
AWS Rekognition とは?
こちらでも説明がされていますが、画像の解析(物体の検出、顔検出、有名人の認識、不適切コンテンツの識別)を行なうサービスになります。その発展系として、顔の検索や比較も可能です。
これらのサービスのためのAPIがあり、iOS/Androidからも、そのAPIを呼び出すことで、簡単にアプリに画像解析の機能を組み込むことができます。
なお、もちろん完全無料ということはなく、画像処理数によって課金されるシステムとなっております。詳細についてはこちらを参照してください。
※無料枠で最初の 12 か月間は、1 か月あたり 5,000 枚の画像分析が無料でもあるので、ぜひ使ってみてください。
Rekognition API(iOS)を早速使ってみた
アプリ側でRekognition APIを使うには、こちらからSDKのダウンロードし、以下のようにAWSRekogtnionのライブラリをインポートするだけです。
import AWSRekognition
では、次にRekognition APIを使用して、2つの画像を比較して、片方の画像の顔がもう一方の画像(例えば集合写真など)に類似の顔があるかを検出する処理を呼び出してみます。
処理は非常に簡単で、AWSRekognitionオブジェクトの初期化、画像のセット、AWSへリクエストの実行となります。
// 初期化
let rekognitionClient:AWSRekognition = AWSRekognition.default()
let comRequest: AWSRekognitionCompareFacesRequest = AWSRekognitionCompareFacesRequest()
// 比較する2つの画像をセット
let sourceImage1 = AWSRekognitionImage()
sourceImage1!.bytes = UIImageJPEGRepresentation(pic1Image.image!,0.5)
let sourceImage2 = AWSRekognitionImage()
sourceImage2!.bytes = UIImageJPEGRepresentation(pic2Image.image!,0.5)
comRequest.sourceImage = sourceImage1
comRequest.targetImage = sourceImage2
// AWSへリクエストを実行
rekognitionClient.compareFaces(comRequest){ (response:AWSRekognitionCompareFacesResponse?, error:Error?) in
if error == nil {
//結果処理
self.sourceImageFace = response?.sourceImageFace //検索したい顔の検出結果
self.resultFacesMatch = response?.faceMatches //検出対象画像に対する結果の取得(AWSRekognitionCompareFacesMatch)
}
else{
//エラー処理
}
}
結果を取得したら、faceMatchesには、顔検出の結果(複数にいれば複数にの顔の位置データと、比較元の画像との類似性)が取得できますので、類似性の値を調整し、同じ顔があったかを判断することが可能になります。
//検出対象元の顔画像の場所を取得しTrim
sourceFaceImage.image = trimImage(origImage: pickedImage1,
x: sourceImageFace.boundingBox!.left as! CGFloat,
y: sourceImageFace.boundingBox!.top as! CGFloat,
width: sourceImageFace.boundingBox!.width as! CGFloat,
height: sourceImageFace.boundingBox?.height as! CGFloat);
//検出対象先の画像における、顔の場所の取得と類似性の確認
for result in resultFacesMatch {
let trimedImage = trimImage(origImage: pickedImage2,
x: result.face?.boundingBox!.left as! CGFloat,
y: result.face?.boundingBox!.top as! CGFloat,
width: result.face?.boundingBox!.width as! CGFloat,
height: result.face?.boundingBox?.height as! CGFloat);
//類似性の確認(以下の例では80%以上の類似性なら、顔検出と判断)
var matchResult = result.similarity as! Int > 80 ? "Found the face!" : "Not Match..."
}
そうすると、以下のように集合写真から、探したい人がいるかどうかを確認することができます。

投稿者プロフィール
最新の投稿
採用情報2021年12月25日2021年のITニュースを振り返る
技術・開発情報2021年9月1日セキュリティについて考えてみる
技術・開発情報2021年2月15日20210215週刊Techニュース
技術・開発情報2021年2月8日20210208週刊Techニュース