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

Король

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

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

  • Посещение

  • Days Won

    5

Сообщения, опубликованные пользователем Король


  1. Делю изображение по 40 пикселей (это не важно по сколько, зеленого цвета вертикальные линии). Преобразую функцией Собеля изображение. Затем высчитываю разность соседних пикселей по горизонтали. Сглаживаю кривую (красный цвет). Затем высчитываю Максимумы (точки желтого цвета). Затем ищу, чтобы в линии было по 2 и более столбцов (считаю что это текст). Затем поиск минимумов этих максимумов (Блоки с текстом предполагаю - 2 изображение на видео). Как-то так! 

     

    1.jpg


  2. 17 часов назад, 2expres сказал:

    Добрый день! Заинтересовался темой распознавания автомобильных номеров. Пользовался вашей программой показывает на мой взгляд хорошие результаты. Чем отличается ваша бесплатная программа от коммерческого продукта? Сколько времени обрабатывается один кадр (какого разрешения и какой процессор) в коммерческом продукте? 

    Добрый день! Время обработки 500 мс и выше. Разрешение изображения 800х600 на Core-i3 х86. Если ты заметил он пробегает по всему файлу, чтобы постоить кривую. Переписывал на C++ эти функции. Обработка кадра существенно снизилась до 250 мс. Коммерческого продукта пока нет. Забраковали меня на работе. Пишу и развиваюсь для себя. Просто у нас на работе пока нет свой программы для видеонаблюдения - не разработали. Пользуемся сторонними, в особенноси "Интеллектом" - уж больно он "гибкий".


  3. Нашел один сайт, он даешь ему изображания, размечаешь и тренирует потом долго сам. Потом с помощью "экспорта" вынимаем файлы натренированные

    https://customvision.ai/

    проект на С# после тренировки сети -  https://github.com/daltskin/CustomVision-TensorFlow-CSharp


  4. Здравствуйте форумчане!

     

    Возник вопрос, как обучить Tensorflow на своих картинках на C#? Весь интернет перерыл ничего толкого не нашел. На питоне пытался обучить но там сталкнулся со сложностями, на import tensorflow выдает Exception (No module _pywrap_tensorflow_internal). У меня Windows 10. Хотя поставился tensorflow без проблем и прилагающие к ниму проги. Буду благодарен за код.


  5. Получилось частично. Выше все правильно написано. И потом работаете с Маt. Переписал проблемные участки кода, когда функция пробегает по всему изображению. Код увы не остался только библиотека. Затерялась.


  6. С нейросетью на много лучше вычисляет по клише букв и цифр. Вот статья - https://habr.com/post/143668/ тоже правда на C#. Я это внедрил и получил очень хороший результат. 

    С Линуксом правда не работал и не знаю что да как там. Но это пока. В планах у меня есть научиться под Линух программировать. Увы посоветовать не могу. Кстати тот код можно перевести на C++. Я пробовал Tesseract. Номер должен быть ровно в горизонтальном положении а это не всегда находиться правильно, даже в горизонтальном положении. Пробовал по вычислением моментов - результат тоже плохой.

    • Like 1

  7. Привет коллеги! Прошу помощи! Как написать собственную прошивку для камер Hikvision? Есть алгоритмы детектор огня, оставленных предметов, распознавание номеров, трекинг, автотрекинг. Хочу, чтобы эти алгоритмы работали в голове камеры и выдавали результат в виде текста на изображении, либо выделением области цветом. Как это сделать? Что почитать? Как нужно откомпилировать проект Opencv, чтобы его библиотеки тоже вошли в прошивку? Любой информации буду рад.


  8. В футболе мне понравилась идея двух а то и трех камер, которая считает статистику (сколько человек пробежал на поле, средняя и максимальная скорость). Но когда используешь в виде трансляции с множества камер, то цель распознания сама отпадает. 

     


  9. Вот нашел pdf http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.1029.5578&rep=rep1&type=pdf связанные со спортом

    Спортивная визуализация и статистика с помощью Kinect https://nccastaff.bournemouth.ac.uk/jmacey/MastersProjects/MSc13/19/thesis/MastersProjectFinalThesisSantosh.pdf

    Меня тоже заинтересовало Opencv в спорте 


  10. Для примера выложу свой код, как удалять не нужные блобы(Rectangle) правда пока написано только на C#. Сначало рекомендуется вычислить угол поворота изображения. А потом уже удалять прямоугольники. Функция GetRect удаляет не нужные прямоугольники за линией (зеленой).  IsPlate - проверяет гражданский ли автомобиль состоящий из 8 или 9 символов. Может быть поможет мой код.

    p.s.Функция CLAHE - очень помогла на плохо освещенных номерах и переосвещенных.

     public List<System.Drawing.Rectangle> GetRect(int i, List<System.Drawing.Rectangle> rec)
            {
                float sum = 0.0f;
                for (int ij = 0; ij < rec.Count; ij++)
                {
                    sum += rec[ij].Y + rec[ij].Height;
                }
                float sredY = sum / rec.Count;
                Plate.rotate2.Draw(new LineSegment2DF(new System.Drawing.PointF(0, sredY), new System.Drawing.PointF(Plate.rotate2.Width, sredY)), new Bgr(System.Drawing.Color.Green), 2);

                for (int kl = 0; kl < rec.Count; kl++)
                {
                    if (System.Math.Abs(sredY - (rec[kl].Y + rec[kl].Height)) > 8)
                    {
                        rec.Remove(rec[kl]);
                        
                    }
                }

                float sredX = 0.0f;
                for (int kl = 0; kl < rec.Count; kl++)
                {
                    sredX += rec[kl].Width;
                }
                sredX = sredX / rec.Count;

                for (int lp = 0; lp < rec.Count; lp++)
                {
                    if (System.Math.Abs(sredX - rec[lp].Width) > 10 && rec[lp].Height / rec[lp].Width < 1.5)
                    {
                        rec.Remove(rec[lp]);
                        
                    }
                }
                
                return rec;
            }

            bool IsPlate(int i, List<System.Drawing.Rectangle> rect)
            {
                float sum = 0.0f;
                for (int ij = 0; ij < rect.Count; ij++)
                {
                    sum += rect[ij].Y + rect[ij].Height;
                }
                float sredY = sum / rect.Count;

                int index = 0;
                for (int kl = 0; kl < rect.Count; kl++)
                {
                    if (System.Math.Abs(sredY - (rect[kl].Y + rect[kl].Height)) < 8)
                        index++;
                }

                float sredX = 0.0f;
                for (int kl = 0; kl < rect.Count; kl++)
                {
                    sredX += rect[kl].Width;
                }
                sredX = sredX / rect.Count;

                int index2 = 0;
                for (int lp = 0; lp < rect.Count; lp++)
                {
                    if (System.Math.Abs(sredX - rect[lp].Width) < 10)
                        index2++;
                }

                if ((index == 8 && index2 == 8) || (index == 9 && index2 == 9))
                    return true;
                return false;
            }

    0.jpg

    2.jpg

    3.jpg


  11. Решено

    ВОТ С++ проект

     

    #pragma once


    #ifndef ANPR_LIBRARY
    #define ANPR_EXPORT __declspec(dllimport)
    #else
    #define ANPR_EXPORT __declspec(dllexport)
    #endif


    #include <opencv.hpp>
    #include <cv.h>
    using namespace cv;

    extern "C"
    {
       ANPR_EXPORT int __stdcall ANPR_Recognize(BYTE* a, int W, int H);
    }

     

    BYTE* imageOriginal;
    IplImage* Original;

    ANPR_EXPORT int __stdcall ANPR_Recognize(BYTE* a, int W, int H)
    {
       imageOriginal = a;
        cv::Mat newImg = Mat(cvSize(W,H),CV_8UC3, a);
        
        Mat gray ;
        cvtColor(newImg,gray, CV_BGR2GRAY);
    }

     

    А вот код С#

    [DllImport("ANPR.dll")]
    static public extern int ANPR_Recognize(IntPtr image, int W, int H);
     

    public MainForm()
    {

                InitializeComponent();
                Image<Bgr, byte> image = new Image<Bgr, byte>("1.jpg");
                IntPtr array = image.MIplImage.imageData;
                
                int imag1 = ANPR_Recognize(array, image.Width, image.Height);

    }


  12. Добрый день!

    Решил переписать алгоритм распознавания автомобильных номеров с С# на С++ (чтобы функция работала быстрее) и столкнулся с проблемой (Opencv 2.4.10)

    Опишу проблему: есть описание функции на С++ в открытом доступе

     

    #pragma once


    #ifndef ANPR_LIBRARY
    #define ANPR_EXPORT __declspec(dllimport)
    #else
    #define ANPR_EXPORT __declspec(dllexport)
    #endif


    #include <opencv.hpp>
    #include <cv.h>
    using namespace cv;

    extern "C"
    {
       ANPR_EXPORT IplImage* __stdcall ANPR_Recognize(IplImage* image);
    }

     

     

    И эта функция экспортируется в С# проект.

     [DllImport("ANPR.dll")]
    static public extern MIplImage ANPR_Recognize( MIplImage image);

     

    И не хочет работать. Видимо параметры MIplImage нужно передавать как-то подругому. Подскажите в чем моя ошибка?


  13. Дальних нарушителей не ловит ни та ни другая программа. Скачал, запустил, сначало не пошло. Ошибка вылетала "MSVCP120.dll" Хорошо узнал где скачивать такие библиотеки   https://ru.dll-files.com/. А вот и само видео как и обещал.

     

    • Like 1

  14. Помогите(HELP) кто-нибудь может компильнуть Contrib  (Windows 7, x86, x64). Проект OPENCV 3.1 у меня даже не компилица - ругается.
     Это одна из многочисленных ошибок

    error C1083: Не удается открыть файл включение: opencl_kernels_calib3d.hpp: No such file or directory    c:\Opencv\3.1\opencv\sources\modules\calib3d\src\stereobm.cpp    51    1    opencv_calib3d

     


  15. 2 часа назад, Nuzhny сказал:

    Можешь показать список изображений (только имена), чтобы научиться его читать?

    Список это не важно (по текущей дате они складываются в папки) а так я могу переименовать в любой удобный формат с помощью TotalCommanderа. Начиная допустим 0001.jpg. Все теперь до понедельника. Все изображения на работе.

×