FutureStandard MAKERS

東京にある映像解析プラットフォーム「SCORER」の開発をしているスタートアップのブログです

SCORERとAWSを利用して人の滞在時間を測定してみよう

f:id:FutureStandard:20181221171632p:plain

前々回は映像からの顔検出について、前回は顔写真からの年齢・性別判定について説明しました。第三回目となる今回は、SCORERの映像から出力した顔画像を利用し、その顔写真の人物の滞在時間を測定するサンプルプログラムを紹介します。


①システム構成
f:id:FutureStandard:20181228125759p:plain

このサンプルプログラムは、入口側(enter.py)と出口側(out.py)で処理が分かれています。まず共通処理として、face_detector.pyによる顔検出とtracked_object.py、object_tracker.pyによる顔トラッキングを実行します。この三つのプログラムは前々回の記事で実行したものと同じです。次に入り口側(enter.py)のFace_indexer.pyは、tracked_object.pyから受け取ったロストした顔の情報から顔画像と入時間情報を抽出し、Local Disk上のディレクトリにログとして保存するとともに、AWS Rekognitionへ連携します。AWS Rekognitionは、顔画像に入時間情報のラベルを付けてAWS上に保存します。出口側(out.py)のFace_indexer.pyは、入口側と同様にtracked_object.pyからロストした顔の情報を受け取り、顔画像をAWS Rekognitionに連携します。AWS Rekognitionは、受け取った顔画像と保存している顔画像の比較を行い、同一人物と思われる顔画像のラベル(入時間情報)を返します。Face_indexer.pyは、AWS Rekognitionからその情報を受け取り、顔画像と入出時間の情報をログとしてLocal Disk上のディレクトリに保存します。


②サンプルプログラムを確認する
下記のSCORER設定ページに移動し、「SCORER SDK Sample」へ移動します。

http://{RaspberrypiのIPアドレス}:20002
f:id:FutureStandard:20181106150938p:plain

サンプルプログラム「Face_stay」が存在することを確認します。
f:id:FutureStandard:20181221145348p:plain

※ブラウザキャッシュにより一時的にページが更新されない場合があります。その場合は、キャッシュを削除するか、時間をおいてページを更新してください。
上記対応後もリンクが表示されない場合は下記リンクの「4. SCORER SDKの更新」を実施してください。

http://downloads.scorer.jp/SCORER_SDK_Starter_Guide_v0.4.1.pdf


AWS APIキーを設定する
Cloud9から~/scorer-sdk-python/samples/Face_stayに移動し、face_indexer.pyを開きます。AWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEYにアクセスキーとシークレットアクセスキーをそれぞれ格納してください。また、APIキーを発行したリージョンがアジアパシフィック (東京)以外の場合は31行目のregion_nameをリージョンに合うコードに変更してください(下記リンク先にリージョンとコードの対応表があります)。

f:id:FutureStandard:20181221152338p:plain

リージョンとアベイラビリティーゾーン - Amazon Elastic Compute Cloud

AWS APIキーの発行は、下記リンク先の1~3を実施してください。
Amazon Rekognition の使用開始 - Amazon Rekognition


④enter.pyの実行
Cloud9から~/scorer-sdk-python/samples/Face_stayに移動し、enter.py(入口側のプログラム)を開いた状態で「Run」を押して実行します。

f:id:FutureStandard:20181221152959p:plain

すると、SCORERの映像からロストした顔がAWSに連携され始めます。連携対象はSCORERの映像内に2秒以上存在していた顔となっており、ロストまでの間で最も顔の面積が大きい顔画像が連携されます。連携された画像はAWS上で再度顔判定が行われ、顔と判定されたものはAWS上に保存されます。また同一人物が映像から複数回ロストした場合には、最も顔の面積の大きい顔画像のみがAWS上に保存されます。このため、AWS上に同一人物の顔画像が複数登録されることはありません。

SCORER開発者画面に移動し、全てのWeb Showをスタート状態にして「all_view」をクリックします。

f:id:FutureStandard:20181221153505p:plain

すると、これまでAWSに連携された顔画像の一覧が画面に出力されます(最新の4枚のみ表示されます)。

