我正在尝试使用Google视觉在Go中提取图像的文本。我正在使用视觉包和DetectDocumentText
函数。到目前为止,一切都可以在我的机器上运行良好,但是当我在其他服务器上尝试运行时,则无法正常工作。好吧,这是可行的,但是即使我使用相同的图像和所有内容,结果也不相同。换句话说,我没有任何错误,但结果并不总是相同。
例如,我正在尝试提取卡上的姓名和姓氏。
在我的计算机上,我的姓氏为 Arcand ,名字为Дохие4 。
在服务器上,我的姓氏为 Arcand ,而 ????? 4 作为名称。
我不知道为什么我的名字是法文时会以塞尔维亚语或俄语得到结果,我也不知道为什么我只得到对方的问号。这个名字写得很好。
我的问题是,有没有办法告诉视觉API仅分析法语或英语文本?为什么两台计算机上的结果都不一样?
这是我查找文本的功能的样子:
func findLabels(img image.Image, exclude string) string {
// [START init]
ctx := context.Background()
// Create the client.
client, err := vision.NewImageAnnotatorClient(ctx)
if err != nil {
log.Println(err.Error())
return ""
}
defer client.Close()
// [END init]
// [START request]
// Open the file.
buf := &bytes.Buffer{}
err = jpeg.Encode(buf, img, nil)
if err != nil {
log.Println(err.Error())
return ""
}
image, err := vision.NewImageFromReader(buf)
if err != nil {
log.Println(err.Error())
return ""
}
// Perform the request.
annotations, err := client.DetectDocumentText(ctx, image, nil)
if err != nil {
log.Println(err.Error())
return ""
}
// [END request]
// [START transform]
var labels []string
if annotations != nil && len(annotations.Pages) > 0 {
for _, annotation := range annotations.Pages[0].Blocks {
for _, paragraph := range annotation.Paragraphs {
line := ""
for _, word := range paragraph.Words {
for _, s := range word.Symbols {
line += sanitizeText(s.Text)
if s.Property != nil && s.Property.DetectedBreak != nil && s.Property.DetectedBreak.Type == vision2.TextAnnotation_DetectedBreak_SPACE {
line += " "
}
if s.Property != nil && s.Property.DetectedBreak != nil && s.Property.DetectedBreak.Type == vision2.TextAnnotation_DetectedBreak_EOL_SURE_SPACE {
if strings.ToLower(line) != exclude {
labels = append(labels, line)
}
line = ""
}
if s.Property != nil && s.Property.DetectedBreak != nil && s.Property.DetectedBreak.Type == vision2.TextAnnotation_DetectedBreak_LINE_BREAK {
if strings.ToLower(line) != exclude {
labels = append(labels, line)
}
line = ""
}
}
}
}
}
}
return strings.Join(labels, " ")
// [END transform]
}