Comments 21
Извините.
В целом — статья годная. На досуге попробую вкурить opencv поподробнее.
Спасибо.
Кто-то захочет написать модуль для bitrix «корпоративный портал», чтобы решать описываемую мной проблему, кто-то использует owncloud вместо googledrive и хотел бы, чтобы происходило тегирование/сортировка по людям и т.д. Причин «зачем?» может быть сотни, не вижу смысла их все перечислять, просто включите фантазию. Именно поэтому я не очень понимаю ваш вопрос «зачем?».
Я хотел бы оставить в секрете основную причину по которой я это делал для себя. Всё чем я хотел поделиться — я рассказал в статье и не хотел бы отвечать на личные вопросы.
Натренировать сеть на нахождение своего лица и написать на php скрипт, который найдёт все фотки с тобой — очень быстро и просто.
Так себе бизнес-кейс, потому что если это реально задача «для себя», то никто бы не стал делать её на РНР, когда инструментарий для таких задач намного удобнее под Python или в крайнем случае C++.
Вы результаты опроса к статье смотрели? Большая часть php-разработчиков не знает python и при этом интересуется машинным обучением.
Если мне например нужно сделать ресайз картинки на php, то я не спешу выносить эту часть на python потому что там намного удобнее, меня и в php всё устраивает. Я уже молчу про то что «удобство» — абстрактное понятие и его не навязывают другим людям (кроме извечных споров «android vs ios»). Кому-то удобнее на python, кому-то на php, а кому-то и на matlab.
Кроме того, только один из всех примеров я нашёл в готовом виде на python. И в статье я писал, что на питоне ни то что неудобно написать пример с Facemark, там вообще нет к нему биндингов, все примеры только на c++, что показалось мне не очень удобно и я дописал биндинги для php.
Вы результаты опроса к статье смотрели?
я смотрел и варианты ответов подобраны так что бы объективного опроса не вышло.
Большая часть php-разработчиков не знает python
и не знают ничего о CV. по трудозатратам на обучение выучить синтаксис python не составляет труда. Более того, будет даже проще потому что намного больше примеров на том же python. Банально даже те что идут вместе с opencv.
и при этом интересуется машинным обучением.
"интересуется" — тут надо было уточнять что именно означает фраза интересуется. Читает статьи на хабре, и публикации на эту тему — это разные все же вещи. Или там запустить дэмку распознавания лиц которая идет в комплекте с opencv тоже не совсем точно степень вовлеченности характеризует.
Не так давно на одной конференции по AI выступали ребятки, которые просто реализовали выбор людей из списка на основе системы оценок (то есть просто чуть-чуть математики примитивной, никакого обучения) но это уже для многих выглядит как машин лернинг.
то я не спешу выносить эту часть на python
это делает nginx из коробки. Можно еще поставить imaginary. И только если вам уж совсем прям что-то другое надо можно изголяться и что-то писать на эту тему.
Проблема не в том что питон как язык лучше, проблема в экосистеме. Для php есть биндинги того же vips, вполне себе удобные, но если вам надо побыстрому SVM классификатор или с класстеризацией побаловаться + немного DSP — то под питон вы банально быстрее найдете готовые решения. И не просто готовые а качественные готовые решения.
«удобство» — абстрактное понятие
удобство, которое выражается в качестве экосистемы под выбранную задачу — не такое уж и абстрактное. Удобно это когда не надо писать код и просто берешь готовое. Особенно если твоя цель — побаловаться или поресерчить можно ли вообще сделать штуки. А так если вы вдруг захотите сделать сервис по типу фликера, с автоматическим распознованием людей на фото, opencv вам хватит только на начальную фазу ресерча. А потом придется пилить что-то более свое и низкоуровневое. Ну или там захотите вы написать новый маскарад — и окажется что opencv для этого не годится (медленно на мобилках).
там вообще нет к нему биндингов
вроде уже есть
Однако я опечален, что вы реально так думаете:
Вы результаты опроса к статье смотрели? я смотрел и варианты ответов подобраны так что бы объективного опроса не вышло.В каждой моей статье есть опрос и не один — это всё для того чтобы лучше понимать свою аудиторию, а не «подтасовывать результаты».
Большая часть php-разработчиков не знает pythonЕщё раз хотел бы написать, я просто предоставил инструмент и никому не навязываю его использование. Если кому-то покажется проще в работающий проект вставить кусок кода из примера и использовать свою предобученную модель, то кто я такой, чтобы осуждать этого человека.
и не знают ничего о CV. по трудозатратам на обучение выучить синтаксис python не составляет труда. Более того, будет даже проще потому что намного больше примеров на том же python. Банално даже те что идут вместе с opencv.
Лично мне такой вариант показался проще, потому что многие найденные библиотеки требовали много зависимостей: opencv, caffe/tensorflow/torch/mxnet, openblas, pandas, scipy, scikit и т.д. (а ещё с моей первой статьи вы наверное помните, что я не люблю лишние зависимости).
В 9 из 10 библиотек использовался opencv и мне было не совсем понятно, зачем библиотека тянет столько других библиотек, если было бы достаточно использовать только opencv. Но так кому-то удобнее. Numpy в большинстве случаев использовался для операций не сложнее доставания значения из массива по ключу.
Можно еще поставить imaginary.Зачем мне ставить imaginary если мне достаточно написать одну строчку?
$imagick->resizeImage
Я не заставляю вас так делать, если вам удобнее иначе, то пожалуйста.там вроде уже есть биндинги
Ну или там захотите вы написать новый маскарад — и окажется что opencv для этого не годится (медленно на мобилках).А вот это уже конструктив, большое спасибо за него.
Я читал эту статью про сравнение производительности и другую статью, после которых был убеждён, что opencv с предобученными моделями работает быстрее и потребляет при этом меньше памяти.
все познается в сравнении. Оно на самом деле не медленное, но для реалтайм обработки на мобилках этого не хватает и придется уже додумывать свои оптимизации поверх. А это требует большего контроля за алгоритмами.
так же есть коммерческие реализации все тех же алгоритмов которые на порядки быстрее, но…
Очень интересно. На практике заинтересовал метод увеличения фото с сохранением качества, вот это думаю многим было бы годно попробовать уже сейчас. Было бы классно даже оформить в отдельный сервис с методами resize и crop. По остальному практическое применение пока неясно. Спасибо.
Тк тут в примерах немного другие истории, тут по 4 фотки одного и того же человека было загружено.
У меня чисто практическая задача, есть новая фотка, надо ее сверить отдельно с каждой фоткой в базе и найти есть ли кто то сильно похожий, чтоб уже дальше человек смотрел.
Общался со знакомыми MLщиками как раз ровно в такой же контексте. Вот для музыки же есть AcoustID от MusicBrainz который использует Fingerprinter для звука. Почему же для фоток такого еще не сделали? Но их ответ был что так не получится т.к. нет надежного алгоритма как Fingerprinter расчитать. И даже похожее не найти, т.к. на фото люди сфотканы под разными углами, освещением, одежде.
Любопытно, что ответит @morozovsk . Ведь по идее тот же VK как-то находит, что "на этой фото изображены вы".
А вы автору статьи напишите в личку.
Мы с ним с год назад недорго договорились, и он нам на сервер поставил JS код который использует node.js, - на вход подаем 2 фотки на выходе цифра похожести.
Ну и модуль который просто все лица умеет с фотки вырезать и класть в папку как пачку файлов, чтоб понимать потом что он с чем сравнивал, если лиц более чем 1 на исходном фото.
От php он тут отказался, плохо шло развитие, а на JS все работает.
Компьютерное зрение и машинное обучение в PHP используя библиотеку opencv