• V831——车牌识别


    V831

    V831—车牌识别

    前言

    V831实现车牌识别,可识别车牌号,以及车牌的颜色。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    一、onenet平台

    OneNET是中国移动打造的高效、稳定、安全的物联网开放平台。 OneNET支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入,提供丰富的API和应用模板以支撑各类行业应用和智能硬件的开发,有效降低物联网应用开发和部署成本,满足物联网领域设备连接、协议适配、数据存储、数据安全以及大数据分析等平台级服务需求。 OneNET已构建“云-网-边-端”整体架构的物联网能力,具备接入增强、边缘计算、增值能力、AI、数据分析、一站式开发、行业能力、生态开放8大特点。
    在这里插入图片描述
    没错就是用的onenet平台实现的。
    在这里插入图片描述
    下面具体介绍是如何实现的,V831真的很好用。

    首先你需要注册一个账号,然后开通AI能力。这个就不介绍了。

    二、V831

    1.联网

    要实现API的调用就需要联网,V831如何联网呢
    在这里插入图片描述
    该 U盘 目录对应的板子运行 linux 系统的 /root/ 目录;这里 main.py 是默认执行的开机脚本,wpa_supplicant.conf 是 WIFI 配置信息。

    2.获取token

    首先登录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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    你会得到属于自己的token
    在这里插入图片描述

    3.调用API

    先来看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)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    然后直接附上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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    运行这段代码就可以看到上图的现象,V831使用的镜像是0.4.8,在0.4.8中支持了中文字体加载。否则你看到的中文是一段乱码。

    总结

    调用API接口,既可以大幅度提升准确率,又能最下限度的利用V831的资源。

  • 相关阅读:
    LeetCode 251:展开二维向量
    1.Vue-在独立页面实现Vue的增删改查
    TypeScript
    LVS+Keepalived+nfs 集群部署及实验
    如何让职工为智能制造变革做好准备
    缓存组件选择/多级
    Node学习笔记之path模块
    安卓学习笔记
    JavaSE学习文档(上)
    爬手机app接口数据,手机不能上网问题及解决,
  • 原文地址:https://blog.csdn.net/qq_51963216/article/details/124990957