专栏首页Tencent Serverless 官方专栏SCF: “灰常”简单的车牌识别API制作
原创

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

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

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

本地测试

编写代码:

执行结果:

打包上传

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

建立文件夹并进入:

mkdir mytest && cd mytest

安装依赖:

安装opencv-python

sudo pip install opencv-python -t /home/dfounderliu/code/mytest

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

sudo pip install hyperlpr -t /home/dfounderliu/code/mytest

建立测试:

vim index.py

编写内容:

from hyperlpr import *
import cv2

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

zip -r index.zip .

云函数测试:

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

编写函数

# 导入包
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代码:

#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网关

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

编写测试

测试代码:

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等进行结合使用。当然,本文依旧是抛砖引玉,希望各位小伙伴们,自行探索:新世界!

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SCF-Python依赖小工具

    Hi,各位小伙伴,近期我也写过一个关于如何打包Python依赖的小文章:https://cloud.tencent.com/developer/article/...

    Dfounderliu
  • 为Python云函数打包依赖

    在使用无服务器云函数(SCF)的时候通常会遇到导入第三方库的时候,这个时候很多小伙伴就比较头疼:我如何打包进去呢?其实这里有几个方法可以尝试。

    Dfounderliu
  • 腾讯云API:无服务器函数

    无服务器函数是一个很好玩的东西,可以通过这个程序跑一些脚本,在一定程度上,是很方便的。但是作为新鲜事物,一般很难被大家接受,所以,我今天在这里,就做一个小例子,...

    Dfounderliu
  • 魔性派对游戏《马赛克别闹》即将登陆PSVR

    VRPinea
  • vue 开发常用工具及配置七:处理资源加载问题

    当 Vue Loader 编译单文件组件中的 <template> 块时,它也会将所有遇到的资源 URL 转换为 webpack 模块请求。

    李艺
  • vue 开发常用工具及配置七:处理资源加载问题

    当 Vue Loader 编译单文件组件中的 <template> 块时,它也会将所有遇到的资源 URL 转换为 webpack 模块请求。

    李艺
  • python 生成条形码

    py3study
  • 【时空序列预测第六篇】时空序列预测模型之EIDETIC 3D LSTM(结合3DConv与RNN)

    这是ICLR2019年的一篇paper,来自于清华的王同学与李飞飞实验室的合作paper。

    zhangqibot
  • CVE-2019-16097:Harbor任意管理员注册漏洞复现

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源D...

    PaperPen
  • SafeComp: 云计算完整性认证协议(CS CR)

    我们定义了一个由一些我们不一定信任的远程方执行的计算完整性认证问题。我们提出了一个称为 SafeComp 的多方交互协议,在指定的约束下解决了这个问题。与最接近...

    刘持诚

扫码关注云+社区

领取腾讯云代金券