源码下载地址:
delphi xe 10.3.2 for windows 7 环境编译通过!
测式需要先注册百度api账号,拿到api key 和secret key后才能获取token值
第一步:首先获取token地址
1 function tfrmmain.gettoken(tokenurl, lbledtapikey, lbledtsecretkey 2 : string): string; 3 begin 4 with restclient1 do 5 begin 6 baseurl := tokenurl; 7 end; 8 with restrequest1 do 9 begin 10 method := rmpost; 11 acceptcharset := 'utf-8'; 12 params.clear; 13 addparameter('grant_type', 'client_credentials'); 14 addparameter('client_id', lbledtapikey); 15 // api id key 16 addparameter('client_secret', lbledtsecretkey); 17 // api secret key 18 execute; 19 result := restresponse1.content; 20 end; 21 end; 22 23 function tfrmmain.getaccesstoken(jsonstr: string): string; // 取jsonstring 值 24 var 25 jo: tjsonobject; 26 jv: tjsonvalue; 27 begin 28 jo := nil; 29 jo := tjsonobject.create; 30 jo := tjsonobject.parsejsonvalue(tencoding.utf8.getbytes(jsonstr), 0) 31 as tjsonobject; 32 jv := jo.get('access_token').jsonvalue; 33 result := jv.value; 34 end; 35 36 37 procedure tfrmmain.button1click(sender: tobject); 38 begin 39 lbledttoken.text := getaccesstoken(gettoken(lbledttokenurl.text, 40 lbledtapikey.text, lbledtsecretkey.text)); 41 end;
function tfrmmain.getcarnumjson(accesstoken, carnumapi: string): string; var strtemp: string; temp: tjsonobject; strm: tmemorystream; ss: tstringstream; s: string; begin if frmmain.image1.picture.graphic <> nil then begin strm := tmemorystream.create; frmmain.image1.picture.savetostream(strm); ss := tstringstream.create(''); strm.position := 0; encodestream(strm, ss); // 将内存流编码为base64字符流 s := ss.datastring; strm.free; ss.free; end; restclient1.baseurl := carnumapi; restrequest1.params.clear; restrequest1.addparameter('access_token', accesstoken); restrequest1.addparameter('image', s); restrequest1.execute; result := restresponse1.content; end; function tfrmmain.getcarnum(carnumjsonstr: string): string; var jo: tjsonobject; jo2: tjsonobject; jv: tjsonvalue; jsonstr: string; // 要转换的json字符串 jsonstr2: string; // 要转换的json字符串 begin // 先取出嵌套的那个字符串 jo := tjsonobject.parsejsonvalue(carnumjsonstr) as tjsonobject; jsonstr := jo.getvalue('words_result').tostring; // 再对这个字符串取值 jo2 := tjsonobject.parsejsonvalue(jsonstr) as tjsonobject; jsonstr2 := jo.getvalue('words_result').tostring; try jv := jo2.get('number').jsonvalue; result := jv.value; finally jo.free; end; end; procedure tfrmmain.button2click(sender: tobject); begin lbledtcarnum.text := getcarnum(getcarnumjson(lbledttoken.text, lbledtapiurl.text)); end;
最后:结果图