Я пытаюсь извлечь текст изображения в 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]
}