由于需要,需要部署到云服务器上一个应用,所以当前需要写一个后台程序,这样就可以实现,后台云服务器上运行AI程序,前端只需要request即可。测试demo如下,简单的发送一个指令,让服务器访问自己路径下方的xxxtxt然后返回打印输出。
前端程序如下:
import requests import json import base64 import os import cv2 import time from PIL import Image # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ] file_list =["D:/xxx.txt"]# [":/Users/Administrator/Desktop/img2/demo3.jpg"] files = "xxx.txt"#[("image", (open(item, "rb"))) for item in file_list] #image=cv2.imread(file_list[0]) # 指定检测方法为pyramidbox_lite_server_mask并发送post请求#华为云服务器 地址 url = "http://服务器IP:8000/predict/image/pyramidbox_lite_server_mask" sttime=time.time() r = requests.post(url=url, data=files) endtime=time.time() #results1 = eval(r.json())#test ai给的输出是dict可以转化为jason串读取。 print(r.text) print(endtime-sttime)
后台服务器注意事项:
1,后台云上需要更改安全策略上的 端口设置,因为防止和其他web 端口复用,我直接开了8000端口,需要新建安全组,
然后添加安全组,新增配置规则,
然后保存这个安全规则,这个服务器选择并启用这个新的规则,这时候外网才可以访问这个端口。当时我犯错误是我用netstat -
a(或者 netstat -apnt)看到如下示例,虽然8000端口处于listen状态,但是因为安全规则不放开,所以外网是不可访问的。
2,遇到的问题ip地址不对,尝试0.0.0.0不行,尝试127.0.0.1不行,尝试公网IP不行,最后发现利用了私有IP才行,。
3,端口尝试常用的web等端口,已经打开被占用,所以不能使用。
server地址:https://github.com/sdzzlover/cloudserver/tree/master
总结之:
1,socket的方式比较low,我们在私有云上部署应该可以了,像常用的TCPIP网站后台形式可能更有效率,后面需要学习下如何部署常用的网站后台模式和架构。另外webservice方式应该也不错,懂行的可以指点下。
2,实时性问题,网络延时是个大问题,与服务器和带宽有关,另外socket方式不知道多机共同访问时候的是不是会卡死或者延时过大,其他部署后台方式是不是更高效不会卡死。