背景
算法组在对摄像头进行算法实现是用的 Python 来进行的模拟实现,但 Python 在调用对应的库进行操作时出现了延迟过大的问题以及无法取到对应的数据导致业务逻辑无法实现,因此我这边编写了一个专门的 SDK 提供给算法组进行使用。这里主要是记录下 Python 如何调用DLL
实现
DLL 对外接口
#ifndef PY_CAPTURE_H_ #define PY_CAPTURE_H_
#define DLLEXPORT extern "C" __declspec(dllexport)
DLLEXPORT void init(int w, int h, char *name);
DLLEXPORT void start();
DLLEXPORT void stop();
DLLEXPORT unsigned char *get_frame();
DLLEXPORT void save_frame(const char *path);
#endif
|
Python 对接
import ctypes, cv2, os import numpy as np
os.add_dll_directory(r"D:\\") lib = ctypes.cdll.LoadLibrary(r"D:\SDK\CaptrueSdk.dll")
lib.init(1280, 720, b"UVC Camera")
lib.start()
lib.get_frame.restype = ctypes.POINTER(ctypes.c_uint16) pointer = lib.get_frame()
while True: pointer = lib.get_frame() _src = np.asarray(np.fromiter(pointer, dtype=np.uint16, count=1280 * 720)) src = _src.reshape((720, 1280)) lib.save_frame() img = cv2.cvtColor(((src / src.max()) * 255).astype(np.uint8), cv2.COLOR_GRAY2BGR) image = np.array(img) cv2.imshow("RAW", image) cv2.waitKey(1)
|