1 | from data import aclass |
data是当前目录下的文件夹
aclass 在data文件夹里的__init__.py文件里
__init__.py的作用是可以看作是aclass文件夹的基本/默认py文件,有它就可以把data文件夹看作一个py文件。
另一个好处是,在__init__.py使用from .aae import bb,这样就把data文件夹下的所有类聚合到一起了。
1 | from data import aclass |
data是当前目录下的文件夹
aclass 在data文件夹里的__init__.py文件里
__init__.py的作用是可以看作是aclass文件夹的基本/默认py文件,有它就可以把data文件夹看作一个py文件。
另一个好处是,在__init__.py使用from .aae import bb,这样就把data文件夹下的所有类聚合到一起了。
使用捷径社区安装快捷指令时,跳转后无法安装,设置中开关是灰色的,其实只要打开快捷指令随便运行一个,就可以输入密码设置打开安装不受信任快捷指令功能了。
1 | checkpoint = torch.load("checkpoint.pth", map_location=torch.device('cpu')) |
“ 你数学那么好 你知道一万年是多久吗 ”
“ 就一万年啊 ”
“ 错 ”
“ 一万年就是当有一个人跟你说 他想当正常人 然后离开了你 从那一天开始之后的每一天 就是一万年 ”
1 | sudo su |
tornado h5跨域会报一种XMLHttpRequest错误,错误代码405。
即使在tornado里设置了跨域,依然报错,这是因为h5跨域请求时要先发一个options请求,需要在Handler里处理一下options请求,具体代码如下: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
27class BaseHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header('Access-Control-Allow-Origin', '*')
self.set_header('Access-Control-Allow-Headers', '*')
self.set_header('Access-Control-Max-Age', 1000)
self.set_header("Content-Type", "application/json; charset=UTF-8")
self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
self.set_header('Access-Control-Allow-Headers',
'authorization, Authorization, Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers, X-Requested-By, Access-Control-Allow-Methods')
class MainHandler(BaseHandler):
async def post(self):
# 接收到图片的base64字符串
jsonbyte = self.request.body.decode('utf8')
jsondict = json.loads(jsonbyte)
picdata = re.sub('^data:image/.+;base64,', '', jsondict["pic"]+"==")
r.sadd("palm",picdata)
# 将图片转换成PIL读取的图片矩阵
binary_data = base64.b64decode(picdata)
img_data = BytesIO(binary_data)
imgtmp = Image.open(img_data).convert("RGB")
res = await predictHandler(imgtmp)
self.finish(res)#finish方法也是调用的write方法
async def options(self):
self.finish()
options方式请求只要通了就行,options请求之后就是正常的post请求了。
有些图片打开了不是三通道,会导致输入数据维度不匹配,最好加一个转换,已经是RGB的就不会转换,因此也不影响速度。1
imgtmp = Image.open(img_data).convert("RGB")
在Dockerfile中这么写:1
2
3
4
5
6
7FROM face_pytorch:latest
WORKDIR /face_version1
EXPOSE 5015
CMD ["sh","auto.sh"]
在auto.sh中设置多个要执行的命令,如启动redis、运行程序、定期保存文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15nohup ./redis-5.0.5/src/redis-server > myredis.txt 2>&1 &
echo "nohup redis-server complete!"
nohup python palm_re_v3.py > mypalmpy.txt 2>&1 &
echo "nohup python palm_re_v3.py complete!"
thetime=$(date "+%H%M") # the time is UTC0 not UTC8
while true
do
thetime=$(date "+%M")
if [ $thetime = '00' ]
then
echo "save pics every hour"
python save_palm_pics.py
fi
done
测试在cpu下一次预测一个图片和一次预测两个消耗时间的对比。
实验中有两个模型,也就是说每个预测里面预测了两次。
实验部分代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24async def predictHandler3():
global pic_dict,pic_dict_res
keylist = list(pic_dict.keys())
keylist2=list(pic_dict.keys())*2
print("keylist",keylist)
print("keylist2",keylist2)
time1 = time.time()
img = [transform(pic_dict[_]).numpy().tolist() for _ in keylist]
img = torch.FloatTensor(img).cpu()
with torch.no_grad():
outputs1 = palmmodel(img)
outputs2 = handmodel(img)
time2 = time.time()
print(time2-time1)
time3 = time.time()
img = [transform(pic_dict[_]).numpy().tolist() for _ in keylist2]
img = torch.FloatTensor(img).cpu()
with torch.no_grad():
outputs1 = palmmodel(img)
outputs2 = handmodel(img)
time4 = time.time()
print(time4-time3)
然而在gpu上则快非常多。