Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to invoke web service
#61
php code:
How to use PHP's base64 function? PHP code calls are much simpler  Tongue

 
PHP Code:
 
$api 
'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=xxxxxxx';
$header = ['Content-Length: multipart/form-data'];

$file '/data/image/a.png'// Local image path
$image base64_encode(file_get_contents($file));
$post = [ 
    
'image' => $image,
];

$res request_post($api$post$header); 


The garbled problem of unicode characters is still not solved  Sad

Can someone provide some methods? thanks
#62
@redbull2k   @Kevin

I solved the problem,
Tongue

Do not use ResponseText

If you use the ResponseBody, there is no garbled

can make the code Shorter?
Smile

Macro Macro8
Code:
Copy      Help
typelib WinHttp {662901FC-6951-4854-9EB2-D9A2570F2B2E} 5.1
WinHttp.WinHttpRequest r._create
r.Open("POST" F"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic")
r.setRequestHeader("content-type", "application/x-www-form-urlencoded")
r.SetRequestHeader("cache-control" , "no-cache")

str access= "access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329&image="
str sFile.getfile("$desktop$\3.png");; change to file location
_s.encrypt(4 sFile "" 2)
_s.escape(9)
r.Send(F"{access}{_s}")

ARRAY(byte) a=r.ResponseBody
str s.fromn(&a[0] a.len)
out s

IXml x=JsonToXml(s)
ARRAY(IXmlNode) a1; x.Path("root/words_result/item/words" a1 1)
int i; for(i 0 a1.len) out a1[i].Value
#63
sometimes all it takes is a little longer patience and will you will find the answer.
#64
make code shorter no i don't think so, make it less lines yes .

for example
Code:
Copy      Help
typelib WinHttp {662901FC-6951-4854-9EB2-D9A2570F2B2E} 5.1; WinHttp.WinHttpRequest r._create; r.Open("POST" F"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"); r.setRequestHeader("content-type", "application/x-www-form-urlencoded"); r.SetRequestHeader("cache-control" , "no-cache")
str access= "access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329&image="
str sFile.getfile("$desktop$\3.png");; change to file location
_s.encrypt(4 sFile "" 2); _s.escape(9); r.Send(F"{access}{_s}")
ARRAY(byte) a=r.ResponseBody; str s.fromn(&a[0] a.len)
IXml x=JsonToXml(s); ARRAY(IXmlNode) a1; x.Path("root/words_result/item/words" a1 1)
int i; for(i 0 a1.len) out a1[i].Value
 could be even less lines but there really is no point. Code could be all in 1 line if you really wanted but like i said what's the point.
#65
and here is my crack at making it shorter

Function Function18
Code:
Copy      Help
typelib WinHttp {662901FC-6951-4854-9EB2-D9A2570F2B2E} 5.1
WinHttp.WinHttpRequest r._create
r.Open("POST" "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329")
r.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;r.SetRequestHeader("language_type" , "CHN_ENG")
str sFile.getfile("$desktop$\3.png");; change to file location
str base64.encrypt(4 sFile "" 2) ;base64.escape(9)
r.Send(F"&image={base64}") ;ARRAY(byte) by= r.ResponseBody
str json.fromn(&by[0] by.len) ;out json
#66
Wow!
I think, is the code shorter and it runs faster? 
Maybe what I think is wrong. Big Grin

I think using external components may make the code run longer.

I am experiencing a problem with VBS code output

Wscript.Echo r.ResponseBody    All are garbled
Wscript.Echo r.ResponseText    Unicode characters are garbled

 
Code:
Copy      Help
 
