이미지가 S3에 저장되면 Amazon Rekognition의 이미지 분석이 자동으로 수행됩니다.

12879 단어 AmazonRekognitionAWS
웹 서비스에서 투고된 이미지를 S3에 저장하는 일도 늘고 있습니다.
저장된 이미지로 이미지 분석을 그대로 실시해 얼굴 분석과 부적합한 이미지인지 판정해 보자.
한편 이 기사는 며칠 전 노트에 기고한'결혼식에서 LINE Bot과 이미지 해석으로 여흥을 남겼어요.의 기술적 보완 기사다.

Amazon Rekognition 정보


Amazon Rekognition은 API를 통해 이미지 분석과 애니메이션 분석을 쉽게 활용할 수 있는 AWS 서비스다.
물체 식별(이미지에 나타난 것이 무엇인지), 얼굴 분석, 안전한지 여부에 대한 이미지 분석, 이동선 검사와 OCR 등을 할 수 있다.

구조


다음 그림은 오른쪽 부분만 소개하는 LINE Bot이 포함된 구성도입니다.

S3 -> Lambda


저장 후 자동으로 처리되는 부분은 AWS의 구조에 맡깁니다.Lambda 이미지를 저장하는 S3에 트리거를 추가합니다.

Lambda에서 Rekogition 호출


Rekognition에서 Python을 호출하는 샘플이 많지만 개인적으로 node를 쓰는 데 익숙해졌습니다.js의 샘플을 소개합니다.
S3에 저장된 객체의 경우 세그먼트와 키만 지정하면 됩니다.또 지정Attributes하면 감정 데이터가 포함된 데이터를 얻을 수 있다(SDK의 참고는여기..
기본적으로 만화를 참조하지만 아래 코드로 호출할 수 있다(node8.10).
const params = {
    Image: {
        S3Object: {
            Bucket: bucket, 
            Name: key
        }
    },
    Attributes: ["ALL"]
};

try {
    // Detect face using rekognition
    const data = await rekognition.detectFaces(params).promise();

    // use data...
}
호출 detectModerationLabels 은 적합하지 않은 그림이 있는지 검사할 수 있습니다.

Webhook으로 결과를 전달할 소스 코드 포함


DynamoDB에 저장하면 그렇게 결과를 저장하면 되지만 상기 보도된 Bot에서는 웹훅에 결과를 알려야 하기 때문에 이 내용을 포함하는 전체 코드를 소개합니다.
const aws = require('aws-sdk');
const rekognition = new aws.Rekognition();
const https = require('https');

exports.handler = async (event, context) => {
    //console.log('Received event:', JSON.stringify(event, null, 2));

    // Get the object from the event
    const bucket = event.Records[0].s3.bucket.name;
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
    const paths = key.split('/');
    const rekognitionParams = {
        Image: {
            S3Object: {
                Bucket: bucket, 
                Name: key
            }
        },
        Attributes: ["ALL"]
    };

    try {
        // Detect face using rekognition
        const data = await rekognition.detectFaces(rekognitionParams).promise();
        var json = JSON.stringify(data);

        // Send result to webhook
        var result = await new Promise((resolve, reject) => {
            var options = {
                hostname: 'example.com',
                path: '/webhook/',
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                    'Content-Length': Buffer.byteLength(json)
                }
            };

            var req = https.request(options, function(res) {
                res.setEncoding('utf8');
                res.on('data', function (body) {
                    console.log(body);
                    resolve('Success');
                });
            }).on('error', function(e) {
                reject(e);
            });

            req.write(json);
            req.end();
        });

        console.log(result);
    } catch (err) {
        console.log(err);
        const message = `Error detecting face ${key} from bucket ${bucket}.`;
        throw new Error(message);
    }
};

특히 S3에 저장된 이미지에 대해 Amazon Rekognition의 호출은 매우 간단합니다.최근의 업데이트 정밀도가 더 높아진 것 같아서 이미지 서비스를 제공하는 사람은 반드시 시도해 보아야 한다.
이 글은 nifty 그룹 Advent Calendar의 첫날 보도입니다.
다음날@motaHack.기대해주세요!

좋은 웹페이지 즐겨찾기