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

iskees

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

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

  • Посещение

  • Days Won

    19

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

  1. кадр с видео выложите, а то гадание на кофейной гуще.
  2. caffe cpu

    Как соберете сами это дело под винду, то выложите сюда. Тоже интересно посмотреть, но заниматься геморроем со сборкой и прочим нет желания.
  3. Opencv 3.0 dll

    Спасибо, попробую. Тестирую производительность и столкнулся с одной странностью: sobel и canny на изображении 32F быстрее чем на U8 процентов на 50. Ощущение что операции с U8 матрицами вообще медленнее чем с 32F хотя логика подсказывает что должно быть наоборот.
  4. SVM light

    SVM-light Version V6.02 2 # kernel type 3 # kernel parameter -d 1 # kernel parameter -g 1 # kernel parameter -s 1 # kernel parameter -r empty# kernel parameter -u 11 # highest feature index 168015 # number of training documents 36580 # number of support vectors plus 1 0.52852846 # threshold b, each following line is a SV (starting with alpha*y) -0.49999999999727612 1:1 2:-0.97321862 3:0 4:0 5:0.31793973 6:38.749599 7:-1 8:1 9:1 10:1 11:90.104164 # 0.49999999999727612 1:1 2:-1 3:0 4:0 5:0.41736919 6:24.041599 7:-1 8:0.98609132 9:0.88873035 10:1 11:92.61364 # и так далее строки с цифрами на 4 метра
  5. Те кто сталкивался тот вам такое не раскажет, так как опенсорса нет, а коммерческие решения никто раскрывать ну будет. Если у вас известны координаты, то берете да распознаете символы и смотрите под какой шаблон один подходят.
  6. 1 простая бинаризаця по порогу 2 накалываемым все изображения друг на друга с шагом в пиксель и сравниваем пиксель в пиксель 3 если порядок снимком известен то сразу сшиваем 4 Если порядок случайный то ищем такую комбинацию в которой ошибка склейки минимальна число черных меток можно найти: 1 бинарзация -число контуров 2 бинаризация - контуры -считаем средний площадь контура- делим число черных пикселей на среднею площадь контура. Так можно устранить ошибок от склейки двух меток.
  7. OpenCv. Отображение видео

    Можно, создаете picturebox на форме переводите изображение из iplImage в bitmap var bitmap=image.ToBitmap(); и загоняете его в picturebox picturebox.image=bitmap; при обновлении кадра не забывайте уничтожать старый image и bitmap. Ну и разуется все это делается в потоке создавшем форму. Учтете что вывод картинки большого разрешения нагрузка на процессор сильно возрастает и лучше использовать уже directx.
  8. Если будите делать сравнение с другими алгоритмами, то было бы интересно просмотреть графики "fps/разрешение кадра" и насколько зависит качество отслеживания от разрешение видео.
  9. Самое очевидное - отслуживать мелкую мимику, на фото могут быть только аффинные изменения и все что связанно с освещением. И не так давно были публикации про определение пульса по веб камере, так вот у фото или даже 3д модели головы пульса не будет.
  10. Исходя из железа можно сразу исключить все варианты классификаторов. Так как основная черта искомого объекта это его мерцания, то логично что поиск надо производить не в статике а в динамике. Я бы попробовал следующее: 1 Найти оптический поток что бы нивелировать движение камеры и объектов на сцене (можно выделить в отдельный поток) 2 Ищем перепады яркости и цвета, в текущем и предыдущем кадре с учетом смещения из оптического потока (можно в качестве предыдущего кадра брать среднее значения за время полупериода мерцания). тут главное найти не все всплески пусть даже и с шумом. 3 Фильтруем полученные данные по критерию: период мерцания, линейность движения 5 Так как нормально отфильтровать можно ну хотя бы с лагом в 5 мерцания ( а требованиях лаг должен быть 2 периода) , то экстрополируем движения траекторию движения что бы предсказать положение объекта в текущем кадре. все кроме оптического потока железо точно потянет, хотя может и его уже ускорили.
  11. Парочку отгоняющих вопросов: 1. желаемое фпс 2 нужно находить точное положение светодиода в каждом кадре, или можно выдавать положение один раз в секунду например 3 когда светодиод не горит камера его нормально видит или нет 4 примерная производительность железа
  12. Bes видимо имел ввиду: если эта фотография взята с карт гугла или яндекса, то взять туже область в векторном виде (у гугла это "карта") и там уже все размечено. Ну, а вот так взять и автоматически разметить здания по фотографии с применимой ошибкой, мне кажется это не решаем задача.
  13. Группировка зданий из кучи.

    surf/sift сравнить все со всеми и разбить на группы по какому-то порогу, и выбрать вариант разбиение в котором суммарное(или еще как) среднеквадратичное отклонение по всем группам минимальное.
  14. Если не трудно выложите файл найтроек для украинских номеров
  15. Расшить панораму

    Есть сферические панорамы,нужно их "расшить" в набор изображение, так что бы каждый кусок был без искажения геометрии. В общем то-же делает просмотрщик таких панорам. В целом представляю как это делается, интересует может есть встроенная в opencv функция или пример хороший.
  16. Расшить панораму

    Ну да, только не один куб, а много пересекающихся для перекрытия мест близких к граням. Но я ищу готовое решение.
  17. заодно сфоткать обратные стороны кредиток, у купить билет в страну без выдачи
  18. Странности с SetROI

    В одном из врпаперов opencv (opencvsharp) есть такое: класс Iplimage public IplImage GetSubImage(CvRect rect) { if (rect.Width < 0) throw new ArgumentException(); if (rect.Height < 0) throw new ArgumentException(); if (rect.X + rect.Width >= this.Width) rect.Width = this.Width - rect.X - 1; if (rect.Y + rect.Height >= this.Height) rect.Height = this.Height - rect.Y - 1; if (rect.X < 0) { rect.Width += rect.X; rect.X = 0; } if (rect.Y < 0) { rect.Height += rect.Y; rect.Y = 0; } IplImage iplImage = new IplImage(rect.Size, this.Depth, this.NChannels); this.SetROI(rect); Cv.Copy((CvArr) this, (CvArr) iplImage); this.ResetROI(); return iplImage; } SetROI это [DllImport("opencv_core248", CallingConvention = CallingConvention.Cdecl)] public static extern void cvSetImageROI(IntPtr image, CvRect rect); а Cv.Copy это [DllImport("opencv_core248", CallingConvention = CallingConvention.Cdecl)] public static extern void cvCopy(IntPtr src, IntPtr dst, IntPtr mask); mask null Я никак не пойму почему там -1 и >=, зачем отрезаются крайняя строка и колонка if (rect.X + rect.Width >= this.Width) rect.Width = this.Width - rect.X - 1; if (rect.Y + rect.Height >= this.Height) rect.Height = this.Height - rect.Y - 1; Переписал это с > и без -1 но при вырезании если используется крайняя строка или колонка то там какие то там левые значения. Не пойму это или я где-то туплю, или какая-то ошибка в реализации cvCopy и cvSetImageROI к которым доступа нет.
  19. у меня такой <?xml version="1.0"?> <configuration> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> </configuration>
  20. В app.config делаем так <startup useLegacyV2RuntimeActivationPolicy="true">
  21. Vector[j + (i * Image.Height)] на ширину умножайте, а не на высоту и в bitmap GetPixel( x, y) в opencv наоборот
  22. Увы но Caffe на .net никак не представлен, самое приличное по скорости и наличию .net это fann. Если нужно распознать "скорость" то я бы 4ый шаг заменил на hog, по скорости он быстрый но зато боле устойчивый чем просто изображение, ну и полученный дескриптор в самою простою нейросеть. А несколько Haar-ов да еще в реалтайме (судя по задаче) тут уже серьезная видеокарты нужна будет. ссылка на рабочая Здесь еще сравнительная таблица есть: http://rodrigob.gith...ffic_signs.pdf
  23. Странности с SetROI

    Подставим сл. вариант: image размером 320 на 240 вырезаем квадрат left- 0 top-0 width-320 height-240, т.е. просто копируем if (rect.X + rect.Width >= this.Width) //0+320>=320 -true rect.Width = this.Width - rect.X - 1; // 320-0-1 В результате width будет 319 и height 239
  24. вообще не понятно о чем речь
  25. ваш код крашится на загрузке каскада так работает, и что то фиксирует но не очень хорошо: using System; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Imaging; using System.Windows.Threading; using Emgu.CV.Structure; using Emgu.CV; using System.Runtime.InteropServices; namespace WpfFaceDetectionTest { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { private Capture capture; private Emgu.CV.CascadeClassifier haarCascade; DispatcherTimer timer; public MainWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { capture = new Capture(); if (File.Exists("haarcascade_frontalface_alt_tree.xml")) haarCascade = new CascadeClassifier(@"haarcascade_frontalface_alt_tree.xml"); timer = new DispatcherTimer(); timer.Tick += new EventHandler(timer_Tick); timer.Interval = new TimeSpan(0, 0, 0, 0, 1); timer.Start(); } void timer_Tick(object sender, EventArgs e) { Image<Bgr,Byte> currentFrame = capture.QueryFrame(); if (currentFrame != null) { Image<Gray, Byte> grayFrame = currentFrame.Convert<Gray, Byte>(); var detectedFaces = haarCascade.DetectMultiScale(grayFrame,1.1,5,new System.Drawing.Size(20,20), System.Drawing.Size.Empty); foreach (var face in detectedFaces) currentFrame.Draw(face, new Bgr(0, double.MaxValue, 0), 3); image1.Source = ToBitmapSource(currentFrame); } } [DllImport("gdi32")] private static extern int DeleteObject(IntPtr o); public static BitmapSource ToBitmapSource(IImage image) { using (System.Drawing.Bitmap source = image.Bitmap) { IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( ptr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); DeleteObject(ptr); //release the HBitmap return bs; } } } }
×