教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 调用百度“车牌识别”API接口(go语言实现)

调用百度“车牌识别”API接口(go语言实现)

发布时间:2021-05-13   编辑:jiaochengji.com
教程集为您提供调用百度“车牌识别”API接口(go语言实现)等资源,欢迎您收藏本站,我们将为您提供最新的调用百度“车牌识别”API接口(go语言实现)资源

调用百度的api识别车牌,没有GPU的机器,也没有大量的有标注的车牌数据,所以就只好拿别人现成的车牌识别api接口

具体的识别原理就不说了,只是调别人的接口而已,具体的调用文档百度已经给出:

http://ai.baidu.com/docs#/OCR-API/5116ac95

 

但是我看文档里面好像没有一个是用go调用的例子,所以就自己写了一个go调用的,发http请求到具体的api上获取参数

具体流程:

 

准备工作: 有一个车牌图片的url,这个url能够访问到图片,例子中给出的url是:

https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2181674788,2215933125&fm=26&gp=0.jpg

1.先访问token获取的url,传入appKey和appSecret , 获取 access_token

2.读取上述图片url地址,获取图片的二进制流信息

3.进行base64处理

4.进行urlencode处理

5.传入access_token和第4步的结果,调用车牌识别api,再根据这个token去调用车牌识别的接口

注:返回的数据是json格式,所以写了一些简单的结构体,用来json解析

      用的是免费的接口,注册开发者,创建应用就能调用了,但是每天的调用有上限

 

运行结果:

 

代码:

PlateHandler.go (这里是获取一次token,用token识别一次车牌,但是token的有效期是一个月,不用每次识别都获取新的token,在开发中可以将token的信息存储起来,到期了再去获取新的token)

package main

import (
	"encoding/base64"
	"encoding/json"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
)

func main() {
	handler := PlateHandler{}

	appKey := "your_appKey"
	secret := "your_appSecret"
	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 err!=nil{
		log.Fatal("获取车牌失败",err)
	}
	log.Println("获取到的车牌:",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("请求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("请求车牌返回的数据:",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
}

 

到此这篇关于“调用百度“车牌识别”API接口(go语言实现)”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
调用百度“车牌识别”API接口(go语言实现)
想系统学习GO语言(Golang
go比php好在哪里
兄弟连golang神技(1)-关于 Go 语言的介绍
[View]我不喜欢“我不喜欢 Go 语言的十个理由”的十个理由
如何获得领地seo关键字
Go 语言到底适合干什么?
go 语言学习历程
Go 语言学习第一章节
Web API应用架构概括分析和设计实例教程

[关闭]
~ ~