Различия между Google Cloud Vision OCR в демонстрационной версии браузера и через Python

1

Я новичок в API Google Cloud Vision, поэтому извиняюсь, если есть очевидный ответ на этот вопрос. Я замечаю, что для некоторых изображений я получаю разные результаты OCR между Google Cloud Vision API Drag and Drop (https://cloud.google.com/vision/docs/drag-and-drop) и локальным обнаружением изображений в python,

Мой код выглядит следующим образом

import io
# Imports the Google Cloud client library
from google.cloud import vision
from google.cloud.vision import types

# Instantiates a client
client = vision.ImageAnnotatorClient()

# The name of the image file to annotate
file_name = "./test0004a.jpg"

# Loads the image into memory
with io.open(file_name, 'rb') as image_file:
    content = image_file.read()

image = types.Image(content=content)

response = client.text_detection(image=image)
texts = response.text_annotations

print('Texts:')
for text in texts:
#    print('\n"{}"'.format(text.description.encode('utf-8')))
    print('\n"{}"'.format(text.description.encode('ascii','ignore')))

    vertices = (['({},{})'.format(vertex.x, vertex.y)
                for vertex in text.bounding_poly.vertices])

    print('bounds: {}'.format(','.join(vertices)))

Образец, который подчеркивает это, прилагается Пример изображения

Код python выше ничего не возвращает, но в браузере с помощью перетаскивания он правильно идентифицирует "2340" в качестве текста. Не должны ли оба python и браузер возвращать тот же результат?. А если нет, то почему бы и нет?, Нужно ли включать дополнительные параметры в код?.

Теги:
ocr
google-cloud-vision

1 ответ

1
Лучший ответ

Проблема здесь в том, что вы используете TEXT_DETECTION вместо DOCUMENT_TEXT_DETECTION, что является функцией, используемой на странице примера перетаскивания, которую вы поделили.

Изменив метод (на document_text_detection()), вы должны получить желаемые результаты (я проверил его с вашим кодом, и он действительно работал):

# Using TEXT_DETECTION
response = client.text_detection(image=image)

# Using DOCUMENT_TEXT_DETECTION
response = client.document_text_detection(image=image)

Хотя оба метода могут использоваться для OCR, как указано в документации, DOCUMENT_TEXT_DETECTION оптимизирован для плотного текста и документов. Изображение, которое вы поделили, не очень качественное, и текст не ясен, поэтому может оказаться, что для этого типа изображений DOCUMENT_TEXT_DETECTION предлагает лучшую производительность, чем TEXT_DETECTION.

См. Другие примеры, где DOCUMENT_TEXT_DETECTION работает лучше, чем TEXT_DETECTION. В любом случае, обратите внимание, что это может быть не всегда, и TEXT_DETECTION может иметь лучшие результаты при определенных условиях:

  • 0
    Благодарю. Использование DOCUMENT_TEXT_DETECTION теперь сопоставляет ответы перетаскивания, поэтому это соответствует. Тем не менее, я замечаю, что хотя DOCUMENT_TEXT_DETECTION дает больше ответов с данными (т. Е. Меньше случаев без результата), теперь кажется, что некоторые ошибаются (тогда как TEXT_DETECTION получает правильный результат).
  • 0
    Как я объяснил в ответе на ваше сообщение, эти два метода используют разные подходы, поэтому в зависимости от вашего варианта использования и ваших изображений, вы должны использовать один или другой. DOCUMENT_TEXT_DETECTION предназначен для лучшей работы с плотными текстами и документами, но на самом деле нет других индикаторов, которые позволили бы вам выбрать один или другой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню