如果你对时间要求不是太高,c++调用模型,有很多模型无法调用,我们这里主要是讲一下如何把python生成可执行文件。
首先1:我们需要下载pyinstaller
下载方式很简单,pip conda都行
比较麻烦的方法是;
如果不能访问国外网络,去https://github.com/pyinstaller/pyinstaller下载pyinstaller
进入界面"Clone and download" “download zip”
//进入下载路径
F:
//进入子目录
cd F:\pyinstaller-develop\bootloader
//build the bootloader 运行
python ./waf configure build install
//重新进入根目录
cd F:\pyinstaller-develop
//安装pyinstaller
python setup.py install
//等待安装成功
安装成功
2:测试
//进入到name.py所在的文件夹
//pyinstaller -F name.py
//如
F:
cd F:\PYProject
pyinstaller -F inference_glass.py //测试模型文件
运行报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position
解决方案
在你打包的命令行中先输入chcp 65001
然后再输入打包命令。pyinstaller -F xxx.py
我的python程序inference_glass.py,导入训练好的模型,对十张图片进行测试。
# -*- coding: utf-8 -*-
import cv2
import tensorflow as tf
import numpy as np
path1 = "./1.jpg"
path2 = "./2.png"
path3 = "./3.png"
path4 = "./4.png"
path5 = "./5.png"
path6 = "./6.png"
path7 = "./7.jpg"
path8 = "./8.png"
path9 = "./9.png"
path10 = "./10.png"
path11 = "./11.png"
path12 = "./12.png"
face_dict = {1:'right',0:'low'}
w=100
h=100
c=3
def read_one_image(path):
print(path)
img = cv2.imread(path)
print(img)
img = cv2.resize(img,(w,h))
return np.asarray(img)
with tf.Session() as sess:
data = []
data1 = read_one_image(path1)
data2 = read_one_image(path2)
data3 = read_one_image(path3)
data4 = read_one_image(path4)
data5 = read_one_image(path5)
data6 = read_one_image(path6)
data7 = read_one_image(path7)
data8 = read_one_image(path8)
data9 = read_one_image(path9)
data10 = read_one_image(path10)
data11 = read_one_image(path11)
data12 = read_one_image(path12)
data.append(data1)
data.append(data2)
data.append(data3)
data.append(data4)
data.append(data5)
data.append(data6)
data.append(data7)
data.append(data8)
data.append(data9)
data.append(data10)
data.append(data11)
data.append(data12)
saver = tf.train.import_meta_graph('./1/model.ckpt.meta')
saver.restore(sess,tf.train.latest_checkpoint('./1/'))
graph = tf.get_default_graph()
x = graph.get_tensor_by_name("x:0")
feed_dict = {x:data}
logits = graph.get_tensor_by_name("logits_eval:0")
classification_result = sess.run(logits,feed_dict)
#打印出预测矩阵
print(classification_result)
#打印出预测矩阵每一行最大值的索引
#print(tf.argmax(classification_result,1).eval())
#根据索引通过字典对应人脸的分类
output = []
output = tf.argmax(classification_result,1).eval()
for i in range(len(output)):
print("No.",i+1,"face is belong to:"+face_dict[output[i]])
效果如下,启动时间比较慢,测试速度可以。
进入dist文件里面,里面就是exe文件,双击六六六,开始运行
又报错-,发现python代码里的模型文件和图片都是相对路径,需要改成绝对路径,或者复制到你的dist文件下;
直接点击exe文件就可以运行,看着生成的exe,真难看,想换成其它的,怎么做
找到一张图片,你自己喜欢的,可以是任何图像,百度搜索网上生成ico图标,把自己的图像生成为ico的格式,
然后执行pyinstaller -F -i xxx.ico xxx.py
点击以后发现先是出现命令界面,如果不想出来命令界面,需要
执行pyinstaller -F -i xxx.ico xxx.py -w