/** * @brief Function that sends the multipart message request to the API server. * Shows the image being OCR'd in the left-hand side of the interface */ void MainWindow::recognize(){ QHttpMultiPart* multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType); //set up http part message to send to api that contains image data QHttpPart imagePart; imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/gif")); imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"file\"; filename=\"./Polish_test2.gif\"")); QFile* file = new QFile(fileName); //debugging: make sure file was uploaded if(!file->open(QIODevice::ReadOnly)){ qDebug() << "# Could not upload/open file"; } QByteArray fileContent(file->readAll()); imagePart.setBody(fileContent); //append image data, api key, language, and overlay setting to multipart multipart->append(imagePart); multipart->append(part_parameter("apikey","3653fc62e388957")); multipart->append(part_parameter("language","pol")); multipart->append(part_parameter("isOverlayRequired","false")); //ocr api url QUrl api_url("https://apifree2.ocr.space/parse/image"); //create network request obj that contains the api url QNetworkRequest api_request(api_url); manager = new QNetworkAccessManager; //=(url, multipart encoded message) reply = manager->post(api_request, multipart); QObject::connect(reply, SIGNAL(finished()), this, SLOT(networkData())); //debugging: make sure file was opened; if 0 bytes, it wasn't! qDebug() << file->size() << "bytes"; imagePart.setBodyDevice(file); file->setParent(multipart); networkData(); }
std::string RecognitionProcessor::recognise(Samples& data) { std::map<std::string, std::string> allSamples = m_dp->getAllKV(); jsonextend properties = m_analyser.getSummary(data); std::valarray<jsonextend> networkData(allSamples.size() + 1); }
QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) { WebPage *parentPage = qobject_cast<WebPage *>(parent()); QNetworkReply *reply = 0; QNetworkRequest req = request; req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); req.setRawHeader("Accept-Language", _acceptLanguage); KIO::CacheControl cc = KProtocolManager::cacheControl(); switch (cc) { case KIO::CC_CacheOnly: // Fail request if not in cache. req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysCache); break; case KIO::CC_Refresh: // Always validate cached entry with remote site. req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork); break; case KIO::CC_Reload: // Always fetch from remote site req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork); break; case KIO::CC_Cache: // Use cached entry if available. case KIO::CC_Verify: // Validate cached entry with remote site if expired. default: req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); break; } // WARNING // There are actually 2 exceptions here handled with QNAM // instead of KIO that need fixes upstream before removing. They are: // 1) DeleteOperation // 2) CustomOperation switch(op) { case QNetworkAccessManager::HeadOperation: break; case QNetworkAccessManager::GetOperation: reply = Application::adblockManager()->block(req, parentPage); break; case QNetworkAccessManager::PutOperation: break; case QNetworkAccessManager::PostOperation: break; case QNetworkAccessManager::DeleteOperation: kDebug() << "DELETE OPERATION..."; reply = QNetworkAccessManager::createRequest(op, req, outgoingData); if(!reply) kDebug() << "OOOOOOOOOOOOOOOOOOO DELETE REPLY NULL"; break; case QNetworkAccessManager::CustomOperation: kDebug() << "CUSTOM OPERATION..."; reply = QNetworkAccessManager::createRequest(op, req, outgoingData); if(!reply) kDebug() << "OOOOOOOOOOOOOOOOOOO CUSTOM REPLY NULL"; break; default: kDebug() << "NON EXTANT CASE..."; break; } if(!reply) reply = AccessManager::createRequest(op, req, outgoingData); if(parentPage && parentPage->hasNetworkAnalyzerEnabled()) emit networkData( op, req, reply ); return reply; }