1. 개요
Kinesis Video Stream을 입력으로 받고 Rekognition Stream Processor를 이용하여 얼굴을 실시간 인식하고 그 결과를 Kinesis DataStream으로 보낸다. Kinesis 제품군에는 Kinesis Data Stream, Kinesis Video Stream, Kinesis Data Firehose, Kinesis Data Analytics 의 4가지가 있다. Kinesis Video Stream은 지난 포스트에서 작성하였었다. 콘솔 홈페이지에서 링크를 따라 찾아 들어가는게 쉽지 않았다. 아마존이라는 것이 정글인지라 아마존 스럽다. 아래 주소를 통하여 직접 접속하는 것이 더 편할 수도 있다.
https://console.aws.amazon.com/kinesis
https://console.aws.amazon.com/kinesisvideo/home
- Kinesis Data Streams – Capture, process, and store data streams.
- Kinesis Video Streams – Capture, process, and store video streams.
- Kinesis Data Firehose – Load data streams into AWS data stores.
- Kinesis Data Analytics – Analyze data streams with SQL and Java.
[참고] https://jhb.kr/381
2. Kinesis Data Stream 만들기 myDataStream
로그인된 상태에서 아래 주소를 통하여 접속하여 보자. https://console.aws.amazon.com/kinesis
다음 명령어로 직접 Data Stream을 만들 수 있다.
$ aws kinesis create-stream --stream-name myDataStream --shard-count 1
3. policy 만들기 ==> mypolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:PassRole",
"kinesis:PutRecord",
"kinesis:PutRecords",
"kinesisvideo:GetDataEndpoint",
"kinesisvideo:GetMedia"
],
"Resource": [
"arn:aws:kinesisvideo:*:*:stream/*/*",
"arn:aws:kinesis:*:*:stream/*"
],
"Effect": "Allow"
}
]
}
4. role 만들기 => myrole
위에서 작성한 mypolicy 만 추가한다.
5. AWS CloudShell을 실행한다. 검색창에서 CloudShell 입력하고 실행한다.
$ aws configure
$ aws kinesis list-streams
$ aws rekognition list-collections
$ aws rekognition describe-collection --collection-id mycollection
$ aws rekognition list-faces --collection-id mycollection
$ aws iam help
$ aws iam get-role --role-name myrole
$ aws iam list-roles
특정 face-id를 이용하여 mycollection에서 검색하여 본다.
$ aws rekognition search-faces --collection-id mycollection --max-faces 1 --face-match-threshold 70 --face-id e5198f3c-12a8-4b7f-805e-6271330844a6
7. Rekognition Stream Processor 생성하기 => myStreamProcessor
입력되는 비디오 스트림을 Rekognition과 연계하여 얼굴 인식을 수행하고 결과를 DataStream으로 보내주는 역활을 수행하는 Stream Processor를 만들어 보자.
아래의 명령을 AWS CLI에서 실행한다. 여러분의 설정에 맞게 변경하여 사용한다.
role의 arn 주소/ KinesisVideoStream의 arn 주소/ KinesisDataStream의 arn 주소
지난 포스트에서 생성한 CollectionId => "mycollection"를 변경하여 입력한다.
> aws rekognition create-stream-processor --role-arn "arn: myrole 주소" --input '{"KinesisVideoStream":{"Arn":"arn: KinesisVideoStream 주소"}}' --name myStreamProcessor --stream-processor-output '{"KinesisDataStream":{"Arn":"arn: myDataStream 주소 "}}' --settings '{"FaceSearch":{"CollectionId":"mycollection","FaceMatchThreshold": 85.6}}'
다음과 같은 메시지를 출력한다.
{
"StreamProcessorArn": "arn:aws:rekognition:us-east-1:7222222244:streamprocessor/myStreamProcessor"
}
$ aws rekognition list-stream-processors
좀 더 상세 정보를 얻으려면 다음과 같은 명령어를 사용한다.
$ aws rekognition describe-stream-processor --name myStreamProcessor
stream-processor의 삭제 명령어는 아래와 같다.
$ aws rekognition delete-stream-processor --name myStreamProcessor
8. 시작하기(Start Stream-processor)
stream-processor 를 실행하고 정상 동작하는지 체크하여 보자.
$ aws rekognition start-stream-processor --name myStreamProcessor
$ aws rekognition describe-stream-processor --name myStreamProcessor
9. 종료하기 (Stop Stream-processor) 사용하지 않으면 종료한다. you know why?
> aws rekognition stop-stream-processor --name myStreamProcessor
10. 테스트 해보기
step1. DataStream에 AWS CLI 를 이용하여 임의로 데이터를 넣어보자.
$ aws kinesis put-record --stream-name myDataStream --cli-binary-format raw-in-base64-out --partition-key 1 --data "Hello01" --region us-east-1
$ aws kinesis put-record --stream-name myDataStream --cli-binary-format raw-in-base64-out --partition-key 1 --data "Hello01" --region us-east-1
$ aws kinesis put-record --stream-name myDataStream --cli-binary-format raw-in-base64-out --partition-key 1 --data "Hello01" --region us-east-1
$ aws kinesis put-record --stream-name myDataStream --cli-binary-format raw-in-base64-out --partition-key 1 --data "Hello01" --region us-east-1
아래와 같은 메시지가 반환된다.
{
"ShardId": "shardId-000000000000",
"SequenceNumber": "49620566433720427565832297464284938837146971052017975298"
}
step 2. 데이터를 읽어보자.
$ aws kinesis get-shard-iterator --stream-name myDataStream --shard-iterator-type TRIM_HORIZON --shard-id shardId-000000000000
아래와 같은 출력을 얻을 수 있다. ShardIterator를 통하여 데이터를 읽어보자,
{
"ShardIterator": "AAAAAAAAAAHbaYTKYjumR2zc7 ... MTsUbx1P43"
}
위에서 받아온 ShardIterator를 이용하여 get-records 를 할 수 가 있다.
$ aws kinesis get-records --shard-iterator AAAAAAAAAAHbaYTKYjumR2zc7 ... MTsUbx1P43
step 3. 지난 포스트에서 완성한 라즈베리 파이 비디오를 AWS에 스트림으로 전송한다.
그 전에 AWS CLI에서 Start Stream-processor 를 실행한다.
$ aws rekognition start-stream-processor --name myStreamProcessor
라즈베리파이에서 다음을 실행하여 비디오를 전송한다.
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! omxh264enc control-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="스트림 이름" access-key="액세스키" secret-key="시크릿키" aws-region="설정된 지역"
step 4. 데이터를 읽어보자.