Go license plate recognition (network picture | local picture)
First register a Baidu Cloud account, and then select artificial intelligence text recognition to create an application. Get the appkey secret.
Network picture package mainimport ("encoding/base64", "encoding/json", "io/ioutil", "log", "net/http"net/url") func main () {handler: = PlateHandler {} appKey: = "11111" secret: = "11111111z" accessToken: = handler.GetAccessToken (appKey, secret) log.Println ("accessToken:" AccessToken) pictureUrl: = "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2181674788,2215933125&fm=26&gp=0.jpg" plate,err:=handler.GetPlate (pictureUrl,accessToken) if erratic license nil {log.Fatal (" failed to get license plate ", err)} log.Println (" license plate obtained: " Plate)} type accessTokenInfo struct {AccessToken string `json: "access_token" `ExpiresIn int64 `json: "expires_in" `} type WordResult struct {Number string `json: "number"`} type Data struct {WordsResult WordResult `json: "words_result" `} type PlateHandler struct {} func (handler * PlateHandler) GetAccessToken (appKey string, appSecret string) (accessToken string) {url: = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+appKey+"&client_secret="+appSecret response Err: = http.Get (url) if err! = nil {log.Fatal (err) return ""} data, err: = ioutil.ReadAll (response.Body) if err! = nil {log.Fatal (err) return ""} info: = accessTokenInfo {} json.Unmarshal (data, & info) log.Print ("data returned by request accessToken:", string (data) return info.AccessToken} func (handler * PlateHandler) GetPlate (picture_url string) AccessToken string) (plate string, err error) {rsp, err: = http.Get (picture_url) if err! = nil {log.Fatal (err) return ", err} image, _: = ioutil.ReadAll (rsp.Body) image_value, err2: = url.Parse (base64.StdEncoding.EncodeToString (image)) if err2! = nil {log.Fatal (err) return" Err} to_url: = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token="+accessToken values: = url.Values {} values.Add (" image ", image_value.EscapedPath ()) values.Add (" multi_detect "," false ") rsp2, err: = http.PostForm (to_url, values) defer rsp2.Body.Close () if err! = nil {log.Fatal (err) return" Err} data, err: = ioutil.ReadAll (rsp2.Body) if err! = nil {log.Fatal (err) return ", err} log.Println (" data returned by request for license plate: ", string (data)) m: = Data {} err = json.Unmarshal (data, & m) if err! = nil {log.Fatal (err) return", err} log.Println (m) return m.WordsResult.Number Nil} Local Picture package mainimport ("encoding/base64"encoding/json"io/ioutil"log"net/http"net/url"os") func main () {handler: = PlateHandler {} appKey: = "111111111" secret: = "111111111" accessToken: = handler.GetAccessToken (appKey, secret) log.Println ("accessToken:", accessToken) pictureUrl: = "day02/img/1.png" / / path Write plate,err:=handler.GetPlate (pictureUrl,accessToken) if erratic license nil {log.Fatal ("failed to get license plate", err)} log.Println ("license plate obtained:" Plate)} type accessTokenInfo struct {AccessToken string `json: "access_token" `ExpiresIn int64 `json: "expires_in" `} type WordResult struct {Number string `json: "number"`} type Data struct {WordsResult WordResult `json: "words_result" `} type PlateHandler struct {} func (handler * PlateHandler) GetAccessToken (appKey string, appSecret string) (accessToken string) {url: = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="+appKey+"&client_secret="+appSecret response Err: = http.Get (url) if err! = nil {log.Fatal (err) return ""} data, err: = ioutil.ReadAll (response.Body) if err! = nil {log.Fatal (err) return ""} info: = accessTokenInfo {} json.Unmarshal (data, & info) log.Print ("data returned by request accessToken:", string (data) return info.AccessToken} func (handler * PlateHandler) GetPlate (picture_url string) AccessToken string) (plate string, err error) {ff, _: = os.Open (picture_url) sourcebuffer: = make ([] byte, 50000000000) n, _: = ff.Read (sourcebuffer) / / base64 Compression sourcestring: = base64.StdEncoding.EncodeToString (sourcebuffer [: n]) to_url: = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token="+accessToken values: = url.Values {} values.Add (" image ") Sourcestring) values.Add ("multi_detect", "false") rsp2, err: = http.PostForm (to_url, values) defer rsp2.Body.Close () if err! = nil {log.Fatal (err) return ", err} data, err: = ioutil.ReadAll (rsp2.Body) if err! = nil {log.Fatal (err) return", err} log.Println ("data returned by request license plate:" String (data)) m: = Data {} err = json.Unmarshal (data, & m) if err! = nil {log.Fatal (err) return ", err} log.Println (m) return m.WordsResult.Number, nil} result 11:48:34 request license plate return data: {" log_id ": 8926648569804002425," words_result ": {" color ":" blue "," number ":" Yu A99999 " "probability": [0.9014493227005005,0.9014158248901367,0.900929868221283, 0.9012478590011597,0.901341438293457, 0.9010871052742004,0.9010393619537354], "vertexes_location": [{"y": 181,181,241,173,439}, {"y": 229," x ": 442}, {" y ": 236} 11:48:34 on 2019-12-25 {{Yu A99999}} license plate obtained at 11:48:34 on 2019-12-25: Yu A99999