Перейти к содержимому
Compvision.ru

svoyak

Пользователи
  • Количество публикаций

    65
  • Зарегистрирован

  • Посещение

Все публикации пользователя svoyak

  1. Добрый день еще раз, подскажите плз как реализовать вычитание что-ли, не знаю как правильно назвать.. вот есть у меня найденные контуры, и я хочу получить из исходного изображения то, что эти контуры собсно ограничивают, остальное - выкинуть.. но вот не пойму с какой стороны к этому подойти.. Спасибо
  2. ооо..гугленье привело к тому, что я просто неправильно называл то, что мне нужно..правильно: opencv color segmentation, пошел читать дальше..
  3. Пересмотрел я много примеров по BlobDetection, к сожалению на мой взгляд они мне немного не подходят или я их не до конца понимаю. Все они вроде бы бинаризируют изображение перед детекцией, и получается, что цветовые различия теряются.. Т.е. если в указанном мною выше примере буквы будут также иметь разный цвет, но будут соединены - то blobdetection выдаст мне один единственный блоб с двумя буквами вместе, хотя в реале у каждой буквы свой цвет.
  4. Подскажите плз, вот есть такое понятие как BlobDetection, вроде бы я понял что оно позволяет выделить области одинакового цвета. Пользовался ктонить этим?? Я посмотрел несколько примеров, но там народ все равно перед пользованием CvBlobDetector перегоняет картинку в Gray, получается этот блобдетектор по оттенкам серого детектит? может у кого нить есть кусочек кода с ним? у меня иногда буквы идут разного цвета и отделить их по цвету от фона и друг от друга - было бы самое оно.Спасибо. пример во вложении
  5. Да,dilate + | erode тут поможет как раз линии становятся толстыми и пустоты внутри в процентном соотношении уменьшаются.. Вопрос в том как это будет влиять на изначально полностью черный шрифт.. или надо уметь отличать белый шрифт с черным контуром от просто черных букв, чтоб применять только к первым..
  6. Так,c сетью я разобрался..точней с результатами ее работы..как всегда ошибка в днк:-))(моём), я неправильно тренировочный файл делал, причем совсем немного, но фатально.. Есть вопрос еще вот такой... есть два типа шрифтов как их привести к чему-то общему, мне кажется если это сделать, то нейросети будет легче обучаться.. И еще, можно ли с помощью opencv сделать выделение как в фотошопе эффект "волшебная палочка"? В приложении типы шрифтов. 121143.bmp 125724.bmp т.е. получается что в одном шрифте символ грубо говоря белый с черной окантовкой, в другом просто весь черный.
  7. Хм.. а я вот не нормировал вовсе данные, как получились после всяких фильтров opencv, привел к одному размеру и сделал бинарные есно после этого в сеть. Надо нормировать?? я читал об этом, но к сожалению пример по которому я работал без нормирования был..
  8. Хм.. я так понимаю совместимость там подразумевается?? мне почему-то кажется что проблема не в инструменте, а в данных или их количестве.. как я уже сказал, тестовый пример работает отлично, притом что я перестроил его сеть...сейчас запустил 10000 итераций - закончит посмотрю на изменения..
  9. Подключил я Fann, сделал нейросеть но вот только какая странность, не дает она правильных результатов. У меня был проект для примера там делалась сеть (600,200,52)(картинка 25х24) - 4000 картинок символов ей скармливалось для тренировки - так вот этот проект я у себя построил, пересоздал сеть и проверил - все работает, возвращает массив в котором наибольшая вероятность соответствует индексу правильного элемента. Когда я в этот механизм загоняю свои данные: (8000, 2500,16)(картинка 80x100), 16 - я взял для тестов не весь алфавит. результат вообще непонятный почти везде стоят 1(100%), вероятность искомого отличается от 1,но ессно она меньше. Оговорюсь, что я скормил на обучение всего 30 картинок, но потом для теста я дал одну из них. Я считал, что сеть должна ее решить верно, так как картинка была в обучающей выборке, а сеть выдала какую-то непонятку. Собсно вопрос, где я неправильно думаю, может 8000 - это сильно много для входного слоя и мне нужно уменьшить размер картинок символов? может сеть не должна находить точно те данные, которые были в обучающей выборке если выборка такая маленькая? Спасибо Кстати, можно ли как-то контролировать успешность процесса обучения?? При вызове net.TrainOnFile(openFileDialog1.FileName, 100, 10, (float)0.0001); я так понял в параметрах можно задать кол-во итераций(100) , и нужную погрешность(0ю0001), но что если за это кол-во итераций погрешность не будет достигнута? можно также получать колбэк после итерации, но там нет текущих параметров погрешности.. Когда я запускал один из первых разов обучение, вроде бы мне в консоль выводилась информация о текущей итерации и достигнутой погрешности(хотя я колбэк тогда еще не вешал ), это похоже сам FANN выводил чтоли.. но вот беда, кудато эта фишка пропала.. и теперь я не вижу процесса.
  10. Скажите, а скелетизация, как-то повлияет на качество? я фильтрами вроде делаю буквы более менее ровными без разрывов, но надо сказать они такие слегка толстые получаются..в смысле линии их написания. Думаю делать из них скелетов, али нет..Спасибо.
  11. Так отлично, спасибо..есть направление для движения.. а по разделению символов есть какие-то умные пути?? Я понимаю что перебор окном возможно и пойдет, но как то это слегка топорно.. И если не тяжело скажите, зачем применяется ConnectedComponents даже если не сюда все равно интересно:-)
  12. Дело в том что шрифты разные могут быть, я конечно попробую tesseract, но еще мне хотелось сделать наконец что-нить с нейросетью:-)) помоему это неплохой вариант, ну..вскрытие покажет как говорится.. Скажите плз, а как лучше избавится от шума в виде мелких точек перед бинаризацией? Я так понимаю сейчас я от него избавляюсь большими порогами при бинаризации - за это как раз и плачу потом разорванными контурами букв.. Если б убрать мелочь до бинаризации - возможно ее получилось бы провести более лояльно?? Спасибо
  13. попробовать tesseract - для всего или для какой-то конкретной стадии? Про бинаризацию: вот такие у меня результаты: оригинал, обычная и адаптивная на обычной потом ессно контуры находит лучше, может это нормально и я хочу невозможного? Это код: CvInvoke.AdaptiveThreshold(m, bin_m, 255, AdaptiveThresholdType.MeanC, ThresholdType.BinaryInv, 3, 0); CvInvoke.Threshold(m, bin_m, 254, 255, ThresholdType.BinaryInv | ThresholdType.Otsu);
  14. Здравствуйте, подскажите в какую сторону смотреть, чтобы понять что передо мной кадр из мультфильма? Если более узко, то: на кадре изображено лицо, но это лицо может быть реального человека, а может быть какой-то персонаж из мультфильма.. и вот таких персонажей и нужно определить. Спасибо.
  15. По гистограммам почитал, но честно говоря так и не понял как это натянуть на задачу.. Интересен вариант " Сглаживаем->вычитаем(absdiff) из оригинала сглаженное-> суммируем и флиртуем по порогам с двух сторон ", я не понял смысл, но мне кажется что это близко к следующей мысли: 1 Преобразовать исходник S какой-либо функцией F получить результат R. 2. Функция F должна быть такая, что если исходник есть мультик(Cartoon) - результат вычитания(сравнения) R и S будет почти равно нулю, если же исходник фото, то результат преобразования и его вычитания/сравнения будет существенно отличаться от нуля. Ноль - это условная величина. Вот я и думаю какое такое преобразование применить и какую функцию сравнения потом.. Старался изложить мысль ясно, поправьте если где не прав и если можно присоветуйте искомые функции.. Спасибо:-)
  16. Если я правильно понял преобразованые Фурье кадры мультов не будут содержать высокочастотную составляющую?? потому что это как бы помехи а их в мульт кадрах практически нет. Верно? и еще вопрос, к примеру гистограммы я получу по цвету/насыщенности, но вот как их количественно сравнить? Спасибо
  17. Спасибо всем за ответы. Вижу несколько путей для проб и тестов. Как я понял для вышеуказанных действий нужен программный аппарат, который подразумевается во всех ответах, но я переспрошу потому как не уверен - это OpenCV? и если можно немного теории о том как тут применяются частоты(можно в виде линка или ключевых слов для гугела), я честно говоря новичек в этом деле. Спасибо
  18. Ну скажем так неправильные черты лица мне не обязательно отсеивать, а вот с морщинами и изъянами можно чуток подробней?? Как количественно выделить такие характеристики?? Я кстати вот смотрю на кадры из мультфильма и понимаю что они вроде бы как красочней что ли, количество различных оттенков и цветов в них наверно меньше чем на реальном фото, насыщенность другая, но вот не пойму как это все эти слова выразить количественно в алгоритме. Т.е. как бы визуально кадр мультфильма отличается от реального, но нужно правильно назвать чем, и как это что-то посчитать.
  19. Здравствуйте, вот и я пришел по работе к тому, чем хотел заняться еще в универе - распознавания лиц, :-) Googling привел к тому, что без opencv не обойтись, так как все строится или прямо на ней или с её использованием. Хотел задать пока что несколько общих вопросов, дабы уберечь себя от ошибок на глобальном уровне и неправильного выбора метода и средств в самом начале. Задача ставится так: на входе идут наборы лиц(фото) для человека, нужно ессно сделать их отбраковку(повернуто, маленькое и всякое такое) по оставшимся делать распознавание, т.е. для каждого чела будет несколько фото его лица, но может быть и одно. 1. Я использую с# - планирую использовать EmguCV? вроде как популярна и доки есть. 2. Я так понимаю, есть несколько подходов сделать задачу, отличающиеся как минимум точностью: PCA, AAS, AAM -если неправильно написал аббревиатуру - сорри, в голове большая каша пока. Я склонен выбрать PCA - как наиболее описанный в примерах и я его вроде немного понял в основном благодаря чтению местного форума(спасибо огромное) и видел рабочие примеры, хотя как я понял он наименее точный. С английским хоть и знаком но с этой темой раньше не сталкивался, посему тяжко. Из изучения PCA я понял что по мере работы системы будет накапливаться информация (тут я уже плаваю) о пространстве лиц чтоли, т.е. сначала происходит обучение а потом по мере работы ессно будут добавляться новые люди в связи с чем вопрос - саму информацию хранят в базах, да? Пространство лиц ведь должен обновляться и с течением времени вырастет до размеров, не помещающихся в ОЗУ. Если я тут чегото напутал плз поправьте. В моем случае речь идет о кол-во до 1млн людей, у каждого из которых может быть несколько фото. Можно ли задачу 1млн разбить на N задач поиска в множествах меньших чем начальное, ну т.е. не делать одно огромное пространство лиц(базу), а несколько небольших, и поисках запускать параллельно во всех и из полученных результатов выбрать наилучший, это в случае если требуется много ОЗУ. Если будет большая база, то в принципе можно хранить и обрабатывать ее на нескольких серверах - тут уже проблемы обработки с меня на sql лягут. Скажем так я плохо понимаю требования к памяти у этого метода, и опасаюсь что пойдя этим путем получу систему, обрабатываемый обьем которой упрется в ОЗУ. Еще кстати была мысль извлекать антропометрические точки из фото, вычислять их отношения и хранить полученные числа в базе, когда нужно было бы найти когото - то извлечь из искомого фото такие же точки и найти с какимито допусками в базе наиболее похожие. Но я чтото увидел что так не делают - плз расскажите что тут неправильного? Кстати вменяемого софта для получения точек не нашел, вроде бы openbiometrics говорит что умеет. Этот вопрос писался не сразу, поэтому есть добавления, все пытаюсь его правильно сформулировать..:-) Еще одна попытка.. Для распознавания к примеру 1млн лиц нужно иметь сразу весь лям для обучения?. Мне вот нужен механизм чтоб обрабатывал новые лица, т.е. сколько там вначале - неважно..пришло новое лицо, нет его в базе..значит добавить.. Вот вроде правильно сформулировал..а я переживаю, что для работы алгоритмов нужно изначальное обучение по всей базе.. так ли это?? Сорри, что намешано, но надо как то внести в голову просветление..:-)) Спасибо
  20. Здравствуйте, спасибо всем отвечавшим на мои вопросы, Openface как бы работает теперь мне нужно выбрать наилучший алгоритм/механизм для поиска в базе лиц(128 мерных векторов). Прежде всего хотел спросить, если я на этапе пре-обработки вычислю расстояние от центра ккординат, до каждой из известных(лежащих в базе) точек и сохраню его вместе с точкой, то верно ли будет уже на этапе поиска фильтровать базу по этому расстоянию(+- задаваемая погрешность). Т.е. я вычислю расстояние от центра до искомой точки и выберу из базы множество точек с похожими, таким образом сузив область поиска? Далее я написал выборку методов решения задачи поиска, но скажем так окончательное решение мне пока принять трудно в виду недостаточной образованности в этом вопросе. Возможно кто-нить сразу отсеет некоторые методы по причинам, которые я пока не вижу, или наоборот добавит чтото новое. 1. Линейный поиск, несмотря на тупость решения, у него есть свои плюсы: прогнозируемая скорость, отличная масштабируемость, простое распараллеливание и понятная реализация. Плюс нужен простой понятный метод для проверки более хитрых методов поиска. Я так понимаю здесь пользуется скалярное произведение векторов, как я понимаю ближайшие к сумме квадратов координат искомого и будут нашими. Это верно? Плюс решения на мой взгляд в том, что для поиска не используется никакая общая структура в памяти, и базу можно разбить на любое количество более мелких, каждую из которых будет считать свой нод.. Результаты потом слить вместе и отсортировать. 2.KD/VP деревья - распространенный и наверно самый упоминаемый алгоритм, суть в постепенном разбиении исходного множества на подмножества, организованные в виде дерева, разницу между ними я пока не понял, описана здесь https://ru.wikipedia.org/wiki/VP-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE в разделе преимущества, но что это значит хз.В этом случае для искомой точки по дереву быстро находится подмножество - а потом в нем уже деается линейный поиск. Отрицательные стороны - распараллеливание будет менее эффективно, сложный мат. аппарат. Но в целом это должно быть лучше всех. Не понятны расходы памяти, но ясно что есть наличие большой структуры в памяти(дерева) - как по мне минус для масштабируемости, все должно крутится на одной машине. 3. Есть еще способ типа триангуляции поверхности методом Вороного и еще какого товарища Делоне - но там по формуле расход памяти это количество точек в степени N/2 - т.е. очень много в моём случае, это если я правильно его понял, посему я его отложил в сторонку. 4. Есть отдельные статьи, про использование теории графов для кластерного анализа - разбиения на подмножества, не видел конкретных реализаций, и здесь не много не ясна теория: т.к. у нас фактически есть только вершины, а ребер нет - как это интерпретировать - хз, однако если придумать чем заменить отсутствие ребер - то совсем недавно внедрил алгоритм Louvain для кластеризации графа и он очень неплох - скорость веьсма приличная. Такой вот длиннопост вышел.. Поделитесь плз мыслями..Спасибо.:-)
  21. Добрый день.. смотрел ссылку выше.. чесно говоря почти ничего не понял, Если можно, хотя бы вкратце на абстрактном уровне, о чем статья и как она применима к моей ситуации..Понимаю что приведены зависимости для разных алгоритмов распознавания, плохо понимаю зависимости чего от чего и как это применить к сравнению разных алгоритмов. Спасибо.
  22. Добрый день! Наигрался я с Openface, должен сказать вещь очень неплохая, но вот встало попутно два вопроса, даже три:-) 1. Как оценивать расстояние между двумя лицами с точки зрения похожести?? К примеру >1 - 100% разные люди, <0.2 - 100% один человек, ну и что делать с тем что между 0.2 и 1? Кто-нить как-то решал такую задачу? 2. Вопрос вытекает из предыдущего, хотел сравнить с другими системами, например OxfordProject, но те выдают величину Confidence - типа процент уверености, чтоли.. как соотнести результаты работы этих двух систем? или как можно результат работы openface перевести в что-то типа такого процента уверенности?. Ну и последний вопрос, есть ли какие нить улучшайзеры в системе, что-нить поменять добавить и попробовать снова - а вдруг лучше будет? с общей работой разобрался, теперь нужно делать тюнинг:-)) если возможно. Спасибо.
  23. Да..тут уже похоже надо будет определяться с методами по мере возникновения трудностей, пока объем не вырастет, все будет ок а когда начнутся трудности(много похожих) - тогда нужно будет вводить дополнительные методы/условия.. ок. Спасибо.
  24. Да, я Вас понял, но если искать расстояния от каждого, то мне пока не ясно по какому параметру проиндексировать базу, чтобы поиск ускорился, так как входящее лицо может быть в любой точке пространства лиц, поэтому, чтобы как то сузить область поиска я и думаю выбрать сначала те у которых такое или похожее расстояние от начала координат, эти расстояния можно просчитать заранее и проиндексировать базу по ним, таким образом можно очень быстро отфильтровать большое количество.. Остаток уже возможно придется обрабатывать налету как раз вычислением ближайшего расстояния..хотя я думаю там тоже можно как то оптимизировать, чтоб не перебирать все, но пока не пойму как..
  25. Я понял..на одном и том же расстоянии могут находится очень много лиц.. Да.. расстояние можно использовать как условие, которое значительно сузит область поиска, т.е. из всей базы я выберу лица, находящиеся только на таком же расстоянии например от центра координат..+- заданная погрешность, а потом среди них уже нужно искать другими способами.. тут нужно подумать что больше похоже например на 3,3,3: 2,2,2 или 3,3,0.:-)
×