仅以英文和法文检测文件文字

时间:2019-07-09 20:31:07

标签: go ocr google-vision vision

我正在尝试使用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]
}

0 个答案:

没有答案