百度API车牌识别——Restful方式

2022-10-15,,,,

源码下载地址:

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;

 

 

最后:结果图

 

《百度API车牌识别——Restful方式.doc》

下载本文的Word格式文档,以方便收藏与打印。