【问题标题】:Connection between Android and AWS SageMaker with AWS Lambda使用 AWS Lambda 连接 Android 和 AWS SageMaker
【发布时间】:2021-04-19 17:02:18
【问题描述】:

我在 Android 和 AWS Lambda 之间建立了一个连接,该连接将端点设置为 SageMaker。我在连接过程中使用的是 REST API,AWS Cognito 插件设置为无需授权即可访问。

我按照此处所述进行连接: https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/

我的问题是如何发送这些数据:

{"data":"13.49,22.3,86.91,561.0,0.08752,0.07697999999999999,0.047510000000000004,0.033839999999999995,0.1809,0.057179999999999995,0.2338,1.3530000000000002,1.735,20.2,0.004455,0.013819999999999999,0.02095,0.01184,0.01641,0.001956,15.15,31.82,99.0,698.8,0.1162,0.1711,0.2282,0.1282,0.2871,0.06917000000000001"}

以及稍后如何查看收到的回复。有谁知道怎么做,或者我在哪里可以找到如何做的提示?

【问题讨论】:

  • 您是否关注了来自亚马逊的在线文档,用于此用例?
  • 是的。我忘了使用docs.amplify.aws/lib/auth/guest_access/q/platform/android。谢谢您的帮助。现在我必须学习如何发送查询并显示从机器学习接收到的数据。但这是一个不同的问题

标签: android amazon-web-services aws-lambda amazon-cognito aws-amplify


【解决方案1】:

如果我理解正确,这是您的系统流程:

  1. POST Android 设备中的一些数据
  2. API 网关接收它
  3. 并继续到 AWS Lambda
  4. 在 AWS Lambda 中,数据被提取并传递给 Sage Maker

使用 AWS Amplify 创建 POST

从 Android 设备到POST 数据,请按照Amplify API (REST) category documentation

具体来说,您可以执行以下操作:

val options = RestOptions.builder()
    .addPath("/prod/predictbreastcancer")
    .addBody("{\"data\":\"13.49,22.3,86.91,561.0,0.08752,0.07697999999999999,0.047510000000000004,0.033839999999999995,0.1809,0.057179999999999995,0.2338,1.3530000000000002,1.735,20.2,0.004455,0.013819999999999999,0.02095,0.01184,0.01641,0.001956,15.15,31.82,99.0,698.8,0.1162,0.1711,0.2282,0.1282,0.2871,0.06917000000000001\"}".toByteArray())
    .build()

Amplify.API.post(options,
    { Log.i("Demo", "POST response = $it") },
    { Log.e("Demo", "POST failed", it) }
)

从 EditText 内容创建 POST 正文

您提到您正在使用EditText 小部件来收集输入数据。我假设用户可以输入以逗号分隔的值列表,例如 0.44, 6.11 等。

要提取其内容并构建 POST 正文,您可以:

val input = findViewById(R.id.input) as EditText
val body = JSONObject()
    .put("data", input.text)
    .toString()
    .replaceAll("\"", "\\\"")

在另一个 Activity 中显示响应

浏览您引用的博客,我看不到响应正文内容的示例。但是,您可以通过以下方式检索响应 JSON 并将其传递给新活动。

Amplify.API.post(options,
    { response ->
        val intent = Intent(this, YourOtherActivity::class.java)
        intent.putExtra("json", response.data.asString())
        runOnUiThread { startActivity(intent) }
    },
    { /* handle error ... */ }
)

YourOtherActivity 中,访问onCreate() 中的额外数据,如下所示:

val json = intent.getStringExtra("json")

【讨论】:

  • 这是我所知道的。但是,我不知道如何将输入(EditText)中输入的数据打包到 .addBody 中,以及如何在屏幕上显示收到的响应,而是在一个新的活动中。
  • 已更新以回答您的其他问题。
  • 谢谢。我已经在实施您的答案。我在 logcat 中得到的响应以 UTF-8 编码: I/MyAmplifyApp: POST succeeded: RestResponse{data=Data{rawBytes=[34, 66, 34]}, code=Code{statusCode=200}}
猜你喜欢
  • 2021-01-18
  • 2022-11-10
  • 2018-11-27
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多