Преобразование Python изображения PIL в массив NumPy очень медленно

1

Я оцениваю модель Tensorflow на открытых видеокадрах. Мне нужно изменить изображение входящего PIL в измененный массив numpy, чтобы я мог выполнить вывод на нем. Но я вижу, что преобразование изображения PIL в массив numpy происходит вокруг 900+ миллисекунд на моем ноутбуке с 16-гигабайтной памятью и процессором Intel Core i7 с тактовой частотой 2,6 ГГц. Мне нужно сделать это до нескольких миллисекунд, чтобы я мог обрабатывать несколько кадров в секунду на моей камере.

Может ли кто-нибудь предложить, как сделать метод ниже быстрее?

def load_image_into_numpy_array(pil_image):
    (im_width, im_height) = pil_image.size
    data = pil_image.getdata()

    data_array = np.array(data)

    return data_array.reshape((im_height, im_width, 3)).astype(np.uint8)

При дальнейшем np.array(data) я понял, что np.array(data) занимает большую часть времени... близко к 900+ миллисекундам. Поэтому преобразование данных изображения в массив numpy является реальным виновником.

  • 0
    На каком этапе вы получаете изображение PIL?
  • 0
    Я получаю PIL-изображение раньше и передаю его этой функции.
Показать ещё 2 комментария
Теги:
tensorflow
opencv
numpy
computer-vision

1 ответ

1
Лучший ответ

Вы можете просто позволить numpy обрабатывать преобразование вместо того, чтобы переделывать себя.

def pil_image_to_numpy_array(pil_image):
    return np.asarray(pil_image)  

Вы конвертируете изображение в формат (высота, ширина, канал). Это преобразование по умолчанию. Функция numpy.asarray выполняет на изображении PIL, поэтому явное переформатирование не должно быть необходимым.

  • 0
    Спасибо за решение. Изменение формы необходимо, чтобы я мог получить изображение в правильной форме для вывода ... Проверьте метод load_image_into_numpy_array в github.com/tensorflow/models/blob/master/research/…
  • 0
    Я не уверен, почему явное преобразование необходимо, вы конвертируете изображение в формат (высота, ширина, канал). Когда вы используете метод numpy по умолчанию для преобразования изображения PIL в массив numpy, вы уже получаете свой массив numpy (высота, ширина, канал). Извините, если я что-то здесь упускаю.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню