python调用c++动态库(2)
在上一个博客里,已经实现了python需要调用的c++动态库
接下来我将实现用python的ctypes,调用c++动态库
导入python的必要库
import ctypes
import cv2
import os
from time import sleep
os.environ["CUDA_VISIBLE_DEVICES"]="0"
from ctypes import *
使用ctypes调用动态库
ll = ctypes.cdll.LoadLibrary
so = ll("./libcppde.so.1.0.0")
这里对你需要调用c++动态库里的函数指定参数输入类型和输出类型,参数类型名与C++, C里的也有不同,具体如下:
ctypes type |
C type |
Python type |
c_bool |
_Bool |
bool (*) |
c_char |
char |
1-character string |
c_wchar |
wchar_t |
1-character unicode string |
c_byte |
char |
int/long |
c_ubyte |
unsigned char |
int/long |
c_short |
short |
int/long |
c_ushort |
unsigned short |
int/long |
c_int |
int |
int/long |
c_uint |
unsigned int |
int/long |
c_long |
long |
int/long |
c_ulong |
unsigned long |
int/long |
c_longlong |
__int64 or long long |
int/long |
c_ulonglong |
unsigned __int64 or unsigned long long |
int/long |
c_float |
float |
float |
c_double |
double |
float |
c_longdouble |
long double |
float |
c_char_p |
char * (NUL terminated) |
string or None |
c_wchar_p |
wchar_t * (NUL terminated) |
unicode or None |
c_void_p |
void * |
int/long or None |
例如C++里的loadModel输入是两个string型的参数文件,这里对应的就是两个c_char_p,具体代码如下:
so.loadModel.argtypes = [c_char_p, c_char_p]
so.detectToJson.argtypes = [c_float, c_int, c_int, POINTER(c_ubyte), c_char_p]
so.detectToJson.restype = c_char_p
model_file = "/home/czy/Documents/CPPDE0.2/cppde/cfg/deploy.prototxt"
weights_file = "/home/czy/Documents/CPPDE0.2/cppde/weights/VisDrone_refinedet_vgg16_512x512_iter_55000.caffemodel"
so.loadModel(model_file, weights_file)
#so.release()
img_id = "1111"
img = cv2.imread("./0001.png")
(rows, cols) = (img.shape[0], img.shape[1])
result = so.detectToJson(0.45, rows, cols, img.ctypes.data_as(POINTER(c_ubyte)), img_id)
print result
while True:
sleep(5000)
检查代码无误后,运行代码成功如图:
- linux下python调用C++动态库以及库函数
- python中调用C++写的动态库
- python 调用C++动态库所遇到的undefined symbol ***
- python中调用C++写的动态库
- python调用c++动态库练习
- python中调用C++写的动态库
- python中调用C++写的动态库
- python中调用C++写的动态库
- lua 调用C++动态库
- 关于C++调用Python
- centos7下使用swig扩展python接口来调用c++ 实现声纹识别
- Python调用C++DLL函数出错String类型问题
- Python调用C/C++程序
- python调用C动态库导出函数的返回值为指针类型时,在64位python环境下被截断解决方法
- C++ 动态库创建与调用
- C++多线程中调用python api函数
- 讲述C++中调用Python脚本
- PY++ 自动将你的C++程序接口封装供python调用
- node ffi调用C、C++动态库出现的问题
- C++调用python:无参数,简单helloworld示例