V831—车牌识别
V831实现车牌识别,可识别车牌号,以及车牌的颜色。
OneNET是中国移动打造的高效、稳定、安全的物联网开放平台。 OneNET支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入,提供丰富的API和应用模板以支撑各类行业应用和智能硬件的开发,有效降低物联网应用开发和部署成本,满足物联网领域设备连接、协议适配、数据存储、数据安全以及大数据分析等平台级服务需求。 OneNET已构建“云-网-边-端”整体架构的物联网能力,具备接入增强、边缘计算、增值能力、AI、数据分析、一站式开发、行业能力、生态开放8大特点。
没错就是用的onenet平台实现的。
下面具体介绍是如何实现的,V831真的很好用。
首先你需要注册一个账号,然后开通AI能力。这个就不介绍了。
要实现API的调用就需要联网,V831如何联网呢
该 U盘 目录对应的板子运行 linux 系统的 /root/ 目录;这里 main.py 是默认执行的开机脚本,wpa_supplicant.conf 是 WIFI 配置信息。
首先登录OneNET AI平台,进入【控制台】-【AI能力管理】-【创建AI能力】,然后可根据需求灵活选择需要调用的AI能力并保存,最后平台会自动生成相应的AI Key和Secret Key,生成的AI key和Secret Key将用于获取对应能力的调用accessToken,accessToken可自定义设置使用有效期;为保证数据传输安全,建议定期更新accessToken。
import requests
url = "http://ai.heclouds.com:9090/v1/user/app/accessToken?aiKey=xxxx&secretKey=yyyyy"
headers = {
'Content-Type': 'application/json'
}
response = requests.request("GET", url, headers=headers)
print(response.text)
你会得到属于自己的token
先来看onenet平台给的源码
import requests
import json
import base64
url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/NUMBER_PLATE_RECOGNITION'
headers ={
'Content-Type':'application/json',
'token':'xxxxxxxxxxxxxxxxx(用户鉴权接口返回结果中的accessToken)'
}
# 打开图片文件
file = open('D:/Desktop/体验图片/车牌识别/body5.png','rb')
# 将其转为base64信息
base64Str = base64.b64encode(file.read()).decode()
# 关闭打开的文件
file.close()
# 构造接口调用参数
data = {
'type':'GPU', #可选参数,填入“GPU”则代表使用GPU版本api,否则使用CPU版本api
'picture':[base64Str]
}
# POST 方式调用
response = requests.request("POST", url, headers=headers, data=json.dumps(data))
# 打印结果
print(response.text)
然后直接附上V831的源码,这里注意token要24小时更新一次,当然你也写在前面,每次都是最新的token
from maix import display, camera, image
import requests
import time
from evdev import InputDevice
import pickle
import json
from select import select
import base64
import numpy
import serial
ser = serial.Serial("/dev/ttyS1",115200) # 连接串口 UART-1 TX (PG6)和 UART-1 RX (PG7)
image.load_freetype(path="/home/res/sans.ttf")
while 1:
img=camera.capture()
#display.show(img)
filename = camera.read()
img.save('/mnt/tmp.jpg')
font_color=(255, 0, 0)
filename = open('/mnt/tmp.jpg','rb')
url = 'http://ai.heclouds.com:9090/v1/aiApi/picture/NUMBER_PLATE_RECOGNITION'
headers ={
'Content-Type':'application/json',
'token':'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjRhMmZjZjY4YzA1MDQ5YjViOWEwZDIxM2E1NzU0NjFkIiwiZXhwIjoxNjUzNjUwNzc2LCJ2YWx1ZSI6IntcImFpS2V5XCI6XCIxNGJmNmZhZWQzNmM0NTYwYjJmYWE4M2RjNGEyMDRlYVwiLFwiYXBwSWRcIjpcIjk3NTIwMDYyMzQ1ODc4MzIzMlwiLFwicHVycG9zZVwiOlwiYXBpXCIsXCJzZWNyZXRLZXlcIjpcImU3NDE2MDVjNTVmOTRlOGRiYjVjOGRiMGE0NjkzYWJiXCIsXCJ1c2VySWRcIjpcIjAxMHUwMDE2MzYyOTE4NDc4MDg1NTc1XCJ9In0.MIE6k8MSYK1kKvwR92iavVetKBfPWKU3k5rfd1r1ocw'
}
##读取图像
# 将其转为base64信息
base64Str = base64.b64encode(filename.read()).decode()
# 构造接口调用参数
data = {
'type':'GPU', #可选参数,填入“GPU”则代表使用GPU版本api,否则使用CPU版本api
'picture':[base64Str]
}
# POST 方式调用
response = requests.request("POST", url, headers=headers, data=json.dumps(data))
d1 = json.loads(response.text)
#print (type(d1))
#print(d1)
#print(d1['data'])
d2=d1['data']
if type(d2) is list:
chepai=d2[0]['label'].encode()
# img.draw_string(d2[0]['box']['x'],d2[0]['box']['y'] ,'车牌号:', color= font_color)
img.draw_string(d2[0]['box']['x']+20,d2[0]['box']['y'] ,chepai, color= font_color)
img.draw_string(d2[0]['box']['x']+100,d2[0]['box']['y'] ,d2[0]['color'], color= font_color)
print(chepai.decode('UTF-8'))
print(d2[0]['color'])
print(d2[0]['box']['x'])
print(d2[0]['box']['y'])
print(d2[0]['box']['width'])
print(d2[0]['box']['height'])
img.draw_rectangle(d2[0]['box']['x']+20, d2[0]['box']['y']+20, d2[0]['box']['x']+ d2[0]['box']['width']-20, d2[0]['box']['height']+ d2[0]['box']['y']-20 , color=(255, 0, 0),
thickness=2) #画一个从(80, 160)到(160, 200)的蓝色矩形外框
display.show(img)
display.show(img)
运行这段代码就可以看到上图的现象,V831使用的镜像是0.4.8,在0.4.8中支持了中文字体加载。否则你看到的中文是一段乱码。
调用API接口,既可以大幅度提升准确率,又能最下限度的利用V831的资源。