이번 온라인 세미나에서는 비디오 영상 및 이미지에 대한 AI 서비스 구현 패턴을 살펴보고, AWS 서비스를 활용한 구현 사례에 대해 알아볼 예정입니다. 주요 활용 서비스는 Kinesis Video Streams, Rekognition Video, Lambda 입니다. 또한 DeepLens와 Greengrass ML inference를 이용한 디바이스에서 ML 예측 수행도 살펴볼 예정입니다.
AWS DeepLens Demo: https://youtu.be/c6a-0IZ-YFo
더 많은 AWS 온라인 세미나 알아보기: https://aws.amazon.com/ko/events/webinars/series
2. 강연 중 질문하는 방법
자신이 질문한 내역이 표시되며,
전체 공개로 답변된 내용은 검은색,
질문자 본인에게만 공개로 답변된
내용은 붉은 색으로 돌아옵니다.
본 컨텐츠는 고객의 편의를 위해 AWS 서비스 설명을 위해 온라인 세미나용으로 별도로 제작, 제공된 것입니다. 만약
AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우, AWS 사이트(aws.amazon.com)가 우선합니다. 또한 AWS
사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이
우선합니다.
AWS는 본 컨텐츠에 포함되거나 컨텐츠를 통하여 고객에게 제공된 일체의 정보, 콘텐츠, 자료, 제품(소프트웨어 포함) 또는 서비스를 이용함으로 인하여 발생하는
여하한 종류의 손해에 대하여 어떠한 책임도 지지 아니하며, 이는 직접 손해, 간접 손해, 부수적 손해, 징벌적 손해 및 결과적 손해를 포함하되 이에 한정되지
아니합니다.
고지 사항(Disclaimer)
3. 본 세션의 주요 주제
• 간단한 실시간 이미지 분석 예제
• Amazon Rekognition Image
• 디바이스에서 직접 분석하는 방법
• AWS Greengrass ML Inference
• AWS DeepLens
• 실시간 영상 활용 방법
• Amazon Kinesis Video Streams
• Amazon Rekognition Video
5. 간단한 실시간 이미지 분석 시나리오
• 카메라가 설치된 디바이스에서 카메라에 비춰진
이미지를 실시간으로 분석하고 그 결과를 활용하는 예제
Amazon
Rekognition
스마트 CCTV실시간 영상 분석 결과
분석 요청결과 스트리밍
6. 카메라에서 영상 얻기
• OpenCV 라이브러리의 VideoCapture 클래스 활용
• 비디오 파일, 이미지 시퀀스 또는 카메라에서 비디오를 캡춰하는데 활용
import cv2
webcam = cv2.VideoCapture(0)
success, image = webcam.read()
9. 분석 결과를 비디오 스트리밍으로 출력
• Flask (마이크로 웹 프레임워크)를 활용해서 웹 서비스 구성
• 분석 결과를 포함한 이미지를 MJPEG 형식으로 출력
from flask import Flask, render_template, Response
@app.route('/video_feed’)
def video_feed():
return Response(gen(VideoCamera()),mimetype='multipart/x-mixed-replace; boundary=frame')
16. Greengrass ML Inference
• 머신 러닝 모델 및 예측 코드를 Greengrass Core
디바이스에 배포하고 수행하는 환경을 제공함
AWS Greengrass
콘솔에서 기기로 모델
배포
디바이스에서
모델 기반 예측
인터넷 비연결시에도
동작 가능
클라우드에서 모델
학습 및 훈련
17. 배포할 모델 및 Lambda 함수
• 머신러닝 모델: SqueezeNet
• AlexNet 수준의 정확도
• 50배 정도 적은 파라메터 및 작은 모델 크기 (0.5MB 이하)
• https://arxiv.org/abs/1602.07360
• Lambda 함수
• Python 2.7, Apache MXNet 0.11.0
• 카메라 접근을 위한 로컬 리소스 추가
25. 머신러닝 예측 수행 코드
def predict_from_image(self, cvimage, reshape=(224, 224), N=5):
topN = []
# Switch RGB to BGR format (which ImageNet networks take)
img = cv2.cvtColor(cvimage, cv2.COLOR_BGR2RGB)
if img is None:
return topN
# Resize image to fit network input
img = cv2.resize(img, reshape)
img = np.swapaxes(img, 0, 2)
img = np.swapaxes(img, 1, 2)
img = img[np.newaxis, :]
# Run forward on the image
self.mod.forward(Batch([mx.nd.array(img)]))
prob = self.mod.get_outputs()[0].asnumpy()
prob = np.squeeze(prob)
# Extract the top N predictions from the softmax output
a = np.argsort(prob)[::-1]
for i in a[0:N]:
topN.append((prob[i], self.synsets[i]))
return topN
이미지에 대한 예측 수행
탐지된 객체 상위 N 개 추출
40. Kinesis Video Streams – 구성 요소
• Producer
• Kinesis Video Streams Producer 라이브러리 활용
• 비디오 및 다른 데이터(오디오, 이미지, RADAR)를
Kinesis Video Streams로 보내는 역할
• C++, Java, Android
• Consumer
• Kinesis Video Streams Parser 라이브러리 사용
• 데이터를 읽고, 처리하고, 분석하는 역할을 하는
Kinesis Video Streams 어플리케이션
• Java
45. Raspberry Pi를 Producer로 만들기
• Amazon Kinesis Video Streams Raspberry Pi 가이드
• https://aws.amazon.com/kinesis/video-streams/raspberry-pi-
tutorial/
• Step-by-Step 가이드 (AWS re:Invent 2017)
• http://amzn.to/video-streams-workshop
• https://www.slideshare.net/AmazonWebServices/new-launch-
stream-video-from-edge-devices-to-aws-for-playback-storage-
and-processing-using-amazon-kinesis-video-streams-abd340-
reinvent-2017
46. Producer 시작 및 스트리밍 확인
$ AWS_ACCESS_KEY_ID=<your aws_access_key_id> AWS_SECRET_ACCESS_KEY=<your
aws_secret_access_key> ./kinesis_video_gstreamer_sample_app <stream_name>
47. Rekognition Video 연결은 어떻게 …
• Kinesis Video Streams의 Consumer에서 다음 과정을
수행합니다.
1) Rekognition이 어떤 분석을 할지 정하는 StreamProcessorSetting
생성
2) 이 설정을 적용한 Stream Processor를 생성하고,
3) 원하는 시점에 Stream Processor를 시작, 중지, 삭제합니다.
• Rekognition Video 결과는, Kinesis Data Streams으로 전송
48. Consumer – Kinesis Video + Rekognition
얼굴 검색을 위한
StreamProcessorSettings 정의
49. Consumer – Kinesis Video + Rekognition
위에서 정의된 Processor 설정을
적용한, StreamProcessor 생성
53. 참고 자료
• 실시간 영상 분석 및 스트리밍 웹 서비스
• https://github.com/muhyun/rekognition-video-stream-server
• Serverless Pipeline for Video Frame Analysis and Alerting
• https://github.com/aws-samples/amazon-rekognition-video-analyzer
• Amazon Kinesis Video Streams Producer
• https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp
• https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-java
• DeepLens Community Projects
• https://aws.amazon.com/deeplens/community-projects/