【问题标题】:AWS Lamda function with Rekognition always return null node.js带有 Rekognition 的 AWS Lambda 函数始终返回 null node.js
【发布时间】:2021-03-28 13:03:17
【问题描述】:

我对 AWS 非常陌生,正在尝试编写一个简单的无服务器应用程序来检测 S3 存储桶中上传图像的文本。图像“2272922.jpg”已上传到 S3 存储桶中。下面的 sn-p 通过节点在本地工作并返回完美的响应

但在从 Lambda 执行(或从 api 网关调用)时总是返回 null。

'use strict'

const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.AWS_REGION })
var rekognition = new AWS.Rekognition();

console.log('Calling lmabda function detect with arguments');

// Lambda function entry point
exports.handler = async (event) => {
  return await processImage(event)
}

//function which will extract the text from S3 bucket image
const processImage = async function (event) {

  try {
    var params = {
      Image: {
        S3Object: {
          Bucket: "s3uploadbucket",
          Name: "2272922.jpg"
        }
      },
    };

    rekognition.detectText(params, function (err, data) {
      console.log(data);
      if (err) console.log(err, err.stack); // an error occurred
      else {
        var table = "<table><tr><th>Low</th><th>High</th></tr>";
        // show each text data detected
        for (var i = 0; i < data.TextDetections.length; i++) {
          table += '<tr><td>' + "Detected: " + data.TextDetections[i].DetectedText + '</td></tr>' +
            '<tr><td>' + "Confidence: " + data.TextDetections[i].Confidence + '</td></tr>' +
            '<tr><td>' + "Id : " + data.TextDetections[i].Id + '</td></tr>'
          '<tr><td>' + "Parent Id: " + data.TextDetections[i].ParentId + '</td></tr>'
          '<tr><td>' + "Type: " + data.TextDetections[i].Type + '</td></tr>'
        }
        table += "</table>";

        console.log(table);

        const response = {
          statusCode: 200,
          body: JSON.stringify(table)
        }
        return response;
      }
    });
  } catch (error) {
    console.log(error);
    return error;
  }
}

我给了以下角色来执行这个 lamda 函数。由于认为问题是由于 lambda 在某处遗漏了 Rekognition 相关策略(因为该函数在本地工作),因此通过控制台编辑了角色并尝试使用所有 Rekognition 相关策略,但没有奏效。

Policies:
      - Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - s3:GetObject
            Resource: arn:aws:s3:::*
          - Effect: Allow
            Action:
              - rekognition:DetectText
              - rekognition:DetectLabels
            Resource: "*"

【问题讨论】:

  • 我认为你在 rekognition.detectText(..... 之前缺少return await
  • 没错@PankajYadav,我错过了await 关键字,而promise() 得到了响应。谢了哥们。我也面临其他问题,我将在下面发布完整的代码。

标签: node.js amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

我在结尾处 rekognition.detectText(params)promise() 之前缺少“等待”关键字。该函数还从 detectText 返回返回文本,而不是我编写的预期表。我修改了下面的代码,它给了我检测到的表格格式的文本

'use strict'

const AWS = require('aws-sdk')
AWS.config.update({ region: process.env.AWS_REGION })
var rekognition = new AWS.Rekognition();

console.log('Calling lmabda function detect with arguments');

// Lambda function entry point
exports.handler = async (event) => {
  return await processImage(event)
}

//function which will extract the text from S3 bucket image
const processImage = async function (event) {

  try {
    var params = {
      Image: {
        S3Object: {
          Bucket: event.BucketName,
          Name: event.Image
        }
      },
    };
    
    let data = await rekognition.detectText(params).promise();
    
    var table = "<table><tr><th>Low</th><th>High</th></tr>";
        // show each text data detected
        for (var i = 0; i < data.TextDetections.length; i++) {
          table += '<tr><td>' + "Detected: " + data.TextDetections[i].DetectedText + '</td></tr>' +
            '<tr><td>' + "Confidence: " + data.TextDetections[i].Confidence + '</td></tr>' +
            '<tr><td>' + "Id : " + data.TextDetections[i].Id + '</td></tr>'
          '<tr><td>' + "Parent Id: " + data.TextDetections[i].ParentId + '</td></tr>'
          '<tr><td>' + "Type: " + data.TextDetections[i].Type + '</td></tr>'
        }
        table += "</table>";
        
        const response = {
          statusCode: 200,
          body: JSON.stringify(table)
        }
        return response;
    
  } catch (error) {
    console.log(error);
    return error;
  }
}

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2018-12-29
    • 2021-08-15
    • 2019-05-05
    • 2019-05-03
    • 2020-10-06
    相关资源
    最近更新 更多