Я хочу написать скрипт на python, который использует файл darknet.py, который поставляется с https://github.com/pjreddie/darknet.
В файле darknet.py есть объект Image, определенный следующим образом:
class IMAGE(Structure):
_fields_ = [("w", c_int),
("h", c_int),
("c", c_int),
("data", POINTER(c_float))]
, который он использует в динамической библиотеке:
lib = CDLL("./libdarknet.so", RTLD_GLOBAL)
Я загружаю изображение из opencv примерно так:
import cv2
image = cv2.imread(src)
Теперь мне нужно преобразовать из массива numpy (в uint8's) что opencv дает мне объект Image, который может использовать darknet.
Вот что я попробовал:
import darknet as dn
import ctypes
dnim = dn.IMAGE()
(dnim.h,dnim.w,dnim.c) = image.shape
#dnim.data = (image.astype(np.float64)/255).flatten().ctypes.data_as(ctypes.POINTER(ctypes.c_float))
#dnim.data.content = dn.c_array( ctypes.c_float, image.astype(np.float64)/255 )
Часть image.shape, кажется, работает как положено.Комментируемые строки - это две разные попытки загрузки элемента данных dn.IMAGE ().Первый вызывает ошибку сегментации, а второй вызывает ошибку: TypeError: only size-1 arrays can be converted to Python scalars
Я знаю, что dnim.data (при загрузке с использованием функции load_image ()) и объект, созданный в первой попытке, похожитипы, в частности: <__main__.LP_c_float object at 0xXXXXXXXXXXXX>
но я думаю, я не могу просто назначить один другому?