Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(C++) Google Cloud Vision Text DetectionDemonstrates calling the Google Cloud Vision for text detection (performs Optical Character Recognition). "Detects and extracts text within an image with support for a broad range of languages. It also features automatic language identification." See https://cloud.google.com/vision/docs/detecting-text
#include <CkBinData.h> #include <CkJsonObject.h> #include <CkHttp.h> #include <CkStringBuilder.h> #include <CkHttpResponse.h> void ChilkatSample(void) { // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Build the following request: // { // "requests": [ // { // "image": { // "content": "/9j/7QBEUGhvdG9zaG9...base64-encoded-image-content...fXNWzvDEeYxxxzj/Coa6Bax//Z" // }, // "features": [ // { // "type": "TEXT_DETECTION" // } // ] // } // ] // } // Use this online tool to generate the code from sample JSON: // Generate Code to Create JSON // Load an image file. CkBinData imageData; // This image file contains some text... bool success = imageData.LoadFile("qa_data/jpg/text.jpg"); if (success != true) { std::cout << "Failed to load image file." << "\r\n"; return; } // Create the above JSON. CkJsonObject json; json.UpdateBd("requests[0].image.content","base64",imageData); json.UpdateString("requests[0].features[0].type","TEXT_DETECTION"); // Send the following POST with the HTTP request body containing the above JSON. // POST https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY CkHttp http; CkStringBuilder sb; const char *url = "https://vision.googleapis.com/v1/images:annotate?key=YOUR_API_KEY"; CkHttpResponse *resp = http.PostJson3(url,"application/json",json); if (http.get_LastMethodSuccess() != true) { std::cout << http.lastErrorText() << "\r\n"; return; } std::cout << "status = " << resp->get_StatusCode() << "\r\n"; // A 200 response status indicate success. if (resp->get_StatusCode() != 200) { std::cout << resp->bodyStr() << "\r\n"; std::cout << "Failed." << "\r\n"; delete resp; return; } CkStringBuilder sbResponseBody; resp->GetBodySb(sbResponseBody); sbResponseBody.WriteFile("qa_output/textDetectResponse.json","utf-8",false); json.LoadSb(sbResponseBody); // The response is a JSON document like this: // Use this online tool to generate parsing code from sample JSON: // Generate Parsing Code from JSON // { // "responses": [ // { // "textAnnotations": [ // { // "locale": "en", // "description": "Chilkat is a cross-language, cross-platform\nAPl providing 90+ classes for many Internet\nprotocols, formats, and algorithms.\n", // "boundingPoly": { // "vertices": [ // { // "x": 17, // "y": 14 // }, // ... // ] // } // ], // "text": "Chilkat is a cross-language, cross-platform\nAPl providing 90+ classes for many Internet\nprotocols, formats, and algorithms.\n" // } // } // ] // } // The parsing code generated from the online tool: int i; int count_i; const char *fullTextAnnotationText = 0; int j; int count_j; const char *locale = 0; const char *description = 0; int k; int count_k; int x; int y; int width; int height; const char *languageCode = 0; const char *blockType = 0; int i1; int count_i1; CkJsonObject *json1 = 0; int j1; int count_j1; int k1; int count_k1; const char *text = 0; const char *propertyDetectedBreakType = 0; int i2; int count_i2; CkJsonObject *json2 = 0; i = 0; count_i = json.SizeOfArray("responses"); while (i < count_i) { json.put_I(i); fullTextAnnotationText = json.stringOf("responses[i].fullTextAnnotation.text"); j = 0; count_j = json.SizeOfArray("responses[i].textAnnotations"); while (j < count_j) { json.put_J(j); locale = json.stringOf("responses[i].textAnnotations[j].locale"); description = json.stringOf("responses[i].textAnnotations[j].description"); k = 0; count_k = json.SizeOfArray("responses[i].textAnnotations[j].boundingPoly.vertices"); while (k < count_k) { json.put_K(k); x = json.IntOf("responses[i].textAnnotations[j].boundingPoly.vertices[k].x"); y = json.IntOf("responses[i].textAnnotations[j].boundingPoly.vertices[k].y"); k = k + 1; } j = j + 1; } j = 0; count_j = json.SizeOfArray("responses[i].fullTextAnnotation.pages"); while (j < count_j) { json.put_J(j); width = json.IntOf("responses[i].fullTextAnnotation.pages[j].width"); height = json.IntOf("responses[i].fullTextAnnotation.pages[j].height"); k = 0; count_k = json.SizeOfArray("responses[i].fullTextAnnotation.pages[j].property.detectedLanguages"); while (k < count_k) { json.put_K(k); languageCode = json.stringOf("responses[i].fullTextAnnotation.pages[j].property.detectedLanguages[k].languageCode"); k = k + 1; } k = 0; count_k = json.SizeOfArray("responses[i].fullTextAnnotation.pages[j].blocks"); while (k < count_k) { json.put_K(k); blockType = json.stringOf("responses[i].fullTextAnnotation.pages[j].blocks[k].blockType"); json1 = json.ObjectOf("responses[i].fullTextAnnotation.pages[j].blocks[k]"); i1 = 0; count_i1 = json1->SizeOfArray("property.detectedLanguages"); while (i1 < count_i1) { json1->put_I(i1); languageCode = json1->stringOf("property.detectedLanguages[i].languageCode"); i1 = i1 + 1; } delete json1; json1 = json.ObjectOf("responses[i].fullTextAnnotation.pages[j].blocks[k]"); i1 = 0; count_i1 = json1->SizeOfArray("boundingBox.vertices"); while (i1 < count_i1) { json1->put_I(i1); x = json1->IntOf("boundingBox.vertices[i].x"); y = json1->IntOf("boundingBox.vertices[i].y"); i1 = i1 + 1; } delete json1; json1 = json.ObjectOf("responses[i].fullTextAnnotation.pages[j].blocks[k]"); i1 = 0; count_i1 = json1->SizeOfArray("paragraphs"); while (i1 < count_i1) { json1->put_I(i1); j1 = 0; count_j1 = json1->SizeOfArray("paragraphs[i].property.detectedLanguages"); while (j1 < count_j1) { json1->put_J(j1); languageCode = json1->stringOf("paragraphs[i].property.detectedLanguages[j].languageCode"); j1 = j1 + 1; } j1 = 0; count_j1 = json1->SizeOfArray("paragraphs[i].boundingBox.vertices"); while (j1 < count_j1) { json1->put_J(j1); x = json1->IntOf("paragraphs[i].boundingBox.vertices[j].x"); y = json1->IntOf("paragraphs[i].boundingBox.vertices[j].y"); j1 = j1 + 1; } j1 = 0; count_j1 = json1->SizeOfArray("paragraphs[i].words"); while (j1 < count_j1) { json1->put_J(j1); k1 = 0; count_k1 = json1->SizeOfArray("paragraphs[i].words[j].property.detectedLanguages"); while (k1 < count_k1) { json1->put_K(k1); languageCode = json1->stringOf("paragraphs[i].words[j].property.detectedLanguages[k].languageCode"); k1 = k1 + 1; } k1 = 0; count_k1 = json1->SizeOfArray("paragraphs[i].words[j].boundingBox.vertices"); while (k1 < count_k1) { json1->put_K(k1); x = json1->IntOf("paragraphs[i].words[j].boundingBox.vertices[k].x"); y = json1->IntOf("paragraphs[i].words[j].boundingBox.vertices[k].y"); k1 = k1 + 1; } k1 = 0; count_k1 = json1->SizeOfArray("paragraphs[i].words[j].symbols"); while (k1 < count_k1) { json1->put_K(k1); text = json1->stringOf("paragraphs[i].words[j].symbols[k].text"); propertyDetectedBreakType = json1->stringOf("paragraphs[i].words[j].symbols[k].property.detectedBreak.type"); json2 = json1->ObjectOf("paragraphs[i].words[j].symbols[k]"); i2 = 0; count_i2 = json2->SizeOfArray("property.detectedLanguages"); while (i2 < count_i2) { json2->put_I(i2); languageCode = json2->stringOf("property.detectedLanguages[i].languageCode"); i2 = i2 + 1; } delete json2; json2 = json1->ObjectOf("paragraphs[i].words[j].symbols[k]"); i2 = 0; count_i2 = json2->SizeOfArray("boundingBox.vertices"); while (i2 < count_i2) { json2->put_I(i2); x = json2->IntOf("boundingBox.vertices[i].x"); y = json2->IntOf("boundingBox.vertices[i].y"); i2 = i2 + 1; } delete json2; k1 = k1 + 1; } j1 = j1 + 1; } i1 = i1 + 1; } delete json1; k = k + 1; } j = j + 1; } i = i + 1; } delete resp; std::cout << "Success." << "\r\n"; } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.