博舍

基于百度AI实现 车牌识别 基于百度ai的毕设

基于百度AI实现 车牌识别

最近做一个需求,希望能通过车牌的图片识别出车牌号,听说百度AI功能挺完善的,本人就想着先做个demo出来验证一下识别的准确性。

1.首先我们要在百度智能云注册个账号。 地址:https://login.bce.baidu.com/?account=

2.然后右上角的用户中心--》实名认证里去刷脸认证(该步骤必须要,不然权限不够,调接口会报:Nopermissiontoaccessdata)

 3.创建一个应用

 会生成我们要用到的AppID,APIKEY,SecretKey。

百度云AI识别环境弄好了,接下来我们去撸代码

 

4.pom.xml引入依赖 。想查看百度云AI的sdk版本的请向这看----》  https://mvnrepository.com/artifact/com.baidu.aip/java-sdk

com.baidu.aipjava-sdk4.11.0

5.获取Access_token,注意更换你的appkey和secrotkey

packageUtils;importorg.json.JSONObject;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.List;importjava.util.Map;publicclassAccess_token{/***获取权限token*@return返回示例:*{*"access_token":"24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",*"expires_in":2592000*}*/publicstaticStringgetAuth(){//官网获取的APIKey更新为你注册的StringclientId="*****";//官网获取的SecretKey更新为你注册的StringclientSecret="**********";returngetAuth(clientId,clientSecret);}/***获取API访问token*该token有一定的有效期,需要自行管理,当失效时需重新获取.*@paramak-百度云官网获取的APIKey*@paramsk-百度云官网获取的SecuretKey*@returnassess_token示例:*"24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"*/publicstaticStringgetAuth(Stringak,Stringsk){//获取token地址StringauthHost="https://aip.baidubce.com/oauth/2.0/token?";StringgetAccessTokenUrl=authHost//1.grant_type为固定参数+"grant_type=client_credentials"//2.官网获取的APIKey+"&client_id="+ak//3.官网获取的SecretKey+"&client_secret="+sk;try{URLrealUrl=newURL(getAccessTokenUrl);//打开和URL之间的连接HttpURLConnectionconnection=(HttpURLConnection)realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();//获取所有响应头字段Mapmap=connection.getHeaderFields();//遍历所有的响应头字段for(Stringkey:map.keySet()){System.err.println(key+"--->"+map.get(key));}//定义BufferedReader输入流来读取URL的响应BufferedReaderin=newBufferedReader(newInputStreamReader(connection.getInputStream()));Stringresult="";Stringline;while((line=in.readLine())!=null){result+=line;}/***返回结果示例*/System.err.println("result:"+result);JSONObjectjsonObject=newJSONObject(result);Stringaccess_token=jsonObject.getString("access_token");returnaccess_token;}catch(Exceptione){System.err.printf("获取token失败!");e.printStackTrace(System.err);}returnnull;}}

6.创建一个Controller添加方法

/***获取百度AI应用数据.**@returnmessage*/@CrossOrigin@RequestMapping(value="/baidu1",method=RequestMethod.GET,produces=MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublicMapgetAisss(){Mapmap1=newHashMap();//获取tokenStringaccessToken=Access_token.getAuth();//通用识别urlStringotherHost="https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";try{//读取本地图片输入流FileInputStreaminputStream=newFileInputStream("F:/ch1.png");Stringbase=Base64.encodeBase64String(IOUtils.toByteArray(inputStream));logger.info(base);Stringparams=URLEncoder.encode("image","UTF-8")+"="+URLEncoder.encode(base,"UTF-8");/***线上环境access_token有过期时间,客户端可自行缓存,过期后重新获取。*///StringaccessToken="#####调用鉴权接口获取的token#####";Stringresult=HttpUtil.post(otherHost,accessToken,params);JSONObjectjsonObject=JSONObject.parseObject(result);JSONArraywords_result=(JSONArray)jsonObject.get("words_result");JSONObjecto=(JSONObject)words_result.get(0);map1.put("lincens",o.get("words"));System.out.println(result);}catch(Exceptione){e.printStackTrace();}returnmap1;}

7.工具类(补充代码)

/***http工具类*/publicclassHttpUtil{publicstaticStringpost(StringrequestUrl,StringaccessToken,Stringparams)throwsException{StringcontentType="application/x-www-form-urlencoded";returnHttpUtil.post(requestUrl,accessToken,contentType,params);}publicstaticStringpost(StringrequestUrl,StringaccessToken,StringcontentType,Stringparams)throwsException{Stringencoding="UTF-8";if(requestUrl.contains("nlp")){encoding="GBK";}returnHttpUtil.post(requestUrl,accessToken,contentType,params,encoding);}publicstaticStringpost(StringrequestUrl,StringaccessToken,StringcontentType,Stringparams,Stringencoding)throwsException{Stringurl=requestUrl+"?access_token="+accessToken;returnHttpUtil.postGeneralUrl(url,contentType,params,encoding);}publicstaticStringpostGeneralUrl(StringgeneralUrl,StringcontentType,Stringparams,Stringencoding)throwsException{URLurl=newURL(generalUrl);//打开和URL之间的连接HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();connection.setRequestMethod("POST");//设置通用的请求属性connection.setRequestProperty("Content-Type",contentType);connection.setRequestProperty("Connection","Keep-Alive");connection.setUseCaches(false);connection.setDoOutput(true);connection.setDoInput(true);//得到请求的输出流对象DataOutputStreamout=newDataOutputStream(connection.getOutputStream());out.write(params.getBytes(encoding));out.flush();out.close();//建立实际的连接connection.connect();//获取所有响应头字段Mapheaders=connection.getHeaderFields();//遍历所有的响应头字段for(Stringkey:headers.keySet()){System.err.println(key+"--->"+headers.get(key));}//定义BufferedReader输入流来读取URL的响应BufferedReaderin=null;in=newBufferedReader(newInputStreamReader(connection.getInputStream(),encoding));Stringresult="";StringgetLine;while((getLine=in.readLine())!=null){result+=getLine;}in.close();System.err.println("result:"+result);returnresult;}}

debugger会发现车牌号识别出来了

 

需要注意的地方:

1.图片尽量小,图片流传输比较耗时;

2.access_token的有效期为30天,需要每30天进行定期更换;

3.每天的调用次数是有限制的,具体自己看文档;

4.官方文档说明:URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效请注意关闭URL防盗链

最后奉上github地址:https://github.com/xiatengGG/SpringBoot-BaiduAI

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