Обнаружение текста документа только на английском и французском - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь извлечь текст изображения в Go, используя Google Vision. Я использую пакет видения и функцию DetectDocumentText. Пока все отлично работает на моей машине, но когда я пробую это на другом сервере, это не работает. Ну, это отчасти работает, но результаты не одинаковы, даже когда я использую одно и то же изображение и все такое. Другими словами, у меня нет ошибок, но результат не всегда одинаков.

Например, я пытаюсь извлечь имя и фамилию на карточке.

На моей машине я получаю Arcand для фамилии и Дохие 4 для имени.

На сервере я получаю Arcand для фамилии и ????? 4 для имени.

Я не знаю, почему я получаю результат на сербском или русском языке, когда имя на французском, и я не знаю, почему я получаю только вопросительные знаки с другим. Имя довольно хорошо написано.

У меня вопрос, есть ли способ сказать api vision, чтобы анализировать текст только на французском или английском? И почему результаты не одинаковы на обеих машинах?

Вот как выглядит моя функция для поиска текстов:

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]
}
...