运行Inference.py
import argparse
import sys
import os
import struct
import socket
import torch
import torchvision
from BCNN_fc import BCNN_fc
import config
from PIL import Image
import tkinter as tk
from tkinter import filedialog
def main(filename):
parser = argparse.ArgumentParser(description='network_select')
parser.add_argument('--net_select',
dest='net_select',
default='BCNN_fc',
help='select which net to train/test.')
args = parser.parse_args()
# 配置GPU
device = torch.device('cpu')
#加载模型
if args.net_select == 'BCNN_fc':
net = BCNN_fc().to(device)
modelpath = os.path.join(config.PATH['model'],config.PATH['model_fc'])
net.load_state_dict(torch.load(modelpath, map_location='cpu'),
strict=False)
#设置图像转换参数
test_transforms = torchvision.transforms.Compose([
torchvision.transforms.Resize(size=448),
torchvision.transforms.RandomCrop(size=448),
torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(mean=(0.485, 0.456, 0.406),
std=(0.229, 0.224, 0.225))
])
#通过对话框指定图像文件
# Inference 提供/添加接口 诸如 setPictureFile
# imfile 由服务器端调用模型接口来进行修改
#读入图像,并转换为torch.cuda.FloatTensor
#imfile = os.path.join(config.PATH['cub200_test'], '001.biotite/biotite_0001.jpg')
imageRGB = Image.open(filename).convert('RGB')
image = test_transforms(imageRGB).unsqueeze(0)
imageTest=image.to(device, torch.float)#转换为与显卡相关的,cpu或者CUDA
#imageTest = imageTest.reshape([1, 3, 448, 448])
net.eval()
output = net(imageTest)
_, prediction = torch.max(output.data, 1)
# label = torch.autograd.Variable(image1)
la = prediction[0]
# 多项分支 (多选一)
if la == 0:
print("001.biotite")
elif la == 1:
print("002.bornite")
elif la == 2:
print("003.chrysocolla")
elif la == 3:
print("004.malachite")
elif la == 4:
print("005.muscovite")
elif la == 5:
print("006.pyrite")
elif la == 6:
print("007.quartz")
else:
print("快走吧脑弟,一会好赶不上二路汽车了7")
print(prediction)
if __name__ == '__main__':
main('test.jpg')
1、使用python3运行程序,发现报错,缺少pytorch环境
2、安装aconda环境(可以不装,这里没有用到)
(1)下载aconda
https://repo.anaconda.com/archive/index.html
(2)上传到服务器并安装
# 安装命令,一直按回车,安装过程需要同意将安装路径加入到环境变量的配置文件中。 source ~.bashrc使其生效。
bash Anaconda2-2019.07-Linux-x86_64.sh
3.安装pytorch环境
到pytorch官网下载对应版本的pytorch 即可
https://pytorch.org/
根据最后一行红色字体我们知道出现了MemoryError,根据字面意思我们可知此问题与内存有关。因为pip安装的缓存机制想要先把整个文件读取到内存以后才开始安装,因此可能导致内存不足。所以我们在安装时指示不启用缓存即可,可以使用 --no-cache-dir 命令
pip3 install --no-cache-dir torch==1.8.1+cpu torchvision==0.9.1+cpu torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
4.再次运行Inference.py
尝试直接安装tkinter,结果没有发现tkinter包
后查询资料得知:
tkinter其实是Python调用tcl程序的标准Python程序,可以通过这个interface调用tcl的程序,因为在大多数的unix系统中都内置了很多的tcl程序和命令。
Tcl 是“工具控制语言(Tool Command Language)”的缩写,其面向对象为otcl语言。Tk 是 Tcl“图形工具箱”的扩展,它提供各种标准的 GUI 接口项,以利于迅速进行高级应用程序开发。
于是,执行terminal 命令:sudo apt install python3-tk
再次运行Inference.py,正在下载vgg16的预训练模型,成功运行