【python】调用DLL (基于PaddleX部署生成的dll)

【python】调用DLL (基于PaddleX部署生成的dll),第1张

写在前面

这篇文章是基于PaddleX生成的DLL,使用python调用。也可调用其他的DLL,都是同理的。

1、环境
  • python使用3.7版本,高版本容易出问题。不想踩坑就选3.7
  • 把用来推理的.py文件和DLL放在同一个目录下面(不易出错),模型和测试图像也复制过来。
2、源码
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、运行结果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/714251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存