Android 与 AWS SageMaker 与 AWS Lambda 之间的连接

Connection between Android and AWS SageMaker with AWS Lambda

我在 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"}

以及稍后如何查看收到的回复。任何人都知道如何做或我在哪里可以找到如何做的提示?

如果我没理解错的话,你的系统流程是这样的:

  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 并将其传递给新的 activity.

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")