Pull to refresh

Comments 24

А что вы думаете о tensorflow.image? Понимаю, что это вообще другой (ближе к продакшну и, возможно, уже легаси) мир, но всё же.

Я особо не пользовался данным модулем в своих проектах, так как в основном работал на PyTorch. Но могу сказать, что аналогично OpenCV в нём написано много оптимизированных алгоритмов на C++, которые даже можно запускать на GPU. Это несомненно, плюс. Но в ней всё-равно ограниченный функционал, и она, подобно torchvision, больше заточена на DL задачи, тогда как OpenCV охватывает широкий спектр задач. Так что рано или поздно придётся прибегнуть к OpenCV. К тому же, для использования tensorflow.image нужно устанавливать Tensorflow, с которым зачастую случаются траблы с зависимостями и который плохо поддерживается.

Отличная затея. Один только вопрос: кто и как будет поддерживать этот проект? Пока что это чистый инди-проект с одним разработчиком:

Активность на гитхабе
Активность на гитхабе

Но цели амбициозны, здесь явно нужна команда и активный комьюнити...

Тут уже решать сообществу. Если встретит эту идею положительно, значит будут контрибьюты и единомышленники, с которыми можно допилить проект и заниматься поддержкой.

Какой смысл делать либу на либе? Это же придется каждый раз при обновлении cv2 переписывать cv3! Да и в общем зачем промежуточные слои если можно сразу написать свою реализацию cv2, исправив все недочёты? Или даже просто рефакторнуть все эти самые недочёты в оригинальной либе, в ней уже всё готово, и поддержка кода есть, и пользователи, все что надо для счастья!

А то понагородят своих решений, а потом приходишь, и экосистема - просто кладбище тысяч таких вот заброшенных либ, которые уже не запустить из-за обратной совместимости

В качестве mvp зайдёт, дальше, наверное, если будет спрос, можно будет переписать, обернув opencv без прослойки в виде cv2

Согласен, это как раз таки в планах, если найдутся единомышленники. Если бы начал переписывать cv2 с нуля, то эту статью увидели бы не скоро)

cv2 хоть и написан на Python как интерфейс к OpenCV, но он не избавился от "плюсовости". Это делает его низкоуровневым, но зато обратно совместимым. Отсюда и вытекают недочёты интерфейса, озвученные в этой статье, для решения которых и была написана эта обёртка. Поэтому я почти уверен, что и через 10 лет интерфейсные моменты opencv-python не изменятся, и текущая версия cv3 будет актуальной.

Почему я решил не котрибьютить напрямую в opencv-python я также написал в статье.

Я пока не видел подобных библиотек. Это решение призвано сделать UI/UX использования OpenCV лучше. Выбор за вами: пользоваться ей или нет.

Поскольку лицензия проекта
license='GNU General Public License v3.0'
то сам же автор обязан открыто опубликовать весь код всех своих проектов, где он эту либу использует. Работодатели или заказчики будут в восторге, несомненно.

Спасибо, что обратили внимание. Забыл везде заменить на MIT.

Раз уж это враппер известной библиотеки, лучше указать ровно ту же лицензию. Всем удобнее будет.

Библиотека крута!

Просьба сделать лицензию попроще, пока вы единственный разработчик, по возможности: MIT, BSD2, BSD3 или Apache

Это поможет увеличению использования вашего проекта.

Спасибо) По поводу лицензии: да, забыл везде обновить. Уже поправил

Сделал везде такой же, как у opencv-python: Apache 2.0

@retry

Ваш вопрос:

Избавление от жёсткой типизации

Что это значит?

Ответ:

В cv2 изображение всегда ожидается в uint8 формате, координаты и цвет обязательно целого типа и т.д. и т.п.

Мне кажется странным, что примеры применения библиотеки у вас идут с самого начала статьи, а установка её в самом конце

Как раз наоборот же. Сначала надо заинтересовать, показать "мотивационную часть" (примеры кода), а потом уже рассказывать о том, как устанавливать.

Будем надеяться, что проект найдет поддержку. :) Однозначно это очень удобная обертка. Насколько ж адекватней выглядит такой код для получения списка случайных фреймов. Без всяких этих отдельных set, read:

# читабельно
cap = cv3.VideoCapture(project_video_path)
total_frames = cap.frame_cnt
frame_indices = random.sample(range(total_frames), 10)
frames = [cap[i] for i in frame_indices]




# ну или еще более компактно, если кому-то так нравится
cap = cv3.VideoCapture(project_video_path)
frames = [cap[i] for i in random.sample(range(cap.frame_cnt), 10)]




# а теперь сравните с этой манной кашей
cap = cv2.VideoCapture(project_video_path)
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frame_indices = random.sample(range(total_frames), 10)
frames = []
for i in frame_indices:
        cap.set(cv2.CAP_PROP_POS_FRAMES, i)
        ret, frame = cap.read()
        frames.append(frame)

Выглядит и правду приятно. Некоторые велосипеды и сам похожие изобрел для рутины, те же обертки для видео IO с состоянием. Вопрос знающим людям вспомнился: set и cv2.CAP_PROP_POS_FRAMES - похоже, не очень надежно работает, кто-нибудь сталкивался с таким? Прочитал, что OpenCV использует ffmpeg, а тот какие-то страшные хаки для перемотки, в итоге так и не смог заставить работать на убунте то, что работало в windows...

где брать shape_predictor_68_face_landmarks.dat не сообщили. Надеюсь, я нашёл правильный, хоть и революционного 17го года

Хорошо получилось 👏🏻
По поводу Вашего вопроса: в example.ipynb в репозитории есть всё необходимое для запуска примеров, в том числе и скачивание shape_predictor_68_face_landmarks.dat

Sign up to leave a comment.

Articles