Set r = CreateObject("WinHttp.WinHttpRequest.5.1") 
r.Open "POST", "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic" 
r.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
r.Send "access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329&image=iVBORw0KGgoAAAANSUhEUgAAAScAAACCCAYAAAAE%2FA6oAAAK40lEQVR4nO3dQU%2FbyBvH8Ser%2F0uA8gbISmHpGwhiK3EjvVRVleve0ko9wGVvK7VIvXEJB7Qlt71G24rLhhtSi%2BAN0CXSJm%2BAwnvIf2bsUEjsxE4m8ePw%2FUhICBzbie1fZsYznkLPEABQ5qesdwAAohBOAFQinACoRDgBUIlwAqAS4QRAJcIJgEqEEwCVCCcAKhFOAFQinACoRDgBUIlwAqAS4QRAJcIJgEqEEwCVCCcAKhFOAFQinACoRDgBUIlwAqAS4QRAJcIJgEqEEwCVCCcAKhFOAFQinACoRDgBUIlwAqAS4QRAJcIJgEqEEwCVCCcAKhFOs3bblW7W%2BwDkkL9wuj2Qjb2CvG6nWX5DDm697UGoKwcfU%2ByHcfK5IIWPBzMKkX%2FkN%2FO5FNJ8NlM7kddz3R7gX6FneFubDZzDXbmQmrTeHcn2uOXbr6XQbJhfEi6fkA2byuUEL3zakt5LX3sR6n8ms1i3xu0Cnvit1i3tyB9P7S8NqXw%2BGb986Uha4fLH3r%2FlbeD1pDf2pyP1FbP4Sl06i3QR94%2FFZYUSFHLJe5vTdqmWfnkTDL%2BXYhZoH8yg6vc4BMeiLGvL45ftnh1Igq8TYG7%2B532NpjTUM1W0VMvHBFP3bEOKpxfmtyv5OXW1z5Te9hrJF19JtXKxbVvd21VZXUr7uni2Onpc6slRXFCn5Y5Fsu26avBpU%2Bpvz2XH43sCJuU%2FnIbYBuqi7F6nf2V5q2MurlVxDbwfD6T4ZkdWE786aTtWuH%2Bp964j%2B4dFSRx%2FpnpVSNIOdlmQb%2BZ9n28Ov9OJ29LGqFVN9fal%2Fc1%2BFhty8IqAggI9TW7qvfJ76cmn1lSraX0y63hf6yVbS6dX%2F9Ms%2F2fd%2FJZqK73a%2BwSvS%2FyewvVN%2BN5bn8q9%2Bs3YpZLtM6DATPo5uVvzSRrEB3TbTbGVuFopDw3TRVlLXRWcne3SujTbYzpDtI9dSa%2F8y%2FMUJVAgG1NX6360Cw0y1Ri5fxu7X72Lq26dyL5dz6jG8VRm3eakTOmFrO%2Fty8lmfFX2pO2iSaologn6TR1Oq5vn0tu8%2F5cwhJ4M9q9ZlZ03PdkJOwhW7K37e21I3bMP7lu99ixNu1KUrvz3vZyiYbdrLlpb8ni41e5tV1aX8nQRb8uLpxU5bptwigz3Ezm27VUrVXlOexJyIIPhK9tyZPsXvZKg57Sr%2FvksNdkQTNOguzoQTEEP8%2BJhcaKqaZZs14HGl%2Bie7v7CH5iPOdyti7G0I%2BfvnrtSVmHP%2FsGUdl6luXAmvwuYmL3D9v1hCU%2B10u9S%2F1KU%2FfbOQHeErvzzr2vNkxe%2BuikAM%2BZ3%2BIoTV62L9uD2%2BIqPILDVxg%2ByFlGtC9rH1j0NlbHbqSTvSpDUtMNN3JAgefAe%2B%2B2CtsuAtz5UwIxlV3KSH8HkLprlYCxYcW93uovI3ZEypYTDgjRj%2Bgt5NS5QE49x8xR2bkiQ%2BVw%2Fvwi35%2FtGAzAfGT0yJWjXqVwG499cELlqXkvsgItGc7KuCFZwRyoIvLTBZEsY9ukBiZ9QYAPHY5XvhesMOX2ZbvvXupRNlXTj7MR8zjbw0laZgezNv%2BTUfxKBu7AHL0TbWN4SsSWIidp7%2BnekRpUS4rsY3PVIt6UdE47nI4PC7OvLxDuWwHbMXbYJ2KCvXpnPuRL0G6vS4xv5M8eSU1BaKnxZk867USWEIKDc8OHrXdlPMaL%2B7o7Ukyspxpa84p9WcFfSshd3rp9QYD7rLz8CuNHO111HwPIYTkH%2FpcJeUa6edaT%2BvXJXNQuqS7%2BJvOolrAaZgHprqiYJR9T3t%2B%2FaVkyJ7OilHUx8bLY5i4fZKece4mfHCtaDL4FqLbjryMPnkDdTD4Dpjx2LGrN1VXN%2FL3%2Bd9UiuuPFx4Viy98G4s87Xcooxd554Gi%2BYRDCmUHq1q8H%2FhJ9PeJxmfzyA6U1dcureiKzboR9RjcPukR0dqf5bDBqa3c%2FriZ4bNGq83snncFjMUKks7PBZXZfdw0I4zKYhH84W66ne%2FYb8D8sdVz0dvtMZ9M7vhdXli9P7x4MSFXSaQT%2BnEe4ey5teXPcC1x1BkvYNmqzj5lRdG2b2uNwf76WcusvEqM8hzdAfYHbmG04%2BhRf9upeOhVF9jDxdpJ7CaXiAtb8QcQGfp57weBTyG04AFhrz1gFQiXACoBLhBEAlwgmASoQTAJUIJwAqEU4AVCKcAKhEOAFQiXACoBLhBEAlwgmASoQTAJUIJwAqLVQ4uadl5uy54Xnc58eGY5SNDMOpPyECBx6z4Wb72bv%2Fo%2FU841qI4jWc3MmQeDLM8PnebpYVwL%2Fguenhj%2BrzjGshSqbTkfu2%2FdLOh5f1XqSTx31%2BbDhG2VioNicAi4NwAqDS1NW6oVlBritSuIxYcKXu5rUbqT9Tyd0fxs8wYtu5Hk5xlHJWkqjpquy%2BPrsyfxdpvTsS3xOT53GfreH9lpHH1c3q4s6F4P09bw%2FOIJNs2q0f67l7VfAeH5wvNa%2FvO%2FNjNMG1sHB8ztDpZpVNO7OtmxG33Kt%2Frd3NzHsnnDF4eAbbMeu6Gb%2BoFcyQO7x8MDOwzGd24Fzsc3%2Fm5OF1x88yHLo%2FI%2FTg68fOCB1ud%2FCc6p8XX1N8dik%2F52leO%2FEx8nktLAAl1boL2T213yYD3wylI%2BlslaXRnGyW4NFO5PjSfnMPfxutbp5Lr1rzvsXpZbPPBx8r0rDz7kV827vGYrPdRnPMLXBbahh8fXh8L073I4%2Fv3XYH5%2FuzM0m%2Frcu30%2FslCy2mPUZZXAs6KQknW2SNLuaulqrmv9%2FkP%2B99P7ZlbUWk8eUg%2Bt9uKvXZVI8ml8E%2Bm%2BrJ7rU5Pr%2BOWKvZbuupuai%2Bxl025vWvoqt%2Bscd33HaXduSvLY033qc9RllcCzopCads2H4wnV%2BaAx31dHeEm%2Fc%2Bd2%2B%2FmVJPdWxbx3bJlAguj719qyfZ7urSuqet%2BZXH80qjhernNAlX1N4c%2BKNrjCxIc6sj55v6Juie5z53bkzF6frCXFi7CZYuu2%2F1bQ%2BNtm67Uh290PKaK0lolMfzSptHH06RTJXh%2FK2YE6kor5fG301SYUb7XFwuuxLM2Dutnrntfh%2Bz0M2VJIgwPfJ4XmXoUVfrRjInUtW2HbRz1Pw4g3127RzXzblXR1yVbcx2T9qN%2BH9qlcfzKiNew%2BnnJz7XNltupPnHmEbLYAm5ujYVleXi3PZpnEz22VxMf9jG7r9HbVeCfj0%2B21RKR1JfGdHIbqpIH6L602Usj%2BeVVl7DKWgUrcjGWffhP2xdW2OD4PWu2afoW7PuNvZKXV%2FbQAb7bLsLtJ7sxh4%2Fd0E2G1Le%2BstrJ8GdNy2pmfNpaDC5DcLDXVnfUjpQNo%2FnlUIF29nJ6xqHerYGhnsC28dEmAP1cKl7PWcn%2BX%2Bc4d7DrtextKRXOh7uyWuUZ9Jomcd9vifm2EpUX6Sxxy%2Bi53dMb%2FPRPcSbUh3qOT3N55zFMZr2WlhM%2FsMJmJfYcMIioEEc%2BRXercNiIpyQW0k7iCKfCCfkUvA0DIkdFoP8o80JysU0UCd5BA9yjXACoBLVOgAqEU4AVCKcAKhEOAFQiXACoBLhBEAlwgmASoQTAJUIJwAqEU4AVCKcAKhEOAFQiXACoBLhBEAlwgmASoQTAJUIJwAqEU4AVCKcAKhEOAFQiXACoBLhBEAlwgmASoQTAJUIJwAqEU4AVCKcAKhEOAFQiXACoBLhBEAlwgmASoQTAJUIJwAqEU4AVCKcAKj0f0KuyhM4KAWmAAAAAElFTkSuQmCC&language_type=CHN_ENG&probability=true&detect_direction=true" 
Wscript.Echo r.ResponseBody
'Wscript.Echo r.ResponseText
#67
The code itself is fast enough. What varies is the server response time. Which you have no control of. Code for me takes maybe 1 second or less to get a response.
#68
this so far has no error protection so when it errors it fails. the idea is to make it robust and catch potential errors
something like this
Function Function18
Code:
Copy      Help
typelib WinHttp {662901FC-6951-4854-9EB2-D9A2570F2B2E} 5.1
WinHttp.WinHttpRequest r._create
r.Open("POST" "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329")
r.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;r.SetRequestHeader("language_type" , "CHN_ENG")
str sFile.getfile("$desktop$\100jhkjghjkg0.png");; change to file location
err goto endof
str base64.encrypt(4 sFile "" 2) ;base64.escape(9)
r.Send(F"&image={base64}") 
err goto endof
ARRAY(byte) by= r.ResponseBody
out r.Status
sel r.Status
,case 200 ;;The request completed successfully.
,str json.fromn(&by[0] by.len) ;out json
,case 404 ;;The server has not found anything that matches the requested URI.
,out "error"
,case else out "Fail"
ret
;endof
out _error.description
ret
#69
good idea
#70
one tip use a jpg instead of a png the documentation recommends jpg over other types
#71
I think the best is PNG, because JPG is sometimes very blurry, affecting the recognition effect, I sent a code (screenshot + text recognition)

