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

iskees

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

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

  • Посещение

  • Days Won

    19

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

  1. Если не нужны большие вычислительные ресурсы и вы пишете под винду(хотя там и линукс образы есть) то стоит посмотреть в сторону azure. Пишете asp.net приложение в которое можно встроить и саму обработку (opencv работает без проблем) и для развертывания нужно будет только загрузить пакет, настраивать ничего не надо. Если нужно что то специфическое то там есть обычный rdp доступ и ставьте туда что хотите. Да и цены ниже чем у амазона но нет действительно мощных машин.
  2. По работе иногда нужно создать классификатор и простые неройсети. Естественн решил сделать программку для автоматизации этого дела. Сейчас сделано: - функция автоматического создания SVM-HOG (берутся файлы позитивные и неготивные, считаются hog-дескрипторы, все это скрамливается svm light и вынимается готовый вектор для detectmultiscale. ну и простенький тест этого вектора) - Оболочка на FANN все используется обычное обучение с указанием параметров и т.п. но чего мне не хватало - возможность взять результат который был в середине обучение и обучение нейросети на частях выборки (что бы посмотреть как растет результат на тестовой выборке в зависимости от размера выборки обучения. В планах давить HAAR. Может кому пригодится. classifieropencv.codeplex.com новая версия был на странички загрузки внизу. исправил ошибку сейчас все положено кнопка download
  3. поиск людей, HOG

    Еще один момент, hog чувствителен к искажению jpeg'а и если нужно сохранять файл для дальнейшей обработки то лучше использовать bmp, а на камере(ip) выставить минимальное сжатие.
  4. если еще актуально и если выложите тут пару сотен фотографий то могу попробовать "покрутить" hog.
  5. В качестве эксперимента решил запустить распознавание номеров на Raspberry PI, весь код у меня на C# которого на малине мягко сказать нет. Путем перебора (с++ как бы то что нужно но "религия" не позволяет, питон это вообще не серьезно)остановился на java+javacv. Написал мааленькую тестовую программку для поиска номера которая в прицепе 60-70% находит и что приятно удивило запускается вообще без изменения как на винде так и на Raspberry (референсы только другие указать). А вот время печалит на винде с i5(2.8ггц в одно ядро разумеется) 8мс и на малине аж 160мс. Наверное есть какие то способы это ускорить но увы в яве не селен так-как вообще до вчера "в глаза ее не видел". Ну и собственно код, правда он жутко грязные так как вырван из "контекста" да и как уже сказал языка не знаю вообще public class main{ public static void main(String[] args) { BufferedImage img; try { img = ImageIO.read(new File("D:\\ScropionFoto\\машины\\1\\А011СС93 86-21 28 13.jpg") ); IplImage image= IplImage.createFrom(img); IplImage gray= cvCreateImage(new CvSize(image.width(),image.height()), image.depth(), 1); if (image.nChannels()>1) cvCvtColor (image, gray,CV_BGR2GRAY); else gray=image; SearchRectangle sar=new SearchRectangle(); ArrayList<CvRect> t=new ArrayList<CvRect>(); t.add(new CvRect(0,0,image.width(),image.height())); StopWatch w=new StopWatch(); w.start(); for(int j=0;j<1000;j++) { sar.Search(gray,t, 0, 40, 10, false); } w.stop(); for(int i=0;i<sar.CoordinatesRectangle.size();i++) { if (sar.CoordinatesRectangle.get(i).height()>0 && sar.CoordinatesRectangle.get(i).width()>image.width()*0.2 && sar.CoordinatesRectangle.get(i).width()<image.width()*0.5 && Math.abs(sar.CoordinatesRectangle.get(i).width()/sar.CoordinatesRectangle.get(i).height()-4.5)<1) cvDrawRect(image,new CvPoint( sar.CoordinatesRectangle.get(i).x(),sar.CoordinatesRectangle.get(i).y()) , new CvPoint( sar.CoordinatesRectangle.get(i).x()+ sar.CoordinatesRectangle.get(i).width(),sar.CoordinatesRectangle.get(i).y()+ sar.CoordinatesRectangle.get(i).height()) , cvScalar(0.0, 256.0, 0.0, 0.0) , 3, 0, 0); } for(; { cvShowImage( String.valueOf(w.getElapsedTime()/1000), image); if ((char)cvWaitKey(30)==27) break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public class SearchRectangle { public ArrayList<CvRect> CoordinatesRectangle; private IplImage OriginalImage; public void Search(IplImage image, ArrayList<CvRect> searchArea, int smotch, int up, int down, Boolean addon) { //////////////фигня CoordinatesRectangle = new ArrayList<CvRect>(); OriginalImage = image; for (int index = 0; index < searchArea.size(); index++) { CvRect r = searchArea.get(index); if ((OriginalImage.height() >= r.y()) & (OriginalImage.width() >= r.x())) { IplImage tsubimage; if ((r.width() < image.width() | r.height() < image.height())) { cvSetImageROI(image, r); tsubimage = cvCreateImage( new CvSize(r.width(), r.height()), image.depth(), image.nChannels()); cvCopy(image, tsubimage); } else tsubimage = image; double wkmin = Math.max(310.0 / image.width(), 0.4); double wkmax = Math.min(800.0 / image.width(), 1); IplImage subimage; double kw = 1; double kh = 1; if (addon) { CvSize sizeimage = new CvSize((int) (Math.round(tsubimage .width() * wkmin)), (int) (Math.round(tsubimage .height() * wkmin))); subimage = cvCreateImage(sizeimage, tsubimage.depth(), tsubimage.nChannels()); cvResize(tsubimage, subimage); kw = tsubimage.width() / (sizeimage.width() * 1.0); kh = tsubimage.height() / (sizeimage.height() * 1.0); if (image != tsubimage) cvReleaseImage(tsubimage); } else { if (wkmax < 0.9) { CvSize sizeimage = new CvSize( (int) (Math.round(tsubimage.width() * wkmax)), (int) (Math.round(tsubimage.height() * wkmax))); subimage = cvCreateImage(sizeimage, tsubimage.depth(), tsubimage.nChannels()); cvResize(tsubimage, subimage); kw = tsubimage.width() / (sizeimage.width() * 1.0); kh = tsubimage.height() / (sizeimage.height() * 1.0); if (image != tsubimage) cvReleaseImage(tsubimage); ; } else subimage = tsubimage; } IplImage smooth; if (smotch > 0) { smooth = cvCreateImage(new CvSize(subimage.width(), subimage.height()), subimage.depth(), subimage.nChannels()); cvSmooth(subimage, smooth, CV_GAUSSIAN, smotch); } else smooth = subimage; //////////сам поиск IplImage dst = cvCreateImage( new CvSize(smooth.width(), smooth.height()), smooth.depth(), smooth.nChannels()); cvCanny(smooth, dst, up, down, 3); CvMemStorage storage = CvMemStorage.create(); CvSeq contour = new CvSeq(null); cvFindContours(dst, storage, contour, Loader.sizeof(CvContour.class), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); dst.release(); while (contour != null && !contour.isNull()) { if (contour.elem_size() > 0) { CvBox2D box = cvMinAreaRect2(contour, null); if (Math.abs(box.angle()) < 30) CoordinatesRectangle.add(new CvRect(Math.round(box .center().x() - box.size().width() / 2), Math.round(box.center().y() - box.size().height() / 2), Math .round(box.size().width()), Math .round(box.size().height()))); contour = contour.h_next(); } }storage.release(); if (smooth != subimage) cvReleaseImage(smooth); if (image != subimage) cvReleaseImage(subimage); } } } } [/code]
  6. FindContours - поиск контуров
  7. Ну я не могу говорить про свою реализацию. А про чужую очень даже могу. Можно конечно пробовать на классификаторах, но я бы посоветовал попробовать Canny(или бинаризация) потом поиск контуров, отсеиваете те что не подходят по пропорциям и вуаля у вас номер. ну а потом сегментация и распознавание символов и эти два этапа самые сложные. https://arsocn.codeplex.com/ диплом с которого все начиналось какие то наметки там уже были
  8. Если вы iss пробовали то там точно с контрастом работают, работает быстро но цены кошмар. Делал программу по распознаванию номеров с нуля на opencv, не текущий момент в районе 200 комплексов(камера+комп) висят и активно нас штрафуют , а пока ее писал разумеется смотрел как работают другие программы. Собственно по этому и не могу рассказывать подробности реализации. А про лица, сейчас просто работаю над детекцией лиц с последующим ..., использую стандартный каскад который вполне справляется но если сделаете свой который будет лучше с радостью попробую.
  9. Если вы про поиск номер, то все что видел из реально используемого основывается или на текстуре(номер очень контрастный) либо на контуре. Если вам чисто для интереса то может стоит попробовать на лицах. В этом случае могу дать позитивные и отрицательные примеры (13000/12000) и если что то получится еще и по тестирую ваш каскад на реальных камерах.
  10. Я брал видео(кадры) с камеры проезжающих машин отмечал там номер(не руками), сам номер это положительный пример, а все что с каким-то погрешность с ним не совпадает это отрицательный. На первом этапе отрицательные выбираются случайно, обучается каскад, прогоняются фото все сработки не совпадающие с номером добавляются к отрицательным и так пока результат будет улучшатся(благо все это работает автоматически). Но толку в распознавании номера от этого мало так долго да и не точно.
  11. Распознавание лиц

    1. Сравнение геометрии лиц - в реальных условиях не работает 2.Сравнение признаков в районе точек- Пробовал ничего не вышло 3. выравнивание даже 2д дает ощутимый прирост 4. думаю имитация 3д реконструкции (в реальную по одной фото со случайного ракурса я не верю) с последующим lbp или еще что-то даст хороший результат.
  12. Ошибка первого рода

    Система распознавания лиц распознает случайные лица которые могут, а вернее чаще не находятся в базе она говорит не просто на кого похожи, а есть ли они(лица) вообще в базе и если есть то на какое больше похоже. С ошибкой второго рода все понятно,а вот ошибка первого рода что правильнее 1. число ложных сработок/число предъявляемых лиц или 2. число ложных сработок/(число предъявляемых лиц * число лиц в базе)
  13. Детектор моргания глаз.

    20-30fps на видеокарте ноутбочной (у меня 635m) реально, а десктоптой так вообще можно 100 выжать
  14. Детектор моргания глаз.

    В идеальных условиях найти глаза и определить закрыты они или нет задача тривиальная. Haar для лица потом haar глаз или asm и вырезанные квадраты области глаз перевести в дескриптор hog вполне справится и все это дело в svm.
  15. сотрудник яндекса читает лекции не совсем по CV, а про ML но тоже интересно www.youtube.com/watch?v=-UNKdZjsxg8
  16. Захват с нескольких камер

    Есть еще один аспект в работе с IP камера, в новых процах интел начиная с иви бридж кажется появилась технология intel quick sync-аппаратное декодирование видео, а с ip камер видео как раз нужно декодировать причем на лету. Разница между процессором с intel quick sync и без него огромная, без этой технологии проц просто на получении видео грузится на 30%,а с ней на 2-5%. Применительно к C# для работы с IP камерами я использую AForge, работает со всеми камерами, получение в отдельном потоке правда возвращает битмапы но opencv без проблем их коверетирует, возможно и на C++ он есть.
  17. я бы попробовал вырезать квадрат из центра руки, найти его hog дескриптор и его в нейросеть.
  18. малость не по теме но очень нужно. есть ли у кого база faret, а то у них сайт лежит?
  19. Детекторы

    для всего человека вполне сносно работает hog, особенно обученный под конкретную картинку. Плюс можно еще занизить порог,а потом профильтровать нейросетью сработки благо хог дескриптор не особо длинный. Ну или попробовать haar хотя он больше для лиц.
  20. странно сейчас скачал все нормально разметилось. Если не трудно опишите подробнее желательно еще фото приложить которую размечали.
  21. Наконец то руки дошли. В программе добавилась разметка фотографий(одна область на фото, результат в xml) и главное автоматическое создание HOG-SVM классификато), выбираем файл с размеченными фото, жмем кнопку, ждем и получаем вектор (случайно выбираются неготивные образцы, считается вектор потом он примнется и промахи добавляются к неготивными. и так пока ошибка не упадет). Видео примера
  22. HOG

    Пытался создать HOG-SVM классификатор но столкнулся с тем, что не получается обучить классификатор который был бы с ошибкой первого рода ниже 30%. Возник вопрос: есть ли метод или готовая программа оценки применимости того или иного классификатора, который(ая) по небольшому набору образцов дал(а) бы вероятность получения хорошего классификатора? Например на 10 фото выделяем объекты и получаем ответ что hog плох а haar вполне не плох.
  23. Нужна помощь- репетитор.

    вы бы видео записали которое нужно обрабатывать и выложили сюда. думаю общими усилиями это задача решится и абсолютно бесплатно
  24. Оптимизация кода

    не знаю как на вашем железе но вот у себя протестировал дефолтный поиск лица и глаз хааром. cpu core i5 3ГГц против gforce gt 635m. разница 20 раз. В использовании GPU есть такой момент: перегон в видеопамять изображение, инициализация вычисления все это относительно долго. Так что если вы банально вычитаете изображения то потери времени на все эти дела будет больше времени выигранном на самом параллельность вычислении. По этому у автора и результат такой противоречивый получился.
  25. Оптимизация кода

    даже если получится распаралелить на два ядра то раза в полтора ускорите, а на видухе будет раз в 10 быстрее.
×