RaspberryPI를 사용하여 Amazon Rekognition의 이미지 인식을 시도했습니다.
개요
우연히 RaspberryPI Model 3이 손에 들었기 때문에 굴러 있던 USB 카메라를 이용하여
외출중인 햄스터들의 이미지를 Slack에 투고하는 시스템을 만들어 보았습니다.
구성

USB 카메라에서 이미지 획득
raspberry pi이므로 카메라 모듈이라고 생각했는데, 일반 USB 카메라를 사용합니다.
기기 인식
특히 아무것도 생각하지 않고, USB를 접속하는 것만으로 인식될 것입니다.
인식되었는지 확인하려면 lsusb
명령을 실행합니다.
아래는 내 환경의 예입니다.
한 줄로 카메라 장치를 인식합니다. (Logitech의 카메라를 사용하고 있기 때문에 Logitech
라고 출력되고 있습니다)
$ sudo lsusb
Bus 001 Device 004: ID 046d:0826 Logitech, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Python 프로그램에서 이미지 (동영상) 가져 오기
여러 가지 방법이 있다고 생각하지만 OpenCV를 사용했습니다.
(화상 처리도 간단하게 할 수 있고)
특히 버전을 고집하지 않는다면 다음 명령으로 OpenCV가 설치되어 Python에서 사용할 수 있습니다.
들어가는 버전은 2.4입니다.
sudo apt-get install libopencv-dev python-opencv
이제 다음과 같이 파이썬에서 USB 카메라 이미지를 얻을 수 있습니다.
# -*- coding: utf-8 -*-
import cv2
# OpenCVを利用してWebカメラからのキャプチャ準備
cap = cv2.VideoCapture(0)
# Webカメラから画像読み込み
ret, frame = cap.read()
Amazon Rekognition을 사용한 이미지 인식
Amazon Rekognition 사용에는 무료 프레임이 있지만 사용 방법에 따라 사용료가 발생하는 경우가 있습니다.
AWS 페이지 등에서 이용 요금을 확실히 확인합시다.
AWS PythonSDK 설치 및 사용 준비
AWS PythonSDK를 설치합니다.
sudo pip install boto3
~/.aws/credentials
라는 파일을 준비하고,
AWS 자격 증명을 설명합니다.
[default]
aws_access_key_id = ****
aws_secret_access_key = ****
region = us-west-2
이제 PythonSDK에서 AWS에 액세스할 수 있습니다.
AWS Rekognition 사용
boto3에서 AWS Rekognition의 Detect Labels API를 호출합니다.
Detect Labels API는 이미지가 입력되면,
이미지에 포함 된 객체의 이름 (= 레이블) 목록과
그 객체가 실제로 이미지에 포함되어 있는지 정확도가 반환됩니다.
주의점으로서는, AWS측은 화상 데이터를 byterayray형으로 받기 때문에,
OpenCV측에서 ndarray형이 되고 있는 데이터를 변환할 필요가 있는 점입니까.
import boto3
client = boto3.client('rekognition')
# awsに送信するためndarrayとなっている画像をpngのbytearrayに変換
ret, data = cv2.imencode('.png', frame)
byte_data = bytearray(data)
# Amazon rekognitionを呼び出し
response = client.detect_labels(
Image={
'Bytes': byte_data
},
MaxLabels=50
)
print(response)
응답 예:
{u'Labels': [
{u'Confidence': 66.29442596435547, u'Name': u'Animal'},
{u'Confidence': 66.29442596435547, u'Name': u'Hamster'},
{u'Confidence': 66.29442596435547, u'Name': u'Mammal'},
{u'Confidence': 66.29442596435547, u'Name': u'Rodent'}],
'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '***',
'HTTPHeaders': {'date': 'Fri, 12 May 2017 06:20:06 GMT', 'x-amzn-requestid': '***', 'content-length': '244', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}},
u'OrientationCorrection': u'ROTATE_0'}
그리고는 응답 데이터의 Labels
를 판정하면, 물체 인식을 실현할 수 있습니다.
나는 다음과 같이 Hamster
라벨이 존재하는지 확인하려고합니다.
def exists_hamster(labels):
'''
From amazon rekognition detect label response,
Detect exisiting hamster
@return confidencial
'''
for label in labels:
if label['Name'] == 'Hamster':
return label['Confidence']
return 0
동작 결과
집의 햄스터들에게 실험대가 되어 주었습니다.
촬영 이미지:

