写在前面
1、环境这篇文章是基于PaddleX生成的DLL,使用python调用。也可调用其他的DLL,都是同理的。
- python使用3.7版本,高版本容易出问题。不想踩坑就选3.7
- 把用来推理的.py文件和DLL放在同一个目录下面(不易出错),模型和测试图像也复制过来。
import os
import cv2
import numpy as np
from ctypes import *
# 本程序的根路径
base_dir = os.path.dirname(__file__)
print(base_dir)
dll = cdll.LoadLibrary('model_infer.dll')
# 模型和权重,这里加载你自己的模型
model_path = os.path.join(base_dir, '..\..', "models/1/model.pdmodel")
params_path = os.path.join(base_dir, '..\..', "models/1/model.pdiparams")
cfg_path = os.path.join(base_dir, '..\..', "models/1/deploy.yaml")
# 测试图片,这里加载你自己的测试图片
image_path = os.path.join(base_dir, '..\..', "static/img/test.jpg")
# 首先 销毁模型
dll.DestructModel()
# 初始化模型
dll.InitModel("seg".encode(), # model_type: det, seg, clas, paddlex
model_path.encode(), # model_filename: Model file path
params_path.encode(), # params_filename: Parameter file path
cfg_path.encode(), # cfg_file: Configuration file path
c_bool(True), # use_gpu: Whether to use GPU
0, # gpu_id: Specify GPU x
"seg".encode()) # paddlex_model_type: det, seg, clas, paddlex
# 图像预处理
test_img = cv2.imread(image_path)
cv_img = cv2.resize(test_img, (512, 512), fx=0, fy=0, interpolation=cv2.INTER_LINEAR)
cv_img = np.transpose(cv_img, (2, 0, 1))
fake_input = np.asarray(cv_img)
# 输入图像
input = fake_input.ctypes.data_as(c_char_p)
# 定义输出结果变量,来接收输出结果
output = (c_char * 262144)()
pos = c_uint(0)
# 预测,调用C++的预测函数
dll.Seg_ModelPredict(input, 512, 512, 3, output, byref(pos))
print("结果:", pos.value)
# 销毁模型
dll.DestructModel()
3、运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)