|
(DataFlex) Amazon Rekognition - Detect Text in an Image
Detects text in the input image and converts it into machine-readable text. This example passes theimage as base64-encoded image bytes.For more information, see https://docs.aws.amazon.com/rekognition/latest/dg/API_DetectText.html
Use ChilkatAx-win32.pkg
Procedure Test
Handle hoRest
Boolean iSuccess
Variant vAuthAws
Handle hoAuthAws
Boolean iBTls
Integer iPort
Boolean iBAutoReconnect
Handle hoBdJpg
Variant vSbJpg
Handle hoSbJpg
Handle hoJson
Variant vSbRequestBody
Handle hoSbRequestBody
Variant vSbResponseBody
Handle hoSbResponseBody
Integer iRespStatusCode
Handle hoJResp
String sConfidence
String sDetectedText
String sGeometryBoundingBoxHeight
String sGeometryBoundingBoxLeft
String sGeometryBoundingBoxTop
String sGeometryBoundingBoxWidth
Integer iId
String sV_Type
Integer iParentId
Integer j
Integer iCount_j
String X
String Y
String sTextModelVersion
Integer i
Integer iCount_i
String sTemp1
Integer iTemp1
Get Create (RefClass(cComChilkatRest)) To hoRest
If (Not(IsComObjectCreated(hoRest))) Begin
Send CreateComObject of hoRest
End
Get Create (RefClass(cComChilkatAuthAws)) To hoAuthAws
If (Not(IsComObjectCreated(hoAuthAws))) Begin
Send CreateComObject of hoAuthAws
End
Set ComAccessKey Of hoAuthAws To "AWS_ACCESS_KEY"
Set ComSecretKey Of hoAuthAws To "AWS_SECRET_KEY"
// Don't forget to change the region to your particular region. (Also make the same change in the call to Connect below.)
Set ComRegion Of hoAuthAws To "us-west-2"
Set ComServiceName Of hoAuthAws To "rekognition"
// SetAuthAws causes Chilkat to automatically add the following headers: Authorization, X-Amz-Date
Get pvComObject of hoAuthAws to vAuthAws
Get ComSetAuthAws Of hoRest vAuthAws To iSuccess
// URL: https://rekognition.us-west-2.amazonaws.com/
Move True To iBTls
Move 443 To iPort
Move True To iBAutoReconnect
// Don't forget to change the region domain (us-west-2.amazonaws.com) to your particular region.
Get ComConnect Of hoRest "rekognition.us-west-2.amazonaws.com" iPort iBTls iBAutoReconnect To iSuccess
If (iSuccess <> True) Begin
Get ComConnectFailReason Of hoRest To iTemp1
Showln "ConnectFailReason: " iTemp1
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
// Note: The above code does not need to be repeatedly called for each REST request.
// The rest object can be setup once, and then many requests can be sent. Chilkat will automatically
// reconnect within a FullRequest* method as needed. It is only the very first connection that is explicitly
// made via the Connect method.
// Load the JPG to be passed as base64 in the JSON.
Get Create (RefClass(cComChilkatBinData)) To hoBdJpg
If (Not(IsComObjectCreated(hoBdJpg))) Begin
Send CreateComObject of hoBdJpg
End
Get ComLoadFile Of hoBdJpg "qa_data/jpg/monday_keep_smiling.jpg" To iSuccess
If (iSuccess <> True) Begin
Showln "Failed to load the input JPG file."
Procedure_Return
End
// We wish to send the following JSON in the body of our HTTP request:
// {
// "Image": {
// "Bytes": "base64_image_bytes"
// }
// }
// Here is the image we used for testing:
// Convert binary image bytes to base64.
// Note: We are explicitly keeping the data inside Chilkat to avoid having to pass large strings
// as arguments to function calls. This is important for some programming languages.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJpg
If (Not(IsComObjectCreated(hoSbJpg))) Begin
Send CreateComObject of hoSbJpg
End
Get pvComObject of hoSbJpg to vSbJpg
Get ComGetEncodedSb Of hoBdJpg "base64" vSbJpg To iSuccess
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get pvComObject of hoSbJpg to vSbJpg
Get ComUpdateSb Of hoJson "Image.Bytes" vSbJpg To iSuccess
Get ComAddHeader Of hoRest "Content-Type" "application/x-amz-json-1.1" To iSuccess
Get ComAddHeader Of hoRest "X-Amz-Target" "RekognitionService.DetectText" To iSuccess
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbRequestBody
If (Not(IsComObjectCreated(hoSbRequestBody))) Begin
Send CreateComObject of hoSbRequestBody
End
Get pvComObject of hoSbRequestBody to vSbRequestBody
Get ComEmitSb Of hoJson vSbRequestBody To iSuccess
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponseBody
If (Not(IsComObjectCreated(hoSbResponseBody))) Begin
Send CreateComObject of hoSbResponseBody
End
Get pvComObject of hoSbRequestBody to vSbRequestBody
Get pvComObject of hoSbResponseBody to vSbResponseBody
Get ComFullRequestSb Of hoRest "POST" "/" vSbRequestBody vSbResponseBody To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoRest To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComResponseStatusCode Of hoRest To iRespStatusCode
Showln "response status code = " iRespStatusCode
If (iRespStatusCode >= 400) Begin
Showln "Response Status Code = " iRespStatusCode
Showln "Response Header:"
Get ComResponseHeader Of hoRest To sTemp1
Showln sTemp1
Showln "Response Body:"
Get ComGetAsString Of hoSbResponseBody To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatJsonObject)) To hoJResp
If (Not(IsComObjectCreated(hoJResp))) Begin
Send CreateComObject of hoJResp
End
Get pvComObject of hoSbResponseBody to vSbResponseBody
Get ComLoadSb Of hoJResp vSbResponseBody To iSuccess
Set ComEmitCompact Of hoJResp To False
Get ComEmit Of hoJResp To sTemp1
Showln sTemp1
// Sample JSON response:
// (Sample code for parsing the JSON response is shown below)
// {
// "TextDetections": [
// {
// "Confidence": 95.99308776855469,
// "DetectedText": "( MONDAY IT'S",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.6399821043014526,
// "Left": 0.219133198261261,
// "Top": 0.08677978068590164,
// "Width": 0.7433173656463623
// },
// "Polygon": [
// {
// "X": 0.219133198261261,
// "Y": 0.3588336706161499
// },
// {
// "X": 0.8984103798866272,
// "Y": 0.08677978068590164
// },
// {
// "X": 0.9624505639076233,
// "Y": 0.4547080099582672
// },
// {
// "X": 0.2831733524799347,
// "Y": 0.7267619371414185
// }
// ]
// },
// "Id": 0,
// "Type": "LINE"
// },
// {
// "Confidence": 99.70352172851562,
// "DetectedText": "but keep",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.09703556448221207,
// "Left": 0.6335319876670837,
// "Top": 0.5153074264526367,
// "Width": 0.21070890128612518
// },
// "Polygon": [
// {
// "X": 0.6355597376823425,
// "Y": 0.5153074264526367
// },
// {
// "X": 0.8442409038543701,
// "Y": 0.5266726613044739
// },
// {
// "X": 0.8422132134437561,
// "Y": 0.6123430132865906
// },
// {
// "X": 0.6335319876670837,
// "Y": 0.6009777784347534
// }
// ]
// },
// "Id": 1,
// "Type": "LINE"
// },
// {
// "Confidence": 99.92333984375,
// "DetectedText": "Smiling",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.31578224897384644,
// "Left": 0.5070608258247375,
// "Top": 0.6086956262588501,
// "Width": 0.4795433282852173
// },
// "Polygon": [
// {
// "X": 0.5070608258247375,
// "Y": 0.6298336386680603
// },
// {
// "X": 0.9808917045593262,
// "Y": 0.6086956262588501
// },
// {
// "X": 0.9866041541099548,
// "Y": 0.9033399224281311
// },
// {
// "X": 0.5127732157707214,
// "Y": 0.9244779348373413
// }
// ]
// },
// "Id": 2,
// "Type": "LINE"
// },
// {
// "Confidence": 99.77294158935547,
// "DetectedText": "IT'S",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.09903381764888763,
// "Left": 0.668789803981781,
// "Top": 0.17874395847320557,
// "Width": 0.1449044644832611
// },
// "Polygon": [
// {
// "X": 0.668789803981781,
// "Y": 0.17874395847320557
// },
// {
// "X": 0.8136942386627197,
// "Y": 0.17874395847320557
// },
// {
// "X": 0.8136942386627197,
// "Y": 0.2777777910232544
// },
// {
// "X": 0.668789803981781,
// "Y": 0.2777777910232544
// }
// ]
// },
// "Id": 5,
// "ParentId": 0,
// "Type": "WORD"
// },
// {
// "Confidence": 98.44307708740234,
// "DetectedText": "MONDAY",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.11112251877784729,
// "Left": 0.5541401505470276,
// "Top": 0.3526569902896881,
// "Width": 0.39013487100601196
// },
// "Polygon": [
// {
// "X": 0.5541401505470276,
// "Y": 0.3526569902896881
// },
// {
// "X": 0.9442675113677979,
// "Y": 0.3502415418624878
// },
// {
// "X": 0.9458598494529724,
// "Y": 0.4613526463508606
// },
// {
// "X": 0.5541401505470276,
// "Y": 0.4637681245803833
// }
// ]
// },
// "Id": 4,
// "ParentId": 0,
// "Type": "WORD"
// },
// {
// "Confidence": 99.61898803710938,
// "DetectedText": "but",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.06521739065647125,
// "Left": 0.6353503465652466,
// "Top": 0.5241546034812927,
// "Width": 0.0843949019908905
// },
// "Polygon": [
// {
// "X": 0.6353503465652466,
// "Y": 0.5241546034812927
// },
// {
// "X": 0.7197452187538147,
// "Y": 0.5241546034812927
// },
// {
// "X": 0.7197452187538147,
// "Y": 0.5893719792366028
// },
// {
// "X": 0.6353503465652466,
// "Y": 0.5893719792366028
// }
// ]
// },
// "Id": 6,
// "ParentId": 1,
// "Type": "WORD"
// },
// {
// "Confidence": 99.78804779052734,
// "DetectedText": "keep",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.07971014827489853,
// "Left": 0.7308917045593262,
// "Top": 0.5265700221061707,
// "Width": 0.1114649698138237
// },
// "Polygon": [
// {
// "X": 0.7308917045593262,
// "Y": 0.5265700221061707
// },
// {
// "X": 0.8423566818237305,
// "Y": 0.5265700221061707
// },
// {
// "X": 0.8423566818237305,
// "Y": 0.6062802076339722
// },
// {
// "X": 0.7308917045593262,
// "Y": 0.6062802076339722
// }
// ]
// },
// "Id": 7,
// "ParentId": 1,
// "Type": "WORD"
// },
// {
// "Confidence": 89.76324462890625,
// "DetectedText": "(",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.16401274502277374,
// "Left": 0.27229300141334534,
// "Top": 0.6642512083053589,
// "Width": 0.2850286066532135
// },
// "Polygon": [
// {
// "X": 0.27229300141334534,
// "Y": 0.6642512083053589
// },
// {
// "X": 0.2707006335258484,
// "Y": 0.37922704219818115
// },
// {
// "X": 0.43471336364746094,
// "Y": 0.37922704219818115
// },
// {
// "X": 0.4363057315349579,
// "Y": 0.6642512083053589
// }
// ]
// },
// "Id": 3,
// "ParentId": 0,
// "Type": "WORD"
// },
// {
// "Confidence": 99.92333984375,
// "DetectedText": "Smiling",
// "Geometry": {
// "BoundingBox": {
// "Height": 0.294724702835083,
// "Left": 0.5079618096351624,
// "Top": 0.6304348111152649,
// "Width": 0.4734293222427368
// },
// "Polygon": [
// {
// "X": 0.5079618096351624,
// "Y": 0.6304348111152649
// },
// {
// "X": 0.9808917045593262,
// "Y": 0.6086956262588501
// },
// {
// "X": 0.9856687784194946,
// "Y": 0.9033816456794739
// },
// {
// "X": 0.512738823890686,
// "Y": 0.9227052927017212
// }
// ]
// },
// "Id": 8,
// "ParentId": 2,
// "Type": "WORD"
// }
// ],
// "TextModelVersion": "3.0"
// }
//
//
// Sample code for parsing the JSON response...
// Use the following online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
Get ComStringOf Of hoJResp "TextModelVersion" To sTextModelVersion
Move 0 To i
Get ComSizeOfArray Of hoJResp "TextDetections" To iCount_i
While (i < iCount_i)
Set ComI Of hoJResp To i
Get ComStringOf Of hoJResp "TextDetections[i].Confidence" To sConfidence
Get ComStringOf Of hoJResp "TextDetections[i].DetectedText" To sDetectedText
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.BoundingBox.Height" To sGeometryBoundingBoxHeight
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.BoundingBox.Left" To sGeometryBoundingBoxLeft
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.BoundingBox.Top" To sGeometryBoundingBoxTop
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.BoundingBox.Width" To sGeometryBoundingBoxWidth
Get ComIntOf Of hoJResp "TextDetections[i].Id" To iId
Get ComStringOf Of hoJResp "TextDetections[i].Type" To sV_Type
Get ComIntOf Of hoJResp "TextDetections[i].ParentId" To iParentId
Move 0 To j
Get ComSizeOfArray Of hoJResp "TextDetections[i].Geometry.Polygon" To iCount_j
While (j < iCount_j)
Set ComJ Of hoJResp To j
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.Polygon[j].X" To X
Get ComStringOf Of hoJResp "TextDetections[i].Geometry.Polygon[j].Y" To Y
Move (j + 1) To j
Loop
Move (i + 1) To i
Loop
End_Procedure
|