hockel 发表于 2020-4-26 09:16:20

【MaixPy教程】用mixly玩转K210——调用AI_OneNET API实现车牌识别

## 【MaixPy教程】用mixly玩转K210——调用AI-OneNET API实现车牌识别

【MaixPy系列教程:】
+ [【MaixPy教程】用maixHub训练模型进行开源硬件识别](https://mc.dfrobot.com.cn/thread-304993-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——口罩识别](https://mc.dfrobot.com.cn/thread-305026-1-1.html)
+ [【MaixPy教程】用mixly玩转K210——调用AI-OneNET API实现车牌识别](https://mc.dfrobot.com.cn/thread-305038-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——人脸追踪](https://mc.dfrobot.com.cn/thread-305097-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——20类对象检测](https://mc.dfrobot.com.cn/thread-305125-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——一键本地模型训练](https://mc.dfrobot.com.cn/thread-305291-1-1.html)
+ [【MaixPy 教程】用mixly玩转k210——MixNo通过TCP/IP与掌控板进行通讯](https://mc.dfrobot.com.cn/thread-305317-1-1.html)

## 前言
### 什么是oneNETAI,他可以做什么?
人工智能与物联网的融合带来的是一个全新的时代。这个时代,人与人的连接、人与物的连接、物与物的连接都将被全面赋能,人工智能+物联网的化学反应,将深度赋能时代。
作为国内三大运营商物联网开放平台中首个上线的人工智能开放平台,中国移动OneNET AI将解锁更多行业、更多场景的物联网应用,让应用智能化“无处不在”。
OneNET AI 提供人脸识别、图像识别、图像处理和视频处理等全方位的AI能力,同时通过应用封装,提供更贴近用户的解决方案.

### 如何申请OneNET账户?
流程如下:

1.用户注册登录
进入(https://open.iot.10086.cn/ai/index.html)
,点击顶部导航栏右侧注册,将跳转到OneNET平台注册界面,填写相关信息完成用户注册。


首次使用,注册成功后即可登录平台。在OneNET AI平台首页,点击顶部导航栏右侧登录,进入登录页面,输入账号、密码、验证码进行登录。


2.实名认证
通过实名认证的新用户即可申请使用API调用权限。
完成账号注册后,需登录OneNET平台,点击头像下拉菜单“实名认证”进入实名认证页面,进行实名认证操作。
温馨提示:实名认证方式分为企业和个人两种类型,可根据自己的需要选择认证方式;已经认证为个人的用户可升级成为企业;
3.API调用权限申请
完成实名认证的用户可根据页面提示,进行API调用权限开通。您可以提交申请单等待客服人员的审核;或者按照页面提供的联系方式主动联系客服人员,快速开通API调用权限。
[在这里插入图片描述](https://img-blog.csdnimg.cn/20200425213101146.jpg4.API调用
目前AI产品主要开放了REST API形式的服务,你可以点击平台主页「帮助文档」-「技术文档」目录下的各技术服务文档,查看具体使用方法及参数。
在您正式调用AI能力之前,请先通过用户鉴权方法获取Login Token,便于后续调用各项AI能力,方法详见用户鉴权文档。
温馨提示:Login Token的有效期为24小时,请您调用时注意在程序中定期请求新的token。
## 编写程序
打开我们的mixly找到人工智能模块可以看到有关AI_OneNET的积木块:

在阅读OneNET AI平台的帮助文档,要用人工智能的API首先要获得用户鉴定权(也就是token)

如果用python来写一个请求示例代码要这么多代码:

```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:
                        encode += self.ALPHABET
      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

      sb += sourceStr
      #尾部固定增加x个字符
      for i in range(self.postCount):
            sb += self.randomChar

      #base64 加密
      base64Str = self.base64Encode(sb)

      destStr = ''
      for i in range(len(base64Str)):
            #找到字符所在位置
            position = self.keyStr.find(base64Str)

            #对字符进行转换
            y = (self.encryptionA * position + self.encryptionB) % self.keyLength

            #找到替换后的字符

            destStr += self.keyStr

      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相连,没有板载按钮的可以使用外接按钮)
## 程序优化:

## 程序演示:https://v.youku.com/v_show/id_XNDY0ODI3NTg3Mg==.html








btx000 发表于 2020-4-26 21:26:43

k210完全可以离线识别车牌的{:5_125:}

txm派瑞深山锹 发表于 2020-4-27 09:05:43

btx000 发表于 2020-4-26 21:26
k210完全可以离线识别车牌的

请问板型选的是什么?

hockel 发表于 2020-4-27 09:16:08

btx000 发表于 2020-4-26 21:26
k210完全可以离线识别车牌的
来加波VX好友:15755473xxx,交流交流!

发表于 2020-5-6 14:31:55

btx000 发表于 2020-4-26 21:26
k210完全可以离线识别车牌的

求教程,分项一下经验呗

vGE98-Au 发表于 2021-6-9 15:33:20

大佬,我复现的时候,发现Mixly程序一直上传不了出现这个问题,求大佬帮忙!!!!
页: [1]
查看完整版本: 【MaixPy教程】用mixly玩转K210——调用AI_OneNET API实现车牌识别