f:id:FutureStandard:20181221155949p:plain

また、出力された顔画像は~/scorer-sdk-python/samples/Face_stay/aws_img/registに保存されていますので、Cloud9上で確認することも可能です。

f:id:FutureStandard:20181221160529p:plain

十分な顔画像がAWSに保存されたことを確認できましたら、enter.pyの動作を停止させてください(再度実行するとこれまでAWS上に連携されていた顔画像は全て削除されてしまうので注意してください)。


⑤out.pyの実行
out.py(出口側のプログラム)を開いた状態で「Run」を押して実行します(必ずenter.pyを停止させてから実行してください)。すると、ロストした顔とAWS上の顔画像の比較が開始されます。

f:id:FutureStandard:20181221162816p:plain

先ほどと同様にSCORER開発者画面に移動し、全てのWeb Showをスタート状態にして「all_view」をクリックすると、情報が記載されたロスト顔画像の一覧が出力されます。Faceidは画像の顔番号、inがenter.pyプログラムでロストした時間、outがout.pyでロストした時間となっており、このinとoutの差分がその人物が滞在した時間となります。

f:id:FutureStandard:20181221163952p:plain

また、この顔画像も~/scorer-sdk-python/samples/Face_stay/aws_img/timestampに保存されていますので、Cloud9上で確認することが可能です。

f:id:FutureStandard:20181221164536p:plain

加えて、~/scorer-sdk-python/samples/Face_stay/log/registration.logに検出ログが出力されますので、顔番号がわかっている場合にはこちらから滞在時間を確認することも可能です。

f:id:FutureStandard:20181221165657p:plain


⑥ログ情報について
・~/scorer-sdk-python/samples/Face_stay/log/registration.log
AWSへの顔画像の保存、削除、顔画像の一致判定についてのログ情報が出力されます。最初にaddと出力されている行は顔画像保存、deleteと出力されている行は顔画像削除、detectと出力されている行は顔画像一致判定についての情報となります。

add:566f36e6-22c2-4eac-9505-5b69eeabe7f5 4_img:2018:12:21:15:58:10
delete:e7de2d6b-8bdf-4a47-8dc7-3b9e5445d51c
add:a0a5275b-705a-4360-b11e-b23e593f4283 4_img:2018:12:21:15:58:39
delete:566f36e6-22c2-4eac-9505-5b69eeabe7f5
add:3fa7908c-396e-4d90-8a3d-897e2e5df3ab 4_img:2018:12:21:15:59:06
delete:a0a5275b-705a-4360-b11e-b23e593f4283
detect:4 enter:2018-12-21 15:59:06 out:2018-12-21 16:06:33
detect:4 enter:2018-12-21 15:59:06 out:2018-12-21 16:07:12

・~/scorer-sdk-python/samples/Face_stay/aws/rekognition.log
AWSから返されるレスポンス文字列のログ情報が出力されます。