실행 결과:

어쩌면 Slack에게 햄스터 이미지가 알려졌습니다.
Reference
이 문제에 관하여(RaspberryPI를 사용하여 Amazon Rekognition의 이미지 인식을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/some-nyan/items/cc45bce20abe54fe3f0f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)

USB 카메라에서 이미지 획득
raspberry pi이므로 카메라 모듈이라고 생각했는데, 일반 USB 카메라를 사용합니다.
기기 인식
특히 아무것도 생각하지 않고, USB를 접속하는 것만으로 인식될 것입니다.
인식되었는지 확인하려면 lsusb
명령을 실행합니다.
아래는 내 환경의 예입니다.
한 줄로 카메라 장치를 인식합니다. (Logitech의 카메라를 사용하고 있기 때문에 Logitech
라고 출력되고 있습니다)
$ sudo lsusb
Bus 001 Device 004: ID 046d:0826 Logitech, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Python 프로그램에서 이미지 (동영상) 가져 오기
여러 가지 방법이 있다고 생각하지만 OpenCV를 사용했습니다.
(화상 처리도 간단하게 할 수 있고)
특히 버전을 고집하지 않는다면 다음 명령으로 OpenCV가 설치되어 Python에서 사용할 수 있습니다.
들어가는 버전은 2.4입니다.
sudo apt-get install libopencv-dev python-opencv
이제 다음과 같이 파이썬에서 USB 카메라 이미지를 얻을 수 있습니다.
# -*- coding: utf-8 -*-
import cv2
# OpenCVを利用してWebカメラからのキャプチャ準備
cap = cv2.VideoCapture(0)
# Webカメラから画像読み込み
ret, frame = cap.read()
Amazon Rekognition을 사용한 이미지 인식
Amazon Rekognition 사용에는 무료 프레임이 있지만 사용 방법에 따라 사용료가 발생하는 경우가 있습니다.
AWS 페이지 등에서 이용 요금을 확실히 확인합시다.
AWS PythonSDK 설치 및 사용 준비
AWS PythonSDK를 설치합니다.
sudo pip install boto3
~/.aws/credentials
라는 파일을 준비하고,
AWS 자격 증명을 설명합니다.
[default]
aws_access_key_id = ****
aws_secret_access_key = ****
region = us-west-2
이제 PythonSDK에서 AWS에 액세스할 수 있습니다.
AWS Rekognition 사용
boto3에서 AWS Rekognition의 Detect Labels API를 호출합니다.
Detect Labels API는 이미지가 입력되면,
이미지에 포함 된 객체의 이름 (= 레이블) 목록과
그 객체가 실제로 이미지에 포함되어 있는지 정확도가 반환됩니다.
주의점으로서는, AWS측은 화상 데이터를 byterayray형으로 받기 때문에,
OpenCV측에서 ndarray형이 되고 있는 데이터를 변환할 필요가 있는 점입니까.
import boto3
client = boto3.client('rekognition')
# awsに送信するためndarrayとなっている画像をpngのbytearrayに変換
ret, data = cv2.imencode('.png', frame)
byte_data = bytearray(data)
# Amazon rekognitionを呼び出し
response = client.detect_labels(
Image={
'Bytes': byte_data
},
MaxLabels=50
)
print(response)
응답 예:
{u'Labels': [
{u'Confidence': 66.29442596435547, u'Name': u'Animal'},
{u'Confidence': 66.29442596435547, u'Name': u'Hamster'},
{u'Confidence': 66.29442596435547, u'Name': u'Mammal'},
{u'Confidence': 66.29442596435547, u'Name': u'Rodent'}],
'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '***',
'HTTPHeaders': {'date': 'Fri, 12 May 2017 06:20:06 GMT', 'x-amzn-requestid': '***', 'content-length': '244', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}},
u'OrientationCorrection': u'ROTATE_0'}
그리고는 응답 데이터의 Labels
를 판정하면, 물체 인식을 실현할 수 있습니다.
나는 다음과 같이 Hamster
라벨이 존재하는지 확인하려고합니다.
def exists_hamster(labels):
'''
From amazon rekognition detect label response,
Detect exisiting hamster
@return confidencial
'''
for label in labels:
if label['Name'] == 'Hamster':
return label['Confidence']
return 0
동작 결과
집의 햄스터들에게 실험대가 되어 주었습니다.
촬영 이미지:

