darknetpy принимает только путь к изображению и не предоставляет метод для передачи изображения как объекта.
Для достижения этой функциональности; вы можете клонировать репозиторий https://github.com/danielgatis/darknetpy и внести изменения.
Похоже, что функция detect () содержится в / src / lib.rs , это реализовано с использованием ржавчины .
fn detect(
&self,
img_path: String,
thresh: Option<f32>,
hier_thresh: Option<f32>,
nms: Option<f32>,
) -> PyObject {
// ... [HIDDEN]
let image = unsafe { load_image_color(CString::new(img_path).expect("invalid img_path").into_raw(), 0, 0) };
let sized = unsafe { letterbox_image(image, (*self.network).w, (*self.network).h) };
unsafe { network_predict(self.network, sized.data) };
let num_ptr = &mut 0 as *mut i32;
let boxes = unsafe {
get_network_boxes(
self.network,
image.w,
image.h,
thresh,
hier_thresh,
0 as *mut i32,
0,
num_ptr,
)
};
// ... [HIDDEN]
img_path преобразуется в изображение . После этого img_path больше не потребляется. Поэтому в пользовательском коде создайте новую функцию, которая либо обрабатывает преобразование изображения, либо передает изображение. Я считаю, что изображение является структурой https://nebgnahz.github.io/darknet-rs/darknet/ffi/struct.image.html
Для иллюстрации я создал метод, который передает изображение напрямую:
fn detect_image(
&self,
image: image,
thresh: Option<f32>,
hier_thresh: Option<f32>,
nms: Option<f32>,
) -> PyObject {
// ... [HIDDEN]
let sized = unsafe { letterbox_image(image, (*self.network).w, (*self.network).h) };
unsafe { network_predict(self.network, sized.data) };
let num_ptr = &mut 0 as *mut i32;
let boxes = unsafe {
get_network_boxes(
self.network,
image.w,
image.h,
thresh,
hier_thresh,
0 as *mut i32,
0,
num_ptr,
)
};
// ... [HIDDEN]
Также вы должен иметь возможность достичь тех же результатов с dar knet (не путать с darknetpy ). Более подробную информацию можно найти на https://github.com/pjreddie/darknet/issues/289