Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Vision OCR
  • Начало работы
    • Все инструкции
    • Распознавание текста на изображении
    • Распознавание текста из PDF-файла
    • Распознавание рукописного текста
    • Распознавание таблицы
    • Кодирование в Base64
    • Настройка доступа с помощью API-ключа
  • Управление доступом
  • Правила тарификации
  • История изменений
  • Вопросы и ответы

В этой статье:

  • Перед началом работы
  • Распознать текст из PDF-файла с помощью OCR API
  1. Пошаговые инструкции
  2. Распознавание текста из PDF-файла

Распознавание текста из PDF-файла

Статья создана
Yandex Cloud
Улучшена
Fedor M.
Обновлена 10 марта 2025 г.
  • Перед началом работы
  • Распознать текст из PDF-файла с помощью OCR API

Чтобы распознать текст из PDF-файла, вы можете использовать OCR API. OCR API — это обновленный и переработанный интерфейс, который предоставляет больше возможностей, в т.ч. распознавание многоколоночного текста.

Перед началом работы

Чтобы воспользоваться примерами, установите cURL.

Получите данные вашего аккаунта для аутентификации:

Аккаунт на Яндексе или федеративный аккаунт
Сервисный аккаунт
  1. Получите IAM-токен для аккаунта на Яндексе или федеративного аккаунта.

  2. Получите идентификатор каталога, на который у вашего аккаунта есть роль ai.vision.user или выше.

  3. При обращении к Vision OCR через API в каждом запросе передавайте полученные параметры:

    • Для Vision API и Classifier API:

      Указывайте IAM-токен в заголовке Authorization в следующем формате:

      Authorization: Bearer <IAM-токен>
      

      Идентификатор каталога указывайте в теле запроса в параметре folderId.

    • Для OCR API:

      • в заголовке Authorization указывайте IAM-токен;
      • в заголовке x-folder-id указывайте идентификатор каталога.
      Authorization: Bearer <IAM-токен>
      x-folder-id <идентификатор_каталога>
      

Vision OCR поддерживает два способа аутентификации с сервисным аккаунтом:

  • С помощью IAM-токена:

    1. Получите IAM-токен.

    2. Полученный IAM-токен передавайте в заголовке Authorization в следующем формате:

      Authorization: Bearer <IAM-токен>
      
  • С помощью API-ключей.

    Используйте API-ключи, если у вас нет возможности автоматически запрашивать IAM-токен.

    1. Получите API-ключ.

    2. Полученный API-ключ передавайте в заголовке Authorization в следующем формате:

      Authorization: Api-Key <API-ключ>
      

Не указывайте в запросах идентификатор каталога — сервис использует каталог, в котором был создан сервисный аккаунт.

Распознать текст из PDF-файла с помощью OCR API

