前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在SAP Kyma的Lambda Function里调用SAP Leonardo service

在SAP Kyma的Lambda Function里调用SAP Leonardo service

作者头像
Jerry Wang
发布2020-02-14 14:01:26
3110
发布2020-02-14 14:01:26
举报
代码语言:javascript
复制
module.exports = { main: async function (event, context) {
    const request = require('request-promise-native');

    if (!event.image && !event.extensions && !event.extensions.request && !event.extensions.request.query && !event.extensions.request.query.image) {
        return "Parameter missing:\nimage: image url (mandatory)\n";
    }
    const query = event.extensions.request.query;
    const image = query.image;

    //-------- Leonardo MLF Find Similarity ------------
    const lmlf_auth = Buffer.from(process.env.LMLF_CLIENT_ID + ':' + process.env.LMLF_CLIENT_SECRET).toString('base64');
    
    const tokenResp = await request({
        method: 'GET',
        headers: {
            'Authorization': `Basic ${lmlf_auth}`,
            json: true
        },
        url: `${process.env.LMLF_URL}/oauth/token?grant_type=client_credentials`,
        json: true
    });
    const apiKey = tokenResp.access_token;
    var imageFeatureExtractionData = {};

    imageFeatureExtractionData = await request({
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + apiKey
        },
        formData: {
            files: {
                value: await request.get(image, { encoding: null }),
                options: {
                    filename: 'label.jpg',
                    contentType: 'image/jepg'
                }
            }
        },
        url: `${process.env.LMLF_IMAGE_FEATURE_EXTRACTION_URL}`,
        json: true
    });

    const similarScoring = { "0": [] };
    similarScoring["0"].push({"id": "examinee", "vector": imageFeatureExtractionData.predictions[0].featureVectors});
    var referenceLabel = JSON.parse(process.env.REFERENCE_1);
    const referenceLabels = [];
    referenceLabels.push(referenceLabel);
    similarScoring["0"].push({"id": 0, "vector": referenceLabel.featureVectors});
    referenceLabel = JSON.parse(process.env.REFERENCE_2);
    referenceLabels.push(referenceLabel);
    similarScoring["0"].push({"id": 1, "vector": referenceLabel.featureVectors});
    referenceLabel = JSON.parse(process.env.REFERENCE_3);
    referenceLabels.push(referenceLabel);
    similarScoring["0"].push({"id": 2, "vector": referenceLabel.featureVectors});
    referenceLabel = JSON.parse(process.env.REFERENCE_4);
    referenceLabels.push(referenceLabel);
    similarScoring["0"].push({"id": 3, "vector": referenceLabel.featureVectors});
    referenceLabel = JSON.parse(process.env.REFERENCE_5);
    referenceLabels.push(referenceLabel);
    similarScoring["0"].push({"id": 4, "vector": referenceLabel.featureVectors});

    const imageSimilarityScoringData = await request({
        method: 'POST',
        headers: {
            'Authorization': 'Bearer ' + apiKey
        },
        formData: {
            texts: JSON.stringify(similarScoring),
            options: '{"numSimilarVectors":1}'
        },
        url: `${process.env.LMLF_SIMILARITY_SCORING_URL}`,
        json: true
    });
    
    var similarityResult = imageSimilarityScoringData.predictions[0].similarVectors[0];
    var similar = referenceLabels[similarityResult.id];
    similarityResponse = {
        name: similar.name,
        image: similar.image,
        detail: similar.detail,
        score: similarityResult.score
    };
    
    //--------- Helper Functions GOOGLE VISION Scan Text --------------
    const regexDetectLeviTrade = /(501|502|504|505|510|511|512|513|514|517|519|527|541|550|559|560|569|705)/;
    const regexSize = /(W *\d{2,} *(I|L|1|\|) *\d{2,})|(\d{2,} *(I|L|1|\|) *\d{2,}^)|(W *\d{2,} *\d{2,})/;
    const regexSizeNumber = /[2-6]{1}\d{1}/g;
    
    const outScanGoogle = function(text) {
        var resp = {
            id: "Done!",
            type: {number: "", name: "Google Scan"},
            size: {W:0, L:0}
        };
        var regex;
        regex = regexDetectLeviTrade.exec(text);
        if (regex) {
            resp.type.number = regex[0];
        }
        regex = regexSize.exec(text);
        if (regex) {
            var textSize = regex[0];
            var isW = true;
            do {
                regex = regexSizeNumber.exec(textSize);
                if (regex) {
                    if (isW){
                        resp.size.W = parseInt(regex[0]);
                        isW = false;
                    } else {
                        resp.size.L = parseInt(regex[0]);
                    }
                }
            } while(regex);
        }
        return resp;
    };

    //--------- GOOGLE VISION Scan Text --------------
    const vision = require('@google-cloud/vision');
    const client = new vision.ImageAnnotatorClient({credentials:{
        client_email: process.env.GOOGLE_APPLICATION_CREDENTIALS_EMAIL,
        private_key: process.env.GOOGLE_APPLICATION_CREDENTIALS_KEY.replace(/\\n/g, '\n')
        
    }});
    
    const [googleResult] = await client.documentTextDetection(`${image}`);
    const fullTextAnnotation = googleResult.fullTextAnnotation;
    var text = fullTextAnnotation ? fullTextAnnotation.text : "";
    var response = outScanGoogle(text);
    response.similarity = similarityResponse;

    return {
        response
    }
}}

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档