http://www.quickmacros.com/forum/showthr...4#pid33604
#72
from the api documentation

   
#73
JPG ? Why not PNG?  For text, I think GIF is the best, small, and very clear.

This is currently the most popular free OCR software in China, it integrates many OCR engines, it is open source

There are many useful features, such as translation, barcode recognition, etc.


https://github.com/AnyListen/tianruoocr
#74
@kevin

In VBS, using the following com object, the output will not be garbled, but I did not find it in QM's class library.

Set r = CreateObject("MSXML2.ServerXMLHTTP") 
Wscript.Echo r.ResponseText
#75
How does QM create an MSXML2.ServerXMLHTTP object?  Huh
#76
you can find a lot of useful info in tools> com libraries
Function Function21
Code:
Copy      Help
typelib MSXML2 {F5078F18-C551-11D3-89B9-0000F81FE221} 3.0
MSXML2.ServerXMLHTTP b._create
#77
Thank you for your help, what method did you find for it?
#78
i Just found it for you. All typelib can be found in Tools>Com Libraries, once your there just find microsoft xml find the newest version which will be v6.0. double click it to isert it in current function/macro there are also controls that you can attach to dialog.
#79
This is my new code, it is better understood Smile

Macro Macro8
Code:
Copy      Help
typelib MSXML2 {F5078F18-C551-11D3-89B9-0000F81FE221} 3.0
MSXML2.ServerXMLHTTP r._create
r.Open("POST" F"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic")
r.setRequestHeader("content-type", "application/x-www-form-urlencoded")
r.SetRequestHeader("cache-control" , "no-cache")

