Pull to refresh

Comments 21

Поправьте «Вообщем», пожалуйста. Нельзя так с моими глазами утром в понедельник.
Извините.

В целом — статья годная. На досуге попробую вкурить opencv поподробнее.
Спасибо.
Еще расскажите зачем вам распознавание образов на картинке из php :)
А почему собственно нет, это какая-то непосильная задача для php, что нужен другой язык разработки? Чем matlab или lua настолько лучше, что вы не допускаете даже возможности реализации подобной задачи на php? Мне казалось, что в задачах по машинному обучению от языка зависит только скорость исполнения, а качество работы — только от модели.
Акцент в моем вопросе был не на php, а на «зачем» :) имел в виду, зачем вообще вам нужно было распознавание образов? какой практический опыт работы из php
Если под «распознавание образов» вы имеете ввиду раздел статьи «Распознавание (узнавание) лиц на фото.», то мой ответ такой. Часто происходит когда на работе вываливают огромные объёмы фотографий с корпоратива или спортивного мероприятия, а я например там всего на десяти фото из тысячи. Натренировать сеть на нахождение своего лица и написать на php скрипт, который найдёт все фотки с тобой — очень быстро и просто. Но вообще у каждого могут быть разные задачи, которые можно решить таким образом.
Кто-то захочет написать модуль для bitrix «корпоративный портал», чтобы решать описываемую мной проблему, кто-то использует owncloud вместо googledrive и хотел бы, чтобы происходило тегирование/сортировка по людям и т.д. Причин «зачем?» может быть сотни, не вижу смысла их все перечислять, просто включите фантазию. Именно поэтому я не очень понимаю ваш вопрос «зачем?».
Я хотел бы оставить в секрете основную причину по которой я это делал для себя. Всё чем я хотел поделиться — я рассказал в статье и не хотел бы отвечать на личные вопросы.
Натренировать сеть на нахождение своего лица и написать на php скрипт, который найдёт все фотки с тобой — очень быстро и просто.

Так себе бизнес-кейс, потому что если это реально задача «для себя», то никто бы не стал делать её на РНР, когда инструментарий для таких задач намного удобнее под Python или в крайнем случае C++.
Вообще-то это был ответ на вопрос «зачем?». На вопрос «зачем на php» даже не знаю какой смысл отвечать.
Вы результаты опроса к статье смотрели? Большая часть 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 для этого не годится (медленно на мобилках).


там вообще нет к нему биндингов

вроде уже есть

Большое спасибо за развёрнутый ответ. Как я уже говорил выше, один из плюсов написания статей — это получение обратной связи от профессионалов. А от вас лично я получаю комментарии с моей самой первой статьи, т.е. уже почти 7 лет, за что большое спасибо.
Однако я опечален, что вы реально так думаете:
Вы результаты опроса к статье смотрели? я смотрел и варианты ответов подобраны так что бы объективного опроса не вышло.
В каждой моей статье есть опрос и не один — это всё для того чтобы лучше понимать свою аудиторию, а не «подтасовывать результаты».
Большая часть 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. По остальному практическое применение пока неясно. Спасибо.

Спасибо большое за статью! Интересуюсь данной темой, однако все как-то времени не хватало серьезно взяться за дело. После прочтения Вашей статьи получил «бафф вдохновение»! =)
Большое спасибо. Ваша статья мне как раз попалась в нужное время и в нужном месте. Пробую сейчас это использовать в медицине (интерпретация результатов ЭКГ, например). Посмотрим, что получится. Напишите что-то ещё. Родина вас не забудет!
Отличная статья. Большое спасибо). На вопрос «зачем?» — я обычно отвечаю — внутренний перфекционист против языкового зоопарка. С лицами достаточно много натренированных моделей, попадались ли Вам натренированные модели для автомобильных номеров?
Очень интересно. Хотелось бы еще примеры какие-нибудь. Как можно использовать это, например, в интернет-магазинах…
Подскажите, а можно ли скормить этой библиотеке 2 фото с лицами и получить на выходе вероятность того что на фото один и тот же человек в процентах?

Тк тут в примерах немного другие истории, тут по 4 фотки одного и того же человека было загружено.
У меня чисто практическая задача, есть новая фотка, надо ее сверить отдельно с каждой фоткой в базе и найти есть ли кто то сильно похожий, чтоб уже дальше человек смотрел.

Общался со знакомыми MLщиками как раз ровно в такой же контексте. Вот для музыки же есть AcoustID от MusicBrainz который использует Fingerprinter для звука. Почему же для фоток такого еще не сделали? Но их ответ был что так не получится т.к. нет надежного алгоритма как Fingerprinter расчитать. И даже похожее не найти, т.к. на фото люди сфотканы под разными углами, освещением, одежде.

Любопытно, что ответит @morozovsk . Ведь по идее тот же VK как-то находит, что "на этой фото изображены вы".

А вы автору статьи напишите в личку.
Мы с ним с год назад недорго договорились, и он нам на сервер поставил JS код который использует node.js, - на вход подаем 2 фотки на выходе цифра похожести.
Ну и модуль который просто все лица умеет с фотки вырезать и класть в папку как пачку файлов, чтоб понимать потом что он с чем сравнивал, если лиц более чем 1 на исходном фото.

От php он тут отказался, плохо шло развитие, а на JS все работает.

Sign up to leave a comment.

Articles