실행 결과:

어쩌면 Slack에게 햄스터 이미지가 알려졌습니다.
Reference
이 문제에 관하여(RaspberryPI를 사용하여 Amazon Rekognition의 이미지 인식을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/some-nyan/items/cc45bce20abe54fe3f0f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ sudo lsusb
Bus 001 Device 004: ID 046d:0826 Logitech, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
sudo apt-get install libopencv-dev python-opencv
# -*- coding: utf-8 -*-
import cv2
# OpenCVを利用してWebカメラからのキャプチャ準備
cap = cv2.VideoCapture(0)
# Webカメラから画像読み込み
ret, frame = cap.read()

AWS 페이지 등에서 이용 요금을 확실히 확인합시다.
AWS PythonSDK 설치 및 사용 준비
AWS PythonSDK를 설치합니다.
sudo pip install boto3
~/.aws/credentials
라는 파일을 준비하고,AWS 자격 증명을 설명합니다.
[default]
aws_access_key_id = ****
aws_secret_access_key = ****
region = us-west-2
이제 PythonSDK에서 AWS에 액세스할 수 있습니다.
AWS Rekognition 사용
boto3에서 AWS Rekognition의 Detect Labels API를 호출합니다.
Detect Labels API는 이미지가 입력되면,
이미지에 포함 된 객체의 이름 (= 레이블) 목록과
그 객체가 실제로 이미지에 포함되어 있는지 정확도가 반환됩니다.
주의점으로서는, AWS측은 화상 데이터를 byterayray형으로 받기 때문에,
OpenCV측에서 ndarray형이 되고 있는 데이터를 변환할 필요가 있는 점입니까.
import boto3
client = boto3.client('rekognition')
# awsに送信するためndarrayとなっている画像をpngのbytearrayに変換
ret, data = cv2.imencode('.png', frame)
byte_data = bytearray(data)
# Amazon rekognitionを呼び出し
response = client.detect_labels(
Image={
'Bytes': byte_data
},
MaxLabels=50
)
print(response)
응답 예:
{u'Labels': [
{u'Confidence': 66.29442596435547, u'Name': u'Animal'},
{u'Confidence': 66.29442596435547, u'Name': u'Hamster'},
{u'Confidence': 66.29442596435547, u'Name': u'Mammal'},
{u'Confidence': 66.29442596435547, u'Name': u'Rodent'}],
'ResponseMetadata': {'RetryAttempts': 0, 'HTTPStatusCode': 200, 'RequestId': '***',
'HTTPHeaders': {'date': 'Fri, 12 May 2017 06:20:06 GMT', 'x-amzn-requestid': '***', 'content-length': '244', 'content-type': 'application/x-amz-json-1.1', 'connection': 'keep-alive'}},
u'OrientationCorrection': u'ROTATE_0'}
그리고는 응답 데이터의
Labels
를 판정하면, 물체 인식을 실현할 수 있습니다.나는 다음과 같이
Hamster
라벨이 존재하는지 확인하려고합니다.def exists_hamster(labels):
'''
From amazon rekognition detect label response,
Detect exisiting hamster
@return confidencial
'''
for label in labels:
if label['Name'] == 'Hamster':
return label['Confidence']
return 0
동작 결과
집의 햄스터들에게 실험대가 되어 주었습니다.
촬영 이미지:

실행 결과:

어쩌면 Slack에게 햄스터 이미지가 알려졌습니다.
Reference
이 문제에 관하여(RaspberryPI를 사용하여 Amazon Rekognition의 이미지 인식을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/some-nyan/items/cc45bce20abe54fe3f0f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(RaspberryPI를 사용하여 Amazon Rekognition의 이미지 인식을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/some-nyan/items/cc45bce20abe54fe3f0f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)