https://sssbin.tistory.com/188
1. camera.js
// aws iot core
var awsIot = require('aws-iot-device-sdk');
// file system
var fs = require('fs');
// aws
var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-2';
AWS.config.apiVersions = {
"s3" : '2006-03-01'
};
// 디바이스 설정
var camera = awsIot.device({
keyPath: './credentials/camera/private.pem.key',
certPath: './credentials/camera/certificate.pem.crt',
caPath: './credentials/camera/AmazonRootCA1.pem',
clientId : 'camera',
host: '엔드포인트'
});
var keys = require("./credentials/access-keys.js");
// s3 설정
var s3 = new AWS.S3({
"accessKeyId" : keys.access_key,
"secretAccessKey" : keys.secret_key
});
// s3에 사진 업로드할 파라미터
var params = {
Bucket : '버킷이름',
Key : '버킷에 업로드할 사진 이름', // S3 object
Body: fs.createReadStream("내 컴퓨터에서 업로드할 사진 경로명")
}
// s3에 사진 업로드
function createObject(params) {
return new Promise(function (resolve, reject) {
s3.upload(params, function (err, data) {
if (err) reject(err);
else resolve(data);
})
});
}
// createObject()의 결과를 출력
async function createDeploymentPackage (params) {
try {
var res = await createObject(params);
console.log(res);
} catch (err) { console.log(err); }
}
// create S3 object
createDeploymentPackage(params);
// carRecog/request 로 publish
camera.on('connect', function() {
console.log('Camera connected');
var message = {'detect' : 'carRecog/detect/car', 'image' : 'newcar'};
camera.publish('carRecog/request', JSON.stringify(message));
console.log('publish to carRecog/request -> '+JSON.stringify(message));
});
엔드포인트는 AWS IoT > 설정 에 있다.
S3 버킷에 사진을 업로드하고
carRecog/request 토픽에 message를 publish
2. index.js (람다코드)
var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({
endpoint: '엔드포인트',
});
var client = new AWS.Rekognition();
var bucket = '버킷 이름';
exports.handler = async function (event) {
var photo_target = event.image + '.jpg';
const params = {
Image: {
S3Object: {
Bucket: bucket,
Name: photo_target
},
},
};
var detectedText;
await client.detectText(params, function(err, response) { // rekognition
if (err) {
console.log(err, err.stack); // handle error if an error occurred
} else {
console.log(`Detected Text for: ${photo_target}`)
console.log(response)
response.TextDetections.forEach(label => {
console.log(`Detected Text: ${label.DetectedText}`),
console.log(`Type: ${label.Type}`),
console.log(`ID: ${label.Id}`),
console.log(`Parent ID: ${label.ParentId}`),
console.log(`Confidence: ${label.Confidence}`),
console.log(`Polygon: `)
console.log(label.Geometry.Polygon)
if (label.Id == 0) detectedText = label.DetectedText.replace(/ /g, "");
// 인식한 전체 텍스트 -> 공백 제거 후 저장
})
}
}).promise();
var params_topic = {
topic: event.detect,
payload: JSON.stringify({ 'image': event.image, 'command': detectedText}),
qos: 1 // 0: 한번 전송, 1: 받을 때까지 전송, 2: 받을 때까지 기다림
};
var res = await iotdata.publish(params_topic).promise(); // detect topic 으로 publish
return { 'statusCode': 200, 'result': res };
}
앞서 설정했던 트리거를 통해 carRecog/request의 메시지를 받아온다.
rekognition api 호출해서 메시지로 받아온 image의 text detection 수행 후
detect 토픽으로 결과값을 publish 한다.
3. manage.js
// aws iot core
var awsIot = require('aws-iot-device-sdk');
// aws IoT Core로부터 받아와야 하는 정보
var manage = awsIot.device({
keyPath: './credentials/manage/private.pem.key',
certPath: './credentials/manage/certificate.pem.crt',
caPath: './credentials/manage/AmazonRootCA1.pem',
clientId : 'manage',
host: '엔드포인트'
});
// connect
manage.on('connect', () => {
console.log('Manage connected');
// subscribe
manage.subscribe('carRecog/detect/car');
console.log(topic + " sub!!");
});
// message arrive
manage.on('message', (topic, message) => {
console.log(topic + "-> message arrive");
if (topic == 'carRecog/detect/car') {
var msg = JSON.parse(message.toString());
console.log(msg.command);
}
});
carRecog/detect/car 토픽을 subscribe 하고 있다가
메시지가 들어오면 결과값 출력
테스트
메시지가 잘 전달되고 들어오는지 보기 위해
setInterval 3초로 주고 테스트했다
테스트한 사진은 이건데 rekognition이 한글은 지원하지 않아서 숫자만 보내졌다,,
토픽에 메시지가 잘 들어오는지 보고 싶다면
AWS IoT > MQTT 테스트 클라이언트
에서 주제 구독해서 메시지 들어오는지 보면 된다!
'프로젝트 > cloudIOT' 카테고리의 다른 글
AWS 기반 주차 관리 시스템 (2) Lambda 설정 (0) | 2022.06.16 |
---|---|
AWS 기반 주차 관리 시스템 (1) AWS IoT Core (0) | 2022.06.16 |
AWS EC2 - MQTT 이용하기 (0) | 2022.05.17 |
Amazon Rekognition 이미지에서 텍스트 감지 (nodejs) (0) | 2022.05.16 |
라즈베리파이 OS 설치 & 노트북 원격 접속 (0) | 2022.04.04 |