Как стать автором
Обновить

Комментарии 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.

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

UPD: Теперь Apache 2.0

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

Просьба сделать лицензию попроще, пока вы единственный разработчик, по возможности: 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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации