Я новичок в 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 и браузер возвращать тот же результат?. А если нет, то почему бы и нет?, Нужно ли включать дополнительные параметры в код?.
Проблема здесь в том, что вы используете 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
может иметь лучшие результаты при определенных условиях:
DOCUMENT_TEXT_DETECTION
предназначен для лучшей работы с плотными текстами и документами, но на самом деле нет других индикаторов, которые позволили бы вам выбрать один или другой.