str access= "access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329&image="
str sFile.getfile("$desktop$\1.png");; change to file location
_s.encrypt(4 sFile "" 2)
_s.escape(9)
r.Send(F"{access}{_s}")

IXml x=JsonToXml(r.ResponseText)
ARRAY(IXmlNode) a
x.Path("root/words_result/item/words" a 1)

str d
for(int'i 0 a.len)
,d.addline(a[i].Value)
mes d.trim

Thank you for your help, I just learned that it is an xml component.  Wink

@Kevin

I feel using the current components(MSXML2.ServerXMLHTTP), the response is faster  Tongue


Attached Files Image(s)
   
#80
test for yourself
Function Function21
Code:
Copy      Help
long t1=perf
typelib MSXML2 {F5078F18-C551-11D3-89B9-0000F81FE221} 3.0
MSXML2.ServerXMLHTTP r._create
r.Open("POST" F"https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic")
r.setRequestHeader("content-type", "application/x-www-form-urlencoded")
r.SetRequestHeader("cache-control" , "no-cache")
str access= "access_token=24.b305c9822131e65eda05e29c157dd719.2592000.1559103982.282335-16139329&image="
str sFile.getfile("$desktop$\2.png");; change to file location
_s.encrypt(4 sFile "" 2)
_s.escape(9)
r.Send(F"{access}{_s}")
long t2=perf ;;get time after
out t2-t1 ;;display the difference
IXml x=JsonToXml(r.ResponseText)
ARRAY(IXmlNode) a
x.Path("root/words_result/item/words" a 1)
str d
for(int'i 0 a.len)
,d.addline(a[i].Value)
mes d.trim
#81
127648
Can this value measure the response speed?

In my case, OCR recognition is too fast, there is almost no delay, it may be my reason in China, closer to Baidu's server.
#82
that value is in milliseconds its just like a stopwatch,we tell it to start we tell it to end. its just telling you the result from start to finish.
response times kevin has already told you, it all depends on server location as well as many other factors. the only way i think you can improve is by having the server in your kitchen or something.
#83
indeed so  Big Grin
#84
It can also be implemented using powershell code, see the link below

http://www.quickmacros.com/forum/showthr...1#pid33661


Forum Jump:


Users browsing this thread: 5 Guest(s)