前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SCF: “灰常”简单的车牌识别API制作

SCF: “灰常”简单的车牌识别API制作

原创
作者头像
None-xiaomi
修改2019-06-10 10:59:34
9460
修改2019-06-10 10:59:34
举报

本文的真正目的,并不是说要做一个完善的车牌识别工具,主要就是说想要通过简单的一些package组合(包括深度学习框架等在哪),实现一个简单的对外接口,用来进行车牌识别,同时,该项目也有一个小难点:如何打包依赖(包含需要.so的依赖)。

包含.so的依赖,通常是某些依赖需要编译一些文件(非纯Python实现的),这个时候,“稍有不慎”就会让我们无法执行代码。所以这个时候可以使自己的打包环境与云函数一致:CentOS + Python3.6。

本地测试

编写代码:

执行结果:

打包上传

在CentOS + Python3.6的基本环境下:

建立文件夹并进入:

代码语言:javascript
复制
mkdir mytest && cd mytest

安装依赖:

安装opencv-python

代码语言:javascript
复制
sudo pip install opencv-python -t /home/dfounderliu/code/mytest

安装hyperlpr(这是一个基于DNN的深度学习模块,该模块的使用,也充分说明了,SCF可以执行深度学习的项目模型,完美......)

代码语言:javascript
复制
sudo pip install hyperlpr -t /home/dfounderliu/code/mytest

建立测试:

vim index.py

编写内容:

代码语言:javascript
复制
from hyperlpr import *
import cv2

保存,并且打包,上传SCF:

代码语言:javascript
复制
zip -r index.zip .

云函数测试:

表面上,是失败的,但是实际上,是成功的,因为他失败的是我们的方法没有建立,而我们的import已经正确导入了(就是说没有在添加依赖部分报错!)

编写函数

代码语言:javascript
复制
# 导入包
from hyperlpr import *
import cv2
import base64
import json
import urllib.parse

def save_picture(base64data):
    try:
        imgdata = base64.b64decode(urllib.parse.unquote(base64data))
        file = open('/tmp/picture.png', 'wb')
        file.write(imgdata)
        file.close()
        return True
    except Exception as e:
        return str(e)


def ana_picture():
    print(cv2.imread("/tmp/picture.png"))
    return {"resulr": HyperLPR_PlateRecogntion(cv2.imread("/tmp/picture.png"))}


def main_handler(event, context):
    save_result = save_picture(event["body"].replace("image=",""))
    if  save_result == True:
        return ana_picture()
    else:
        return save_result
   
    # return save_picture
    

测试结果:

测试图像转base64代码:

代码语言:javascript
复制
#image转base64
import base64
with open("2.png","rb") as f:#转为二进制格式
    base64_data = base64.b64encode(f.read())#使用base64进行加密
    print(base64_data)
    file=open('1.txt','wt')#写成文本格式
    file.write(base64_data)
    file.close()

测试时API网关参数:

对接API网关

然后发布到测试环境,即可

编写测试

测试代码:

代码语言:javascript
复制
import base64
import urllib.request
import urllib.parse


with open("1.png","rb") as f:
    base64_data = base64.b64encode(f.read())  # 使用base64进行加密


url = "http://service-l2ksmbje-1256773370.gz.apigw.tencentcs.com/test/picture"
data = {
    "image": base64_data.decode("utf-8")
}

print(urllib.parse.unquote(urllib.request.urlopen(urllib.request.Request(url, data=urllib.parse.urlencode(data).encode("utf-8"))).read().decode("utf-8")))

测试结果:

依赖包

下载:

https://myblog-1256773370.cos.ap-guangzhou.myqcloud.com/opencv_numpy_hyperlpr.zip

总结

本文本文的主要作用,在开始的时候已经基本描述了,一方面说明了SCF可以做深度学习相关的预测工作,同时也进一步巩固了依赖的打包和与云API网关的结合使用,当然,这个接口如果经过完善可以和Iot等进行结合使用。当然,本文依旧是抛砖引玉,希望各位小伙伴们,自行探索:新世界!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本地测试
  • 打包上传
  • 编写函数
  • 对接API网关
  • 编写测试
  • 总结
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档