1

我正在编写一个 golang 脚本来将图像发送到 Google AutoML API 的预测引擎。

它使用下面的代码接受大多数文件,但某些 .jpeg 或 .jpeg 会返回错误 500,说明文件无效。大多数情况下它都有效,但我无法找出例外情况。它们是完全有效的 jpg。

我正在使用 EncodeToString 对有效负载进行编码。

除其他外,我尝试对其进行解码,将其保存为 PNG,但似乎没有任何效果。它不喜欢某些图像。

我想知道我的方法是否有错误?任何帮助将非常感激。谢谢

PS文件保存到文件系统并上传到S3就好了。当它转到谷歌时,它只是对字符串的编码失败。

imgFile, err := os.Open(filename)
if err != nil {
    fmt.Println(err)
}

img, fname, err := image.Decode(imgFile)
if err != nil {
    fmt.Println(fname)
}

buf := new(bytes.Buffer)
err = jpeg.Encode(buf, img, nil)

// Encode as base64.
imgBase64Str := base64.StdEncoding.EncodeToString(buf.Bytes())

defer imgFile.Close()

payload := fmt.Sprintf(`{"payload": {"image": {"imageBytes": "%v"},}}`, imgBase64Str)

// send as a byte
pay := bytes.NewBuffer([]byte(payload))
req, err := http.NewRequest(http.MethodPost, URL.String(), pay)
4

1 回答 1

1

我相信我修好了。

我再次查看了 Google 文档,并查看了它说要执行的语音到文本(这是一个不同的 API)encode64 -w 0

因此,查看 Go 文档,似乎RawStdEncoding可以用来复制这种行为,而不是StdEncoding

还没有图像故障。希望有一天这对其他人有所帮助。

于 2018-08-01T13:23:46.513 回答