【Yolov5】部署落地的实现踩坑过程

Yolov5部署过程中遇到的坑

  • 微信云托管
  • 腾讯云服务器
  • 其他容易忽略的配置
  • 证书的问题
  • 域名备案
  • 结果展示

背景:本项目旨在部署Yolov5这个算法,让其有一个简单的途径使用,比如微信小程序,APP,网站等,这里是计划在微信小程序与Web网页上进行部署

开发时需要的包有flask, gevent, 需要的软件docker(安装在服务器上)


微信云托管

笔者最初的想法是想要把Yolov5这个项目利用微信体系内的云托管功能,让其成为一个容易调用的服务,但是在尝试过程中遇到了很多问题。

  1. 首先官方文档提示,上传代码压缩包不能超过2M,但是模型本身的参数文件就以及超过这个数了,在实际操作过程中发现虽然违反了规定,但还是可以上传成功的。
  2. 其次就是当我把代码上传部署时,一直部署失败,但是界面没有报错的代码,反反复复折腾了半天,经排查发现是部署超时了,超过了10分钟,系统就会提示部署失败,到这里说明此路不通。

腾讯云服务器

首先就是准备需要的工具,买好云服务器后安装 Docker
, 用XShell远程连接等等,把代码上传后进行buildrun, build时有warningrun时则爆了error

  1. warning:
    第一个,WARNING: Running pip as the ‘root’ user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
    这个是说以root身份运行pip可能破坏系统包管理器权限破坏与行为冲突,建议我们换个虚拟环境,但是由于作者对docker不熟,不知道怎么处理,鉴于它是个warning,先放在一边。

  2. error:
    第一个,ImportError: libGL.so.1: cannot open shared object file: No such file or directory
    在执行编译好的镜像时,报了一个错,无法找到共享文件,网上的解释是缺了一个包,解决方法是要么

    apt update
    apt install libgl1-mesa-glx

    要么

    yum install mesa-libGL-devel

    但是因为centoOS版本的问题,在Dockerfile里面编写

    RUN yum install mesa-libGL-devel

    会导致无法识别yum命令,这个方法也没有什么用☹️。

    最后的解决方案是把requirements.txt文件里,依赖包中的opencv-python换为opencv-python-headless,成功解决问题。
    【Yolov5】部署落地的实现踩坑过程_第1张图片

其他容易忽略的配置

  1. 首先就是微信小程序会自动拦截外来的域名,我们需要在微信公众平添对我们访问的域名添加白名单。
  2. 在腾讯云购买了普通的云服务器后,需要在防火墙进行端口的配置,只有在安全组中的端口才能被访问到,否则也是会被拦截的,无法获得服务器上的服务。
    【Yolov5】部署落地的实现踩坑过程_第2张图片

证书的问题

经过上面的操作基本可以跑通了,但是小程序客户端要求TSL证书版本>=1.2,于是我还得去弄一个证书,真是一步一个坑,好在这次我知道是什么问题。
【Yolov5】部署落地的实现踩坑过程_第3张图片
证书需要放在服务器中,首先在自己的电脑上实验,当我把申请到的ssl证书从腾讯云下载下来,放到自己电脑的文件夹中,这样添加证书然后进行https请求时报了一堆的错误。

    server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, 
    			keyfile='ssl/****.key', certfile='ssl/****.crt')

error:
ssl.SSLError: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:1129)
2023-03-26T05:45:07Z failed with SSLError

这个报错是说证书未知,经过搜寻发现是因为证书颁发机构不可信,暂时找不到解决方案,当我直接把写好的代码放到服务器上,用docker生成镜像并运行后,发现服务可以正常使用了,不知道为什么会这样‍♂️。
【Yolov5】部署落地的实现踩坑过程_第4张图片
但是在edge浏览器上仍然是显示网站不可信。
【Yolov5】部署落地的实现踩坑过程_第5张图片
推测可能是因为域名的问题,申请证书时是和域名绑定的,而在本机上直接用IP访问,没有体现SSL证书和域名的关系,如果用域名访问部署好的服务就没有问题。
【Yolov5】部署落地的实现踩坑过程_第6张图片
如果使用公网IP访问,则edge这边会有提示,服务器也会报错
【Yolov5】部署落地的实现踩坑过程_第7张图片
【Yolov5】部署落地的实现踩坑过程_第8张图片

最后一步,在微信公众平台配置服务器域名。无语,最后还是要在工信部备案,还以为在腾讯云提交了申请就万事大吉了,原来那只是注册
【Yolov5】部署落地的实现踩坑过程_第9张图片

域名备案

备案的时候记得第一步就要选择与身份证上相对应的省份,而不要选择通信地址,博主就是应该开始选错了,导致后面需要上传居住证与暂住证,这些资料当然是没有的,结果全部流程又重新走了一遍。
【Yolov5】部署落地的实现踩坑过程_第10张图片
之后基本就是走流程,等待几个工作日,在此期间有腾讯云的工作人员向你打电话核实情况。等腾讯云将备案资料递交当局后,工业和信息化部会发一条短信过来,我们需要登陆相关网站进行短信验证。
【Yolov5】部署落地的实现踩坑过程_第11张图片

结果展示

域名备案还没好,可以先用自己的电脑作为服务器做做测试,可以看到微信小程序这边是没有问题的

【Yolov5】部署落地的实现踩坑过程_第12张图片 【Yolov5】部署落地的实现踩坑过程_第13张图片

再来看看网页这边,可以看到效果还是很不错的,再花点时间打磨一下就可以用了
【Yolov5】部署落地的实现踩坑过程_第14张图片

最后,在这个过程中参考了相当多的博客,其中的一些有:
https://www.51cto.com/article/705100.html 基本模板,漂亮的UI
https://blog.csdn.net/qq_44935078/article/details/126147175 灵感来源
https://blog.csdn.net/m0_51287945/article/details/128296976 Docker的下载与安装
https://blog.csdn.net/szylight2022/article/details/127786058 这个大赞,库不对的问题困扰了我很久
https://stackoverflow.com/questions/59117076/gevent-ssl-with-godaddy-error-ssl-sslerror-ssl-sslv3-alert-certificate-unkno IT问答,给出了如何添加SSL证书的解答

你可能感兴趣的:(pytorch,计算机视觉,人工智能,深度学习,python)