编码文件以发送到Google AutoML

我正在编写golang脚本,以将图像发送到Google AutoML API的预测引擎。</ p> \ n

它使用以下代码接受大多数文件,但是某些.jpeg或.jpeg会返回错误500,说明文件无效。 在大多数情况下,它可以工作,但是我无法弄清例外情况。 它们是完全有效的jpg格式。</ p>

我正在使用EncodeToString编码有效负载。</ p>

除其他外,我尝试将其解码,并将其保存到 PNG,似乎没有任何作用。 它不喜欢某些图像。</ p>

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

PS,文件已保存到文件系统并可以上传到S3。 </ p>

  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)

//编码为base64。
imgBase64Str:= base64.StdEncoding.EncodeToString(buf.Bytes())

defer imgFile。 Close()

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

//发送为 byte
pay:= bytes.NewBuffer([] byte(payload))
req,err:= http.NewRequest(http.MethodPost,URL.String(),pay)
</ code> </ pre>
</ DIV>

展开原文

原文

I am writing a golang script to send an image to the prediction engine of Google AutoML API.

It accepts most files using the code below, but certain .jpeg or .jpeg it returns error 500 saying invalid file. Mostly it works, but I can't figure out the exceptions. They are perfectly valid jpg's.

I am encoding the payload using EncodeToString.

Among other things, I have tried decoding it, saving it to a PNG, nothing seems to work. It doesn't like some images.

I wonder if I have an error in my method? Any help would be really appreciated. Thanks

PS the file saves to the filesystem and uploads to S3 just fine. It's just the encoding to a string when it goes to Google that it fails.

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)

dqzg62440
dqzg62440 好主意,但可惜没有走。它似乎对两种类型的缓冲区都起作用,但是如果我通过imagemagick放置,API仍然只接受所有图像。也许我现在要把它放到EC2上,只是调整大小,直到他们开始构建正式的API。
大约 2 年之前 回复
drhib62644
drhib62644 一般过程也应起作用。可能是在初始化缓冲区时出错。使用bytes.NewReader([]byte(payload))将有效负载转换为io.reader。
大约 2 年之前 回复
duanjia4817
duanjia4817 这个kludge的工作方式是exec.Command(“convert”,“-resize”,“200%”,filename,resize).Run()但是,使用github.com/nfnt/resize在GO中调整大小不会。真可惜我必须在lambda上使用它,所以我不能执行exec。。。
大约 2 年之前 回复
duaabhuv188411
duaabhuv188411 是的,有效负载json是正确的。并且文档显示了以您使用的相同格式上传json的方法。
大约 2 年之前 回复
dongxing8766
dongxing8766 我还尝试过调整大小,然后发送调整大小的图像。那失败了。但是,可以在命令行上手动调整其大小,然后发送调整大小的版本。我不得不在其中纠缠一些exec.Command
大约 2 年之前 回复
dsqtl335227
dsqtl335227 我试过了,多余的逗号没有意义,但是它在automl的文档中,并且是唯一起作用的方式。...cloud.google.com/vision/automl/docs/…---编辑,实际上可以使用或不使用逗号,但是存在相同的问题
大约 2 年之前 回复
dongqiaochi2711
dongqiaochi2711 净荷json{“payload”:{“image”:{“imageBytes”:“%v”}}}中可能还有一个逗号。删除逗号,然后尝试发布有效负载
大约 2 年之前 回复
dpbdl44228
dpbdl44228 我认为您正在写,这是有效载荷的创建。它只接受JSON格式的base64图像。我只是尝试更改有效负载引号,但仍然存在相同的问题:有效负载:=fmt.Sprintf(“{'payload':{'image':{'imageBytes':'%v'},}}”,imgBase64Str)
大约 2 年之前 回复
dousigan0499
dousigan0499 创建有效负载时可能出了一些问题。可以尝试直接发布图像。
大约 2 年之前 回复
dougan1884
dougan1884 谢谢,我只是将您的脚本放在前端,图像可以完美呈现,就像S3上传一样。但是,尽管如此,当将其在有效载荷中发布到API时,它会死掉,并且我无法在图像中看到失败的模式
大约 2 年之前 回复
dongmu1989
dongmu1989 尝试在浏览器中使用“<html><body><imgsrc=\”data:image/png;base64“+imgBase64Str+”\“/></body></html>”来查看图像。
大约 2 年之前 回复

1个回答



我相信我已解决它。</ p>

我再次查看了Google文档,并发表了演讲 到文本(这是一个不同的API),它说要执行 encode64 -w 0 </ code> </ p>

所以,在Go文档中,看起来 RawStdEncoding </ code>是用于复制此行为的正确方法,而不是 StdEncoding </ code> </ p>

没有图像故障。 希望这一天有帮助。</ p>
</ div>

展开原文

原文

I believe I fixed it.

I looked in the Google docs again and for the speech to text (which is a different API) it says to do encode64 -w 0

So, looking in Go docs, it seems RawStdEncoding is right to use to replicate this behaviour, not StdEncoding

No image failures yet. Hope this helps someone else one day.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