Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 21.09.2018
Сообщений: 3

Google OCR API из Qt c++

20.03.2019, 15:01. Показов 1185. Ответов 4
Метки qt (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пробую использовать ocr google api из Qt c++ десктоп приложения. Сразу скажу что я в сетевых технологиях почти 0, всегда на с++ писал.
С транслейтом все получилось, работает, а вот с OCR заминка.
Отправляю запрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
QString url = QString("https://vision.googleapis.com/v1/images:annotate?key=%1").arg(API_KEY);
 
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application / json");
 
    QJsonObject mainJsonObject;
    QJsonArray requestsJsonArr, featuresJsonObjectArr;
    QJsonObject imgJsonObject, imgContentJsonObject, featuresJsonObject, featuresContextJsonObject;
 
    imgContentJsonObject.insert("content", qsImgPath);
    imgJsonObject.insert("image", imgContentJsonObject);
    requestsJsonArr.push_back(imgJsonObject);
    
    featuresContextJsonObject.insert("type", "TEXT_DETECTION");
    featuresJsonObjectArr.push_back(featuresContextJsonObject);
    featuresJsonObject.insert("features", featuresJsonObjectArr);
    requestsJsonArr.push_back(featuresJsonObject);
 
    mainJsonObject.insert("requests", requestsJsonArr);
 
    ui->textEdit->setText(QJsonDocument(mainJsonObject).toJson(QJsonDocument::Indented));
 
    pReply = pNetManager->post(request, QJsonDocument(mainJsonObject).toJson());
Добавлено через 7 минут
Не успел дописать(
Содержание Jsonа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
    "requests": [
        {
            "image": {
                "content": "https://ibb.co/g94DTcv"
            }
        },
        {
            "features": [
                {
                    "type": "TEXT_DETECTION"
                }
            ]
        }
    ]
}
В ответ получаю:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "error": {
        "code": 400,
        "details": [
            {
                "@type": "type.googleapis.com/google.rpc.BadRequest",
                "fieldViolations": [
                    {
                        "description": "Invalid value at 'requests[0].image.content' (TYPE_BYTES), Base64 decoding failed for "https://ibb.co/g94DTcv"",
                        "field": "requests[0].image.content"
                    }
                ]
            }
        ],
        "message": "Invalid value at 'requests[0].image.content' (TYPE_BYTES), Base64 decoding failed for "https://ibb.co/g94DTcv"",
        "status": "INVALID_ARGUMENT"
    }
}
код получателя
C++
1
2
3
4
5
6
7
8
9
QJsonDocument jsonDoc = QJsonDocument::fromJson(pReply->readAll());
    if (jsonDoc.isEmpty()) {
        QMessageBox::warning(this, "", "Returned null!");
        return;
    }
    pReply->close();
    delete pReply;
 
   QString::fromStdString(jsonDoc.toJson().toStdString()); // ответ, вышенаписаный Json
Что тут не так?

Добавлено через 3 минуты
Я так понимаю все пути в Json должни быть http(s). Для того чтобы обрабатывать локальный файл его надо куда нибудь закачать? Или можно как QByteArray передать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.03.2019, 15:01
Ответы с готовыми решениями:

Скачивание через Google Api содержимого расшаренной папки Google Disk
Собственно, интересует, как скачать именно через гугл апи без авторизации. Папка доступна на чтение всем, у кого есть ссылка. Метод...

Скачать 5 первых картинок по запросу в Google. Работа с Google Api
Доброго времени суток, интересует такая вещь как из программы, сделать какой то запрос на поиск картинок в гугл, скачать 5 первых из...

Google Play Services Sign In / com.google.android.gms.common.api.ApiException: 10
Пробую запустить простейший семпл для авторизации в Google Play Services, но всё время получаю одну и ту же ошибку Мой код полностью...

4
3 / 3 / 0
Регистрация: 21.09.2018
Сообщений: 3
20.03.2019, 23:02  [ТС]
Если кто пришел сюда по поиску. Отсылать запрос на распознавание надо так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
QFile* file = new QFile("e:/1/OCR/road-sign-1.jpg");
    file->open(QIODevice::ReadOnly);
    QByteArray image = file->readAll();
    int originalSize = image.length();
 
    QString encodedImg = QString(image.toBase64());
    int encodedSize = encodedImg.size();
    
    QString url = QString("https://vision.googleapis.com/v1/images:annotate?key=%1").arg(API_KEY);
 
    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application / json");
 
    QJsonArray requestsJsonArr, featuresJsonObjectArr;
    QJsonObject imgContentJsonObject, featuresContextJsonObject, requestObject;;
 
    imgContentJsonObject.insert("content", encodedImg);
    requestObject.insert("image", imgContentJsonObject);
 
    featuresContextJsonObject.insert("type", "TEXT_DETECTION");
    featuresJsonObjectArr.push_back(featuresContextJsonObject);
    requestObject.insert("features", featuresJsonObjectArr);
    
    requestsJsonArr.push_back(requestObject);
    QJsonObject mainJsonObject;
    mainJsonObject.insert("requests", requestsJsonArr);
 
    pReply = pNetManager->post(request, QJsonDocument(mainJsonObject).toJson());
Работает, проверено.
2
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.03.2019, 23:07
А зачем сервис используешь? Почему не использовать Tesseract-ORC ?
0
3 / 3 / 0
Регистрация: 21.09.2018
Сообщений: 3
21.03.2019, 12:03  [ТС]
Тессеракт очень даже использую. Результат не сравним, в пользу Гугл сервиса конечно.
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.03.2019, 13:42
Ясно, спасибо за информацию и код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.03.2019, 13:42
Помогаю со студенческими работами здесь

Карты Google с использованием API Google AJAX
1. Вопрос по правовому использованию карт Google: В каком случае нужна платная лицензия на использование этого сервиса и кода? 2. Как...

Google+ Api
Привет, форумчане! Пишу небольшой клиент для сети Google+ и после небольшого продвижения столкнулся с проблемой, не могу найти какой post...

Google API
Цель - получить информацию о местах по тексту с помощью API поиска Google Place, а затем получить фотографии этих мест. Я получил ключ...

Google api
Здравствуйте, есть задача, выгрузить все файлы с расширением .doc и .docx из гугл диска и расположить их в файловой системе так же как там,...

Google Docs Api
Здравствуйте. На работе возникла задача - делаю сайт для ипотечного центра - нужен калькулятор для рассчёта процентов, сумм, страховки и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru