すでに前から公開されている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日セキュリティについて考えてみる
- Android2021年2月15日20210215週刊Techニュース
- Android2021年2月8日20210208週刊Techニュース