Распознавание текста из PDF-файла реализовано в методах OCR API TextRecognition.recognize для одностраничных PDF-файлов и TextRecognitionAsync.recognize — для многостраничных.

  1. Подготовьте PDF-файл для распознавания. Размер файла не должен превышать 10 МБ, в одном файле должно быть не более 200 страниц.

  2. Кодируйте PDF-файл в формат Base64.

    UNIX
    Windows
    PowerShell
    Python
    Node.js
    Java
    Go
    base64 -i input.pdf > output.txt
    
    C:> Base64.exe -e input.pdf > output.txt
    
    [Convert]::ToBase64String([IO.File]::ReadAllBytes("./input.pdf")) > output.txt
    
    # Импортируйте библиотеку для кодирования в Base64
    import base64
    
    # Создайте функцию, которая кодирует файл и возвращает результат.
    def encode_file(file):
      file_content = file.read()
      return base64.b64encode(file_content)
    
    // Считайте содержимое файла в память.
    var fs = require('fs');
    var file = fs.readFileSync('/path/to/file');
    
    // Получите содержимое файла в формате Base64.
    var encoded = Buffer.from(file).toString('base64');
    
    // Импортируйте библиотеку для кодирования в Base64.
    import org.apache.commons.codec.binary.Base64;
    
    // Получите содержимое файла в формате Base64.
    byte[] fileData = Base64.encodeBase64(yourFile.getBytes());
    
    import (
        "bufio"
        "encoding/base64"
        "io/ioutil"
        "os"
    )
    
    // Откройте файл
    f, _ := os.Open("/path/to/file")
    
    // Прочитайте содержимое файла.
    reader := bufio.NewReader(f)
    content, _ := ioutil.ReadAll(reader)
    
    // Получите содержимое файла в формате Base64.
    base64.StdEncoding.EncodeToString(content)
    
  3. Создайте файл с телом запроса, например body.json.

    body.json:

    {
      "mimeType": "application/pdf",
      "languageCodes": ["*"],
      "model": "page",
      "content": "<PDF-файл_в_кодировке_base64>"
    }
    

    В свойстве content укажите содержимое файла, полученное при переводе PDF-файла в формат Base64.

    Чтобы сервис автоматически определил язык текста, укажите в конфигурации свойство "languageCodes": ["*"].

  4. Отправьте запрос:

    Одностраничный PDF
    Многостраничный PDF

    Отправьте запрос с помощью метода recognize и сохраните ответ в файл, например output.json:

    UNIX
    Python
    export IAM_TOKEN=<IAM-токен>
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer ${IAM_TOKEN}" \
      --header "x-folder-id: <идентификатор_каталога>" \
      --header "x-data-logging-enabled: true" \
      --data '{
        "mimeType": "JPEG",
        "languageCodes": ["ru","en"],
        "model": "handwritten",
        "content": "<изображение_в_кодировке_base64>"
      }' \
      https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText \
      --output output.json
    

    Где:

    • <IAM-токен> — полученный ранее IAM-токен.
    • <идентификатор_каталога> — полученный ранее идентификатор каталога.
    data = {"mimeType": <mime_type>,
            "languageCodes": ["ru","en"],
            "content": content}
    
    url = "https://ocr.api.cloud.yandex.net/ocr/v1/recognizeText"
    
    headers= {"Content-Type": "application/json",
              "Authorization": "Bearer {:s}".format(<IAM-токен>),
              "x-folder-id": "<идентификатор_каталога>",
              "x-data-logging-enabled": "true"}
      
      w = requests.post(url=url, headers=headers, data=json.dumps(data))
    

    Результат будет состоять из распознанных блоков текста, строк и слов с указанием их местоположения на странице PDF-файла.

    Результат
    {
      "result": {
        "text_annotation": {
          "width": "3312",
          "height": "4683",
          "blocks": [
            {
              "bounding_box": {
                "vertices": [
                  {
                    "x": "373",
                    "y": "371"
                  },
                  {
                    "x": "373",
                    "y": "580"
                  },
                  {
                    "x": "1836",
                    "y": "580"
                  },
                  {
                    "x": "1836",
                    "y": "371"
                  }
                ]
              },
              "lines": [
                {
                  "bounding_box": {
                    "vertices": [
                      {
                        "x": "373",
                        "y": "371"
                      },
                      {
                        "x": "373",
                        "y": "430"
                      },
                      {
                        "x": "1836",
                        "y": "430"
                      },
                      {
                        "x": "1836",
                        "y": "371"
                      }
                    ]
                  },
                  "alternatives": [
                    {
                      "text": "Страница №1, строка 1",
                      "words": [
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "373",
                                "y": "358"
                              },
                              {
                                "x": "373",
                                "y": "444"
                              },
                              {
                                "x": "967",
                                "y": "444"
                              },
                              {
                                "x": "967",
                                "y": "358"
                              }
                            ]
                          },
                          "text": "Страница",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1014",
                                "y": "358"
                              },
                              {
                                "x": "1014",
                                "y": "444"
                              },
                              {
                                "x": "1278",
                                "y": "444"
                              },
                              {
                                "x": "1278",
                                "y": "358"
                              }
                            ]
                          },
                          "text": "№1,",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1303",
                                "y": "358"
                              },
                              {
                                "x": "1303",
                                "y": "444"
                              },
                              {
                                "x": "1718",
                                "y": "444"
                              },
                              {
                                "x": "1718",
                                "y": "358"
                              }
                            ]
                          },
                          "text": "строка",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1765",
                                "y": "358"
                              },
                              {
                                "x": "1765",
                                "y": "444"
                              },
                              {
                                "x": "1836",
                                "y": "444"
                              },
                              {
                                "x": "1836",
                                "y": "358"
                              }
                            ]
                          },
                          "text": "1",
                          "entity_index": "-1"
                        }
                      ]
                    }
                  ]
                },
                {
                  "bounding_box": {
                    "vertices": [
                      {
                        "x": "373",
                        "y": "520"
                      },
                      {
                        "x": "373",
                        "y": "580"
                      },
                      {
                        "x": "1836",
                        "y": "580"
                      },
                      {
                        "x": "1836",
                        "y": "520"
                      }
                    ]
                  },
                  "alternatives": [
                    {
                      "text": "Страница №1, строка 2",
                      "words": [
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "373",
                                "y": "508"
                              },
                              {
                                "x": "373",
                                "y": "594"
                              },
                              {
                                "x": "967",
                                "y": "594"
                              },
                              {
                                "x": "967",
                                "y": "508"
                              }
                            ]
                          },
                          "text": "Страница",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1014",
                                "y": "507"
                              },
                              {
                                "x": "1014",
                                "y": "593"
                              },
                              {
                                "x": "1277",
                                "y": "593"
                              },
                              {
                                "x": "1277",
                                "y": "507"
                              }
                            ]
                          },
                          "text": "№1,",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1302",
                                "y": "507"
                              },
                              {
                                "x": "1302",
                                "y": "593"
                              },
                              {
                                "x": "1718",
                                "y": "593"
                              },
                              {
                                "x": "1718",
                                "y": "507"
                              }
                            ]
                          },
                          "text": "строка",
                          "entity_index": "-1"
                        },
                        {
                          "bounding_box": {
                            "vertices": [
                              {
                                "x": "1765",
                                "y": "507"
                              },
                              {
                                "x": "1765",
                                "y": "593"
                              },
                              {
                                "x": "1836",
                                "y": "593"
                              },
                              {
                                "x": "1836",
                                "y": "507"
                              }
                            ]
                          },
                          "text": "2",
                          "entity_index": "-1"
                        }
                      ]
                    }
                  ]
                }
              ],
              "languages": [
                {
                  "language_code": "ru"
                }
              ]
            }
          ],
          "entities": []
        },
        "page": "0"
      }
    }
    
    • Отправьте запрос с помощью метода recognize:

      export IAM_TOKEN=<IAM-токен>
      curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer ${IAM_TOKEN}" \
        --header "x-folder-id: <идентификатор_каталога>" \
        --header "x-data-logging-enabled: true" \
        --data "@body.json" \
        https://ocr.api.cloud.yandex.net/ocr/v1/recognizeTextAsync
      

      Где:

      • <IAM-токен> — полученный ранее IAM-токен.
      • <идентификатор_каталога> — полученный ранее идентификатор каталога.

      Результат:

      {
        "id": "cfrtr5q0hdhl********",
        "description": "OCR async recognition",
        "created_at": "2023-10-24T09:12:48Z",
        "created_by": "ajeol2afu1js********",
        "modified_at": "2023-10-24T09:12:48Z",
        "done": false,
        "metadata": null
      }
      

      Сохраните идентификатор (id) операции распознавания, полученный в ответе.

    • Отправьте запрос на получение результата распознавания с помощью метода getRecognition:

      export IAM_TOKEN=<IAM-токен>
      curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer ${IAM_TOKEN}" \
        --header "x-folder-id: <идентификатор_каталога>" \
        --header "x-data-logging-enabled: true" \
        https://ocr.api.cloud.yandex.net/ocr/v1/getRecognition?operationId=<идентификатор_операции> \
        --output output.json
      

      Где:

      • <IAM-токен> — полученный ранее IAM-токен.
      • <идентификатор_каталога> — полученный ранее идентификатор каталога.
      • <идентификатор_операции> — полученный ранее идентификатор операции распознавания.

      Результат будет состоять из распознанных блоков текста, строк и слов с указанием их местоположения на странице PDF-файла. Результат распознавания каждой страницы приводится в отдельной секции result.

      Результат
      {
        "result": {
          "text_annotation": {
            "width": "3312",
            "height": "4683",
            "blocks": [
              {
                "bounding_box": {
                  "vertices": [
                    {
                      "x": "373",
                      "y": "371"
                    },
                    {
                      "x": "373",
                      "y": "580"
                    },
                    {
                      "x": "1836",
                      "y": "580"
                    },
                    {
                      "x": "1836",
                      "y": "371"
                    }
                  ]
                },
                "lines": [
                  {
                    "bounding_box": {
                      "vertices": [
                        {
                          "x": "373",
                          "y": "371"
                        },
                        {
                          "x": "373",
                          "y": "430"
                        },
                        {
                          "x": "1836",
                          "y": "430"
                        },
                        {
                          "x": "1836",
                          "y": "371"
                        }
                      ]
                    },
                    "alternatives": [
                      {
                        "text": "Страница №1, строка 1",
                        "words": [
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "373",
                                  "y": "358"
                                },
                                {
                                  "x": "373",
                                  "y": "444"
                                },
                                {
                                  "x": "967",
                                  "y": "444"
                                },
                                {
                                  "x": "967",
                                  "y": "358"
                                }
                              ]
                            },
                            "text": "Страница",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1014",
                                  "y": "358"
                                },
                                {
                                  "x": "1014",
                                  "y": "444"
                                },
                                {
                                  "x": "1278",
                                  "y": "444"
                                },
                                {
                                  "x": "1278",
                                  "y": "358"
                                }
                              ]
                            },
                            "text": "№1,",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1303",
                                  "y": "358"
                                },
                                {
                                  "x": "1303",
                                  "y": "444"
                                },
                                {
                                  "x": "1718",
                                  "y": "444"
                                },
                                {
                                  "x": "1718",
                                  "y": "358"
                                }
                              ]
                            },
                            "text": "строка",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1765",
                                  "y": "358"
                                },
                                {
                                  "x": "1765",
                                  "y": "444"
                                },
                                {
                                  "x": "1836",
                                  "y": "444"
                                },
                                {
                                  "x": "1836",
                                  "y": "358"
                                }
                              ]
                            },
                            "text": "1",
                            "entity_index": "-1"
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "bounding_box": {
                      "vertices": [
                        {
                          "x": "373",
                          "y": "520"
                        },
                        {
                          "x": "373",
                          "y": "580"
                        },
                        {
                          "x": "1836",
                          "y": "580"
                        },
                        {
                          "x": "1836",
                          "y": "520"
                        }
                      ]
                    },
                    "alternatives": [
                      {
                        "text": "Страница №1, строка 2",
                        "words": [
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "373",
                                  "y": "508"
                                },
                                {
                                  "x": "373",
                                  "y": "594"
                                },
                                {
                                  "x": "967",
                                  "y": "594"
                                },
                                {
                                  "x": "967",
                                  "y": "508"
                                }
                              ]
                            },
                            "text": "Страница",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1014",
                                  "y": "507"
                                },
                                {
                                  "x": "1014",
                                  "y": "593"
                                },
                                {
                                  "x": "1277",
                                  "y": "593"
                                },
                                {
                                  "x": "1277",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "№1,",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1302",
                                  "y": "507"
                                },
                                {
                                  "x": "1302",
                                  "y": "593"
                                },
                                {
                                  "x": "1718",
                                  "y": "593"
                                },
                                {
                                  "x": "1718",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "строка",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1765",
                                  "y": "507"
                                },
                                {
                                  "x": "1765",
                                  "y": "593"
                                },
                                {
                                  "x": "1836",
                                  "y": "593"
                                },
                                {
                                  "x": "1836",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "2",
                            "entity_index": "-1"
                          }
                        ]
                      }
                    ]
                  }
                ],
                "languages": [
                  {
                    "language_code": "ru"
                  }
                ]
              }
            ],
            "entities": []
          },
          "page": "0"
        }
      }
      {
        "result": {
          "text_annotation": {
            "width": "3312",
            "height": "4683",
            "blocks": [
              {
                "bounding_box": {
                  "vertices": [
                    {
                      "x": "371",
                      "y": "371"
                    },
                    {
                      "x": "371",
                      "y": "580"
                    },
                    {
                      "x": "1836",
                      "y": "580"
                    },
                    {
                      "x": "1836",
                      "y": "371"
                    }
                  ]
                },
                "lines": [
                  {
                    "bounding_box": {
                      "vertices": [
                        {
                          "x": "371",
                          "y": "371"
                        },
                        {
                          "x": "371",
                          "y": "430"
                        },
                        {
                          "x": "1820",
                          "y": "430"
                        },
                        {
                          "x": "1820",
                          "y": "371"
                        }
                      ]
                    },
                    "alternatives": [
                      {
                        "text": "Страница №2, строка 1",
                        "words": [
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "371",
                                  "y": "357"
                                },
                                {
                                  "x": "371",
                                  "y": "444"
                                },
                                {
                                  "x": "964",
                                  "y": "444"
                                },
                                {
                                  "x": "964",
                                  "y": "357"
                                }
                              ]
                            },
                            "text": "Страница",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "993",
                                  "y": "357"
                                },
                                {
                                  "x": "993",
                                  "y": "444"
                                },
                                {
                                  "x": "1292",
                                  "y": "444"
                                },
                                {
                                  "x": "1292",
                                  "y": "357"
                                }
                              ]
                            },
                            "text": "№2,",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1317",
                                  "y": "357"
                                },
                                {
                                  "x": "1317",
                                  "y": "444"
                                },
                                {
                                  "x": "1701",
                                  "y": "444"
                                },
                                {
                                  "x": "1701",
                                  "y": "357"
                                }
                              ]
                            },
                            "text": "строка",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1748",
                                  "y": "357"
                                },
                                {
                                  "x": "1748",
                                  "y": "444"
                                },
                                {
                                  "x": "1820",
                                  "y": "444"
                                },
                                {
                                  "x": "1820",
                                  "y": "357"
                                }
                              ]
                            },
                            "text": "1",
                            "entity_index": "-1"
                          }
                        ]
                      }
                    ]
                  },
                  {
                    "bounding_box": {
                      "vertices": [
                        {
                          "x": "373",
                          "y": "520"
                        },
                        {
                          "x": "373",
                          "y": "580"
                        },
                        {
                          "x": "1836",
                          "y": "580"
                        },
                        {
                          "x": "1836",
                          "y": "520"
                        }
                      ]
                    },
                    "alternatives": [
                      {
                        "text": "Страница №2, строка 2",
                        "words": [
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "373",
                                  "y": "507"
                                },
                                {
                                  "x": "373",
                                  "y": "594"
                                },
                                {
                                  "x": "967",
                                  "y": "594"
                                },
                                {
                                  "x": "967",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "Страница",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1014",
                                  "y": "507"
                                },
                                {
                                  "x": "1014",
                                  "y": "594"
                                },
                                {
                                  "x": "1277",
                                  "y": "594"
                                },
                                {
                                  "x": "1277",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "№2,",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1302",
                                  "y": "507"
                                },
                                {
                                  "x": "1302",
                                  "y": "594"
                                },
                                {
                                  "x": "1718",
                                  "y": "594"
                                },
                                {
                                  "x": "1718",
                                  "y": "507"
                                }
                              ]
                            },
                            "text": "строка",
                            "entity_index": "-1"
                          },
                          {
                            "bounding_box": {
                              "vertices": [
                                {
                                  "x": "1765",
                                  "y": "506"
                                },
                                {
                                  "x": "1765",
                                  "y": "593"
                                },
                                {
                                  "x": "1836",
                                  "y": "593"
                                },
                                {
                                  "x": "1836",
                                  "y": "506"
                                }
                              ]
                            },
                            "text": "2",
                            "entity_index": "-1"
                          }
                        ]
                      }
                    ]
                  }
                ],
                "languages": [
                  {
                    "language_code": "ru"
                  }
                ]
              }
            ],
            "entities": []
          },
          "page": "1"
        }
      }
      
  5. Чтобы получить распознанные слова из PDF-файла, найдите все значения со свойством text.

Примечание

Если полученные координаты не соответствуют отображаемому положению элементов, настройте в вашем средстве просмотра изображений поддержку метаданных exif, либо при передаче в сервис удаляйте из секции exif изображения атрибут Orientation.

Была ли статья полезна?

Предыдущая
Распознавание текста на изображении
Следующая
Распознавание рукописного текста
Проект Яндекса
© 2025 ООО «Яндекс.Облако»