本帖最后由 猪百岁 于 2021-3-8 22:35 编辑
【MaixPy教程】用mixly玩转K210——调用AI_OneNET API实现车牌识别
前言
什么是oneNET AI,他可以做什么?
人工智能与物联网的融合带来的是一个全新的时代。这个时代,人与人的连接、人与物的连接、物与物的连接都将被全面赋能,人工智能+物联网的化学反应,将深度赋能时代。
作为国内三大运营商物联网开放平台中首个上线的人工智能开放平台,中国移动OneNET AI将解锁更多行业、更多场景的物联网应用,让应用智能化“无处不在”。
OneNET AI 提供人脸识别、图像识别、图像处理和视频处理等全方位的AI能力,同时通过应用封装,提供更贴近用户的解决方案.
如何申请OneNET账户?
流程如下:
- 1.用户注册登录
进入OneNET AI平台首页
,点击顶部导航栏右侧注册,将跳转到OneNET平台注册界 面,填写相关信息完成用户注册。
首次使用,注册成功后即可登录平台。在OneNET AI平台首页,点击顶部导航栏右侧登录,进入登录页面,输入账号、密码、验证码进行登录。
-
实名认证
通过实名认证的新用户即可申请使用API调用权限。
完成账号注册后,需登录OneNET平台,点击头像下拉菜 单“实名认证”进入实名认证页面,进行实名认证操作。
温馨提示:实名认证方式分为企业和个人两种类型,可根 据自己的需要选择认证方式;已经认证为个人的用户可升 级成为企业
-
API调用权限申请
完成实名认证的用户可根据页面提示,进行API调用权限 开通。您可以提交申请单等待客服人员的审核;或者按照页面提供的联系方式主动联系客服人员,快速开通API调用权限。
- API调用
目前AI产品主要开放了REST API形式的服务,你可以点击平台主页「帮助文档」-「技术文档」目录下的各技术服务文档,查看具体使用方法及参数。
在您正式调用AI能力之前,请先通过用户鉴权方法获取Login Token,便于后续调用各项AI能力,方法详见用户鉴权文档。
温馨提示:Login Token的有效期为24小时,请您调用时注意在程序中定期请求新的token。
编写程序
打开我们的mixly找到人工智能模块可以看到有关AI_OneNET的积木块:
在阅读OneNET AI平台的帮助文档,要用人工智能的API首先要获得用户鉴定权(也就是token)
如果用python来写一个请求示例代码要这么多代码:
import requests
import json
import base64
import random
class SimpleEncode():
keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-={}[]:;<,>.?/|"
keyLength = len(keyStr)
encryptionA = 17
encryptionB = 8
decodeA = 0
preCountMax = 15
postCount = 5
randomChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop"
randomCharLength = len(randomChar)
#base64字符
ALPHABET = "ABCDEFGHIJKLMN0123456789OPQRSTUVWXYZ+/abcdefghijklmnopqrstuvwxyz"
STANDARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" # 标准的字符串索引
#找到密钥
for i in range(1,keyLength):
if (encryptionA * i) % keyLength == 1:
decodeA = i
def base64Encode(self,sourceStr):
encode = ""
for ch in base64.b64encode(sourceStr.encode()).decode():
if ch == '=':
encode += '='
else:
for i in range(64):
if ch == self.STANDARD[i]:
encode += self.ALPHABET[i]
return encode
def encrpyt(self,sourceStr):
srcLength = len(sourceStr)
#先加入干扰字符的数量
addCharCount = random.randint(1,self.preCountMax) if srcLength < self.preCountMax else 0
#随机字符
sb = str(addCharCount)+"|"
for i in range(addCharCount):
sb += self.randomChar[random.randint(0,self.randomCharLength-1)]
sb += sourceStr
#尾部固定增加x个字符
for i in range(self.postCount):
sb += self.randomChar[random.randint(0,self.randomCharLength-1)]
#base64 加密
base64Str = self.base64Encode(sb)
destStr = ''
for i in range(len(base64Str)):
#找到字符所在位置
position = self.keyStr.find(base64Str[i])
#对字符进行转换
y = (self.encryptionA * position + self.encryptionB) % self.keyLength
#找到替换后的字符
destStr += self.keyStr[y]
return destStr
if __name__ == '__main__':
url = 'http://ai.heclouds.com:9090/v1/user/oneNetLogin'
headers = {
'Content-Type': 'application/json',
}
account = '' # 用户名
password = '' # 用户密码
simpleencode = SimpleEncode()
data = {'account': account, 'password': simpleencode.encrpyt(password)}
print(data)
req = requests.post(url, data=json.dumps(data), headers=headers)
print(req.text)
那么在我们的mixly里只需要下面几个积木块就可以实现:
有了Token码,现在我们就可以调用API中的车牌信息识别:
在调用车牌识别之前首先我们需要将我们的摄像头和液晶屏幕初始化然后实时拍照将图片上传到AI云平台,通过AI运算把识别到的图片信息以字典的形式发送到MaixPy 主控板上。我们只需要字典中的date数据,里面有车牌号和车牌颜色。如下图所示:
虽然这样子识别到了车牌号,调用API的程序是一直运行的,这时会造成我们的调用次数的减少,虽然每天有10000次的调用量,但也不能经得起这样调用啊,所用我们对程序做了一个小小的优化,加入按键控制进行调用API,(我这里用的是maix DOCK,一个按钮引脚和GPIO16相连,没有板载按钮的可以使用外接按钮)
程序优化:
程序演示:
|