Інтеграція Google Cloud Vision OCR
Ви отримали 500 сканів контрактів у PDF — ручне введення займе тиждень. Автоматизація через Google Cloud Vision API скорочує це до кількох хвилин. Але без правильного налаштування ви ризикуєте втратити 30% символів або отримати несподівані рахунки. Ми накопичили досвід на десятках проектів з OCR-інтеграції та знаємо, як обійти типові граблі. У цій статті розповімо, як вбудувати Cloud Vision OCR у пайплайн, оптимізувати вартість та уникнути помилок.
Як вибрати режим OCR: TEXT_DETECTION vs DOCUMENT_TEXT_DETECTION?
Cloud Vision API справляється із завданнями, де open-source рішення пасують: розпізнавання на неоднорідному фоні, перевернуті сторінки, документи з таблицями та рукописними позначками. Два режими — TEXT_DETECTION і DOCUMENT_TEXT_DETECTION — покривають 95% сценаріїв. Перший хороший для вивісок і мемів, другий — для договорів і книг. Різниця в якості: на складних документах DOCUMENT_TEXT_DETECTION дає на 20% менше помилок (CER). Фактично, для щільних документів DOCUMENT_TEXT_DETECTION в 1,7 раза точніший за TEXT_DETECTION.
Вибір залежить від типу документа та необхідної точності. TEXT_DETECTION швидший для простих зображень, але не зберігає структуру. DOCUMENT_TEXT_DETECTION аналізує блоки та параграфи, що критично для договорів. Якщо вам потрібно витягти текст із щільного багатосторінкового документа — вибирайте DOCUMENT_TEXT_DETECTION. Для вивісок або коротких текстів — TEXT_DETECTION. У таблиці нижче наведені ключові відмінності.
| Параметр | TEXT_DETECTION | DOCUMENT_TEXT_DETECTION |
|---|---|---|
| Тип документа | Короткі тексти, вивіски | Щільні документи, PDF |
| Збереження структури | Ні (плоский текст) | Так (блоки, параграфи) |
| Помилка CER (документи) | ~5% | ~3% |
| Швидкість (синхронний) | 100-300 ms | 300-600 ms |
| Вартість за сторінку | $0.0015 | $0.0015 |
Як налаштувати інтеграцію: стек і приклад коду?
Базовий стек: Python 3.10+, google-cloud-vision (остання версія). Аутентифікація через сервісний акаунт (JSON-ключ).
Приклад класу для OCR
from google.cloud import vision
from google.oauth2 import service_account
import io
class GoogleVisionOCR:
def __init__(self, credentials_path: str):
credentials = service_account.Credentials.from_service_account_file(
credentials_path
)
self.client = vision.ImageAnnotatorClient(credentials=credentials)
def extract_text(self, image_path: str) -> str:
with io.open(image_path, 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
response = self.client.text_detection(image=image)
if response.error.message:
raise RuntimeError(f'Vision API error: {response.error.message}')
return response.text_annotations[0].description if response.text_annotations else ''
def extract_document(self, image_path: str) -> dict:
"""DOCUMENT_TEXT_DETECTION для структурованих документів"""
with io.open(image_path, 'rb') as f:
content = f.read()
image = vision.Image(content=content)
response = self.client.document_text_detection(image=image)
document = response.full_text_annotation
pages_data = []
for page in document.pages:
page_text = ''
blocks = []
for block in page.blocks:
block_text = ''
for paragraph in block.paragraphs:
para_text = ' '.join(
''.join(s.text for s in word.symbols)
for word in paragraph.words
)
block_text += para_text + '\n'
blocks.append({'text': block_text.strip()})
page_text += block_text
pages_data.append({'text': page_text, 'blocks': blocks})
return {'full_text': document.text, 'pages': pages_data}
Для production додайте ретраї з exponential backoff та моніторинг latency p99. Збільшення квоти через Google Cloud Console дозволяє обробляти до 5000 запитів на хвилину.
Як ефективно обробляти великі обсяги?
При обсязі понад 1000 сторінок на день синхронні запити стають дорогими та повільними. Використовуйте асинхронну батчеву обробку через GCS — це в 2–3 рази дешевше. Наприклад, батчева обробка 10 000 сторінок коштує $80, тоді як синхронні запити — $200.
import base64
from google.cloud import vision_v1
def batch_process_gcs(gcs_uris: list[str],
output_gcs_prefix: str,
credentials_path: str):
"""Асинхронна batch обробка через Google Cloud Storage — дешевше"""
client = vision_v1.ImageAnnotatorClient.from_service_account_file(
credentials_path
)
requests = []
for uri in gcs_uris:
source = vision_v1.ImageSource(gcs_image_uri=uri)
image = vision_v1.Image(source=source)
feature = vision_v1.Feature(type_=vision_v1.Feature.Type.DOCUMENT_TEXT_DETECTION)
requests.append(vision_v1.AnnotateImageRequest(
image=image, features=[feature]
))
# Batch request — обробляє до 2000 зображень асинхронно
gcs_dest = vision_v1.GcsDestination(uri=output_gcs_prefix)
output_config = vision_v1.OutputConfig(
gcs_destination=gcs_dest,
batch_size=100 # файли результатів по 100 сторінок
)
operation = client.async_batch_annotate_images(
requests=requests[:2000],
output_config=output_config
)
return operation
Для розпізнавання PDF використовуйте асинхронний метод:
def process_pdf(pdf_gcs_uri: str, output_gcs_prefix: str, client):
"""OCR PDF-файлів через Cloud Vision"""
feature = vision_v1.Feature(
type_=vision_v1.Feature.Type.DOCUMENT_TEXT_DETECTION
)
gcs_source = vision_v1.GcsSource(uri=pdf_gcs_uri)
input_config = vision_v1.InputConfig(
gcs_source=gcs_source,
mime_type='application/pdf'
)
gcs_dest = vision_v1.GcsDestination(uri=output_gcs_prefix)
output_config = vision_v1.OutputConfig(
gcs_destination=gcs_dest, batch_size=10
)
request = vision_v1.AsyncAnnotateFileRequest(
features=[feature],
input_config=input_config,
output_config=output_config
)
operation = client.async_batch_annotate_files(requests=[request])
return operation
Батчева обробка через GCS знижує вартість до 60% порівняно з синхронними запитами. Крім того, вона зменшує навантаження на ваше застосування та дозволяє обробляти до 2000 сторінок за один запит. Рекомендується для обсягів від 1000 сторінок на день.
Як проходить процес роботи: від аудиту до деплою?
- Аудит даних: оцінка типів документів, обсягів, вимог до точності (цільовий CER).
- Проектування: вибір режимів, проектування пайплайну (черги, ретраї, обробка помилок).
- Реалізація: інтеграція API, написання обгортки для пакетної обробки.
- Тестування: замір метрик на тестовій вибірці, A/B тест двох режимів.
- Деплой: розгортання в production з моніторингом та алертами.
Додатково: на етапі моніторингу виставляються алерти на latency p99 вище 2 секунд та на перевищення квот.
Що входить в роботу?
- Документація архітектури та інтеграції
- Доступ до API з налаштованою аутентифікацією
- Навчання команди роботі з пайплайном
- Технічна підтримка протягом місяця після запуску
Яких типових помилок уникнути при інтеграції?
- Використання TEXT_DETECTION для багатосторінкових PDF — втрачається структура документа.
- Відсутність обробки помилок API (код падає при перевищенні лімітів).
- Ігнорування квот: при більш ніж 2000 запитів на хвилину потрібно збільшити квоту через Google Cloud Console.
- Недостатнє тестування на реальних даних — розпізнавання може впасти через шуми.
Склад робіт та терміни
В інтеграцію входить: налаштування аутентифікації, реалізація обгортки на Python, оптимізація вартості (вибір режимів, батчинг, налаштування квот), документація архітектури, навчання команди та підтримка протягом місяця після запуску.
Терміни оцінюються індивідуально після аналізу обсягів та складності документів. Типові терміни: від 3 днів для базової інтеграції до 2 тижнів для повністю автоматизованого пайплайну з моніторингом. Зв'яжіться з нами, щоб отримати консультацію та оцінку вашого проекту.
Кому довірити інтеграцію?
Ми займаємося OCR-рішеннями понад 5 років, реалізували більше 50 проектів для фінтеху, логістики та держсектору. Сертифіковані інженери Google Cloud готові взяти на себе повний цикл — від аудиту до запуску. Гарантуємо якість: цільовий CER не більше 2% на підготовлених документах. Якщо ви хочете впровадити OCR-пайплайн, зв'яжіться з нами — ми допоможемо з вибором режимів та оптимізацією вартості.