{'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'abd0d563-04e6-11e9-806c-89d7204b29a9', 'HTTPHeaders': {'x-amzn-requestid': 'abd0d563-04e6-11e9-806c-89d7204b29a9', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:07:18 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '330'}, 'RetryAttempts': 0}, 'DeletedFaces': ['02ba74bb-34ff-4418-bf42-2ff1ca60bbfb', '0d5f3f59-05ab-43df-b67e-1d0cf5b754cc', '52c808a5-9fe0-4881-b668-bf9e8566e7d7', '8c374f6b-fa41-451d-ab92-ce34072ad628', 'a7e9f28c-c560-4abf-b9e5-d975bf86d915', 'b4931b23-56be-42ee-a7c5-b5972e4e1445', 'd7f6909b-08c3-4e60-826d-c08f84dc5789', 'dde9f8df-0688-42f4-a494-3f4081fd0a81']}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.95734405517578, 'FaceMatches': [], 'SearchedFaceBoundingBox': {'Left': 0.13574661314487457, 'Width': 0.8069381713867188, 'Top': 0.17221584916114807, 'Height': 0.7370837926864624}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'c6611190-04e6-11e9-95b2-6d5afa0b6559', 'HTTPHeaders': {'x-amzn-requestid': 'c6611190-04e6-11e9-95b2-6d5afa0b6559', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:08:03 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '222'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'c6ede84f-04e6-11e9-97de-d37d3960f770', 'HTTPHeaders': {'x-amzn-requestid': 'c6ede84f-04e6-11e9-97de-d37d3960f770', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:08:04 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1075'}, 'RetryAttempts': 0}, 'OrientationCorrection': 'ROTATE_0', 'UnindexedFaces': [], 'FaceRecords': [{'Face': {'ExternalImageId': '1_img:2018:12:21:15:07:50', 'FaceId': 'ad688810-7cac-46c6-9323-6a96c2beebac', 'BoundingBox': {'Left': 0.13574661314487457, 'Width': 0.8069381713867188, 'Top': 0.17221584916114807, 'Height': 0.7370837926864624}, 'ImageId': '96828bb8-f40b-5e1a-8b96-3adf672b4355', 'Confidence': 99.95734405517578}, 'FaceDetail': {'Confidence': 99.95734405517578, 'Pose': {'Roll': -19.148406982421875, 'Yaw': -19.70099449157715, 'Pitch': 19.21202278137207}, 'BoundingBox': {'Left': 0.13574661314487457, 'Width': 0.8069381713867188, 'Top': 0.17221584916114807, 'Height': 0.7370837926864624}, 'Quality': {'Sharpness': 78.74752044677734, 'Brightness': 74.9334716796875}, 'Landmarks': [{'Type': 'eyeLeft', 'X': 0.348079115152359, 'Y': 0.4856176972389221}, {'Type': 'eyeRight', 'X': 0.630786120891571, 'Y': 0.3938792645931244}, {'Type': 'nose', 'X': 0.4222404658794403, 'Y': 0.5315697193145752}, {'Type': 'mouthLeft', 'X': 0.4144774377346039, 'Y': 0.7685179710388184}, {'Type': 'mouthRight', 'X': 0.6391076445579529, 'Y': 0.6964693069458008}]}}]}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.99868774414062, 'FaceMatches': [{'Similarity': 97.21730041503906, 'Face': {'ExternalImageId': '1_img:2018:12:21:15:07:50', 'FaceId': 'ad688810-7cac-46c6-9323-6a96c2beebac', 'BoundingBox': {'Left': 0.1357470005750656, 'Width': 0.8069379925727844, 'Top': 0.17221599817276, 'Height': 0.7370839715003967}, 'ImageId': '96828bb8-f40b-5e1a-8b96-3adf672b4355', 'Confidence': 99.9572982788086}}], 'SearchedFaceBoundingBox': {'Left': 0.04311322793364525, 'Width': 0.9008395671844482, 'Top': 0.13102282583713531, 'Height': 0.8389686942100525}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'f58df0ea-04e6-11e9-9b09-65ea07e9c79e', 'HTTPHeaders': {'x-amzn-requestid': 'f58df0ea-04e6-11e9-9b09-65ea07e9c79e', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:09:23 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '556'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'f669f95f-04e6-11e9-806c-89d7204b29a9', 'HTTPHeaders': {'x-amzn-requestid': 'f669f95f-04e6-11e9-806c-89d7204b29a9', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:09:24 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1077'}, 'RetryAttempts': 0}, 'OrientationCorrection': 'ROTATE_0', 'UnindexedFaces': [], 'FaceRecords': [{'Face': {'ExternalImageId': '1_img:2018:12:21:15:09:18', 'FaceId': 'eb3f5b1e-1ef2-43f0-ba77-bfac060dd017', 'BoundingBox': {'Left': 0.04311322793364525, 'Width': 0.9008395671844482, 'Top': 0.13102282583713531, 'Height': 0.8389686942100525}, 'ImageId': '19fc5b10-5261-5211-8263-9dd8a985f3d7', 'Confidence': 99.99868774414062}, 'FaceDetail': {'Confidence': 99.99868774414062, 'Pose': {'Roll': 1.8474092483520508, 'Yaw': -4.563417911529541, 'Pitch': 6.1258015632629395}, 'BoundingBox': {'Left': 0.04311322793364525, 'Width': 0.9008395671844482, 'Top': 0.13102282583713531, 'Height': 0.8389686942100525}, 'Quality': {'Sharpness': 92.2739028930664, 'Brightness': 50.5615119934082}, 'Landmarks': [{'Type': 'eyeLeft', 'X': 0.3243033289909363, 'Y': 0.4195960760116577}, {'Type': 'eyeRight', 'X': 0.648450493812561, 'Y': 0.42963719367980957}, {'Type': 'nose', 'X': 0.46684855222702026, 'Y': 0.5469269156455994}, {'Type': 'mouthLeft', 'X': 0.3290267586708069, 'Y': 0.7389536499977112}, {'Type': 'mouthRight', 'X': 0.6235754489898682, 'Y': 0.7467675805091858}]}}]}
{'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': 'f762fecc-04e6-11e9-a34f-b7d7a9ab1a6b', 'HTTPHeaders': {'x-amzn-requestid': 'f762fecc-04e6-11e9-a34f-b7d7a9ab1a6b', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:09:25 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '57'}, 'RetryAttempts': 0}, 'DeletedFaces': ['ad688810-7cac-46c6-9323-6a96c2beebac']}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.99993133544922, 'FaceMatches': [{'Similarity': 99.57421112060547, 'Face': {'ExternalImageId': '1_img:2018:12:21:15:09:18', 'FaceId': 'eb3f5b1e-1ef2-43f0-ba77-bfac060dd017', 'BoundingBox': {'Left': 0.04311320185661316, 'Width': 0.9008399844169617, 'Top': 0.13102300465106964, 'Height': 0.8389689922332764}, 'ImageId': '19fc5b10-5261-5211-8263-9dd8a985f3d7', 'Confidence': 99.99870300292969}}], 'SearchedFaceBoundingBox': {'Left': 0.06739483773708344, 'Width': 0.9388798475265503, 'Top': 0.11611030250787735, 'Height': 0.8397263288497925}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '02ef6297-04e7-11e9-9b09-65ea07e9c79e', 'HTTPHeaders': {'x-amzn-requestid': '02ef6297-04e7-11e9-9b09-65ea07e9c79e', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:09:45 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '561'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 98.68567657470703, 'FaceMatches': [{'Similarity': 97.21086883544922, 'Face': {'ExternalImageId': '1_img:2018:12:21:15:09:18', 'FaceId': 'eb3f5b1e-1ef2-43f0-ba77-bfac060dd017', 'BoundingBox': {'Left': 0.04311320185661316, 'Width': 0.9008399844169617, 'Top': 0.13102300465106964, 'Height': 0.8389689922332764}, 'ImageId': '19fc5b10-5261-5211-8263-9dd8a985f3d7', 'Confidence': 99.99870300292969}}], 'SearchedFaceBoundingBox': {'Left': 0.10787992179393768, 'Width': 0.8489680886268616, 'Top': 0.17140468955039978, 'Height': 0.7566889524459839}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '0e5b94a0-04e7-11e9-95b2-6d5afa0b6559', 'HTTPHeaders': {'x-amzn-requestid': '0e5b94a0-04e7-11e9-95b2-6d5afa0b6559', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:10:04 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '561'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.67516326904297, 'FaceMatches': [{'Similarity': 97.51792907714844, 'Face': {'ExternalImageId': '1_img:2018:12:21:15:09:18', 'FaceId': 'eb3f5b1e-1ef2-43f0-ba77-bfac060dd017', 'BoundingBox': {'Left': 0.04311320185661316, 'Width': 0.9008399844169617, 'Top': 0.13102300465106964, 'Height': 0.8389689922332764}, 'ImageId': '19fc5b10-5261-5211-8263-9dd8a985f3d7', 'Confidence': 99.99870300292969}}], 'SearchedFaceBoundingBox': {'Left': 0.038222648203372955, 'Width': 0.8982322216033936, 'Top': 0.15299618244171143, 'Height': 0.7989799976348877}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '1420a1bb-04e7-11e9-8557-dfe67f66917a', 'HTTPHeaders': {'x-amzn-requestid': '1420a1bb-04e7-11e9-8557-dfe67f66917a', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:10:13 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '562'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.99772644042969, 'FaceMatches': [{'Similarity': 98.61427307128906, 'Face': {'ExternalImageId': '1_img:2018:12:21:15:09:18', 'FaceId': 'eb3f5b1e-1ef2-43f0-ba77-bfac060dd017', 'BoundingBox': {'Left': 0.04311320185661316, 'Width': 0.9008399844169617, 'Top': 0.13102300465106964, 'Height': 0.8389689922332764}, 'ImageId': '19fc5b10-5261-5211-8263-9dd8a985f3d7', 'Confidence': 99.99870300292969}}], 'SearchedFaceBoundingBox': {'Left': 0.05083996430039406, 'Width': 0.8974359035491943, 'Top': 0.13481363654136658, 'Height': 0.8049167394638062}, 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '238fe562-04e7-11e9-97de-d37d3960f770', 'HTTPHeaders': {'x-amzn-requestid': '238fe562-04e7-11e9-97de-d37d3960f770', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:10:40 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '561'}, 'RetryAttempts': 0}}
{'FaceModelVersion': '3.0', 'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '2491769f-04e7-11e9-95b2-6d5afa0b6559', 'HTTPHeaders': {'x-amzn-requestid': '2491769f-04e7-11e9-95b2-6d5afa0b6559', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:10:42 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '1083'}, 'RetryAttempts': 0}, 'OrientationCorrection': 'ROTATE_0', 'UnindexedFaces': [], 'FaceRecords': [{'Face': {'ExternalImageId': '1_img:2018:12:21:15:10:35', 'FaceId': '2c1438c1-0269-46a9-be21-4f1667a02a90', 'BoundingBox': {'Left': 0.05083996430039406, 'Width': 0.8974359035491943, 'Top': 0.13481363654136658, 'Height': 0.8049167394638062}, 'ImageId': 'f11482fc-8e52-57f8-b9b1-4c90d2493831', 'Confidence': 99.99772644042969}, 'FaceDetail': {'Confidence': 99.99772644042969, 'Pose': {'Roll': -21.150127410888672, 'Yaw': -29.321203231811523, 'Pitch': 16.052364349365234}, 'BoundingBox': {'Left': 0.05083996430039406, 'Width': 0.8974359035491943, 'Top': 0.13481363654136658, 'Height': 0.8049167394638062}, 'Quality': {'Sharpness': 89.91268920898438, 'Brightness': 52.14270782470703}, 'Landmarks': [{'Type': 'eyeLeft', 'X': 0.29950860142707825, 'Y': 0.48882734775543213}, {'Type': 'eyeRight', 'X': 0.5550848841667175, 'Y': 0.39207524061203003}, {'Type': 'nose', 'X': 0.3410171866416931, 'Y': 0.5677312612533569}, {'Type': 'mouthLeft', 'X': 0.3752879798412323, 'Y': 0.7750559449195862}, {'Type': 'mouthRight', 'X': 0.6084532737731934, 'Y': 0.7025212645530701}]}}]}
{'ResponseMetadata': {'HTTPStatusCode': 200, 'RequestId': '25b97b80-04e7-11e9-948a-65d558bb65e5', 'HTTPHeaders': {'x-amzn-requestid': '25b97b80-04e7-11e9-948a-65d558bb65e5', 'connection': 'keep-alive', 'date': 'Fri, 21 Dec 2018 06:10:42 GMT', 'content-type': 'application/x-amz-json-1.1', 'content-length': '57'}, 'RetryAttempts': 0}, 'DeletedFaces': ['eb3f5b1e-1ef2-43f0-ba77-bfac060dd017']}
{'DeletedFaces': ['2c1438c1-0269-46a9-be21-4f1667a02a90'], 'ResponseMetadata': {'RequestId': '23d974cc-04eb-11e9-9b09-65ea07e9c79e', 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HTTPHeaders': {'x-amzn-requestid': '23d974cc-04eb-11e9-9b09-65ea07e9c79e', 'date': 'Fri, 21 Dec 2018 06:39:17 GMT', 'content-length': '57', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}}}
{'FaceMatches': [], 'SearchedFaceBoundingBox': {'Top': 0.1742970049381256, 'Height': 0.8435974717140198, 'Width': 0.8753315806388855, 'Left': 0.06028454378247261}, 'ResponseMetadata': {'RequestId': '3ae9b10d-04eb-11e9-97de-d37d3960f770', 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HTTPHeaders': {'x-amzn-requestid': '3ae9b10d-04eb-11e9-97de-d37d3960f770', 'date': 'Fri, 21 Dec 2018 06:39:56 GMT', 'content-length': '220', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}}, 'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.9767074584961}
{'ResponseMetadata': {'RequestId': '3b84dfbd-04eb-11e9-806c-89d7204b29a9', 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HTTPHeaders': {'x-amzn-requestid': '3b84dfbd-04eb-11e9-806c-89d7204b29a9', 'date': 'Fri, 21 Dec 2018 06:39:57 GMT', 'content-length': '1076', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}}, 'OrientationCorrection': 'ROTATE_0', 'FaceRecords': [{'Face': {'ExternalImageId': '2_img:2018:12:21:15:39:49', 'FaceId': '0bc49bbf-b31a-45b3-a56a-5ee84b1e3c53', 'Confidence': 99.9767074584961, 'ImageId': 'f4f577da-ca42-5da0-b64c-bed820678531', 'BoundingBox': {'Top': 0.1742970049381256, 'Height': 0.8435974717140198, 'Width': 0.8753315806388855, 'Left': 0.06028454378247261}}, 'FaceDetail': {'Pose': {'Yaw': -14.157378196716309, 'Pitch': 13.660188674926758, 'Roll': 1.2072583436965942}, 'Confidence': 99.9767074584961, 'Landmarks': [{'Y': 0.4516949951648712, 'X': 0.3424430191516876, 'Type': 'eyeLeft'}, {'Y': 0.45525026321411133, 'X': 0.6538355946540833, 'Type': 'eyeRight'}, {'Y': 0.5599408745765686, 'X': 0.431110143661499, 'Type': 'nose'}, {'Y': 0.7843083739280701, 'X': 0.3302305340766907, 'Type': 'mouthLeft'}, {'Y': 0.7828839421272278, 'X': 0.6203056573867798, 'Type': 'mouthRight'}], 'Quality': {'Sharpness': 89.91268920898438, 'Brightness': 54.468780517578125}, 'BoundingBox': {'Top': 0.1742970049381256, 'Height': 0.8435974717140198, 'Width': 0.8753315806388855, 'Left': 0.06028454378247261}}}], 'UnindexedFaces': [], 'FaceModelVersion': '3.0'}
{'FaceMatches': [{'Similarity': 99.49250793457031, 'Face': {'ExternalImageId': '2_img:2018:12:21:15:39:49', 'FaceId': '0bc49bbf-b31a-45b3-a56a-5ee84b1e3c53', 'Confidence': 99.97669982910156, 'ImageId': 'f4f577da-ca42-5da0-b64c-bed820678531', 'BoundingBox': {'Top': 0.1742970049381256, 'Height': 0.8435969948768616, 'Width': 0.8753319978713989, 'Left': 0.06028449907898903}}}], 'SearchedFaceBoundingBox': {'Top': 0.16136161983013153, 'Height': 0.7161803841590881, 'Width': 0.8091908097267151, 'Left': 0.09240759164094925}, 'ResponseMetadata': {'RequestId': '5e8bb2e4-04eb-11e9-948a-65d558bb65e5', 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HTTPHeaders': {'x-amzn-requestid': '5e8bb2e4-04eb-11e9-948a-65d558bb65e5', 'date': 'Fri, 21 Dec 2018 06:40:56 GMT', 'content-length': '559', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}}, 'FaceModelVersion': '3.0', 'SearchedFaceConfidence': 99.9939193725586}


以上で、滞在時間測定プログラムの説明は終了です。
これまで顔検出を応用したシステムとして年齢・性別判定、滞在時間測定のシステムについて説明をしてきましたが、この他にも様々なシステムで活用が可能です。みなさん、ぜひいろいろなシステムを考えて活用してみてください。