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

iskees

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

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

  • Посещение

  • Days Won

    19

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


  1. Модель конечно странная, мало того что жутко избыточная так еще и цветная хотя примеры одноканальные.

    ошибки у вас при тестировании. В этом месте 

    # Преобразуем изображением в массив numpy
    x = image.img_to_array(img)
    x = 255 - x
    #Нормализуем изображение
    x = np.expand_dims(x, axis=0)

    вместо x=255-x это же инвертирование у вас там нужно делить на 255 что бы привести в диапазон 0-1

    x =x/255.0

    x = np.expand_dims(x, axis=0) это не нормализация а просто добавление одного изменения в массив 

    ну и loaded_model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) делать не нужно сеть же уже готовая

    import numpy as np
    from keras.preprocessing import image
    from keras.models import model_from_json
    
    json_file = open("D:\\neuro\\NS.json", "r")
    loaded_model_json = json_file.read()
    json_file.close()
    loaded_model = model_from_json(loaded_model_json)
    loaded_model.load_weights("D:\\neuro\\NS.h5")
    
    img_path = 'D:\\neuro\\test\\circle\\2986.png'
    img = image.load_img(img_path, target_size=(150, 150), grayscale=False)
    x = image.img_to_array(img)
    x =x/255.0
    x = np.expand_dims(x, axis=0)
    prediction = loaded_model.predict(x)
    if prediction<0.5:
        print('circle')
    else:
        print('square')
    
    img_path = 'D:\\neuro\\test\\square\\2976.png'
    img = image.load_img(img_path, target_size=(150, 150), grayscale=False)
    x = image.img_to_array(img)
    x =x/255.0
    x = np.expand_dims(x, axis=0)
    prediction = loaded_model.predict(x)
    if prediction<0.5:
        print('circle')
    else:
        print('square')

    вывод:

    circle
    square

     

    Да и число эпох сделал 10 и батчсайз 128 что бы не ждать "пол часа"


  2. судя по  

      svm.setKernel(SVM.RBF);

    у вас RBF функция, а HOGDescriptor принимает только линейную (https://docs.opencv.org/3.4.1/d5/d33/structcv_1_1HOGDescriptor.html). 

     

    virtual void cv::HOGDescriptor::setSVMDetector ( InputArray  _svmdetector )  
    virtual

    Sets coefficients for the linear SVM classifier.

    Ну и вызовите getDescriptorSize да сравните с размером вашего детектора.


  3. Вообще все книги на данную тему довольно однотипные, берите первую какую найдете. 

    Есть хороший курс для начинающих "Введение в компьютерное зрение и глубокое обучение", читаемого на факультете ВМК МГУ в весеннем семестре 2017 года. На ютубе лежит.


  4. Пo C# OpenCV и linux: принципиальных сложностей там нет, emgu есть в Xamarin версии и спокойно запускается на  Linux, Unix. Если проект написан только с использованием emgu, то ничего переписывать не придется.

    По в целом ANPR системам: на рынке(российском) есть несколько хороших продуктов, но все они рассчитаны  больше на корпоративных клиентов (основной заказчик госсектор). Для "частников" особо ничего нет, связано это частично  с высокой стоимостью и сложностью таких систем и частично с низким спросом.

    Под требования vash_sa (unix, русские номера, и железо типа малинки) вообще ничего нет, ни в виде сдк ни  в виде готовых продуктов. 

    В OpenSource нормального тоже ничего нет, есть много поделок типа: нашли номер соболем ( хааром, cnn) натравили на него tesseract и получили номер. Точность у них в лучшем случае 80-90%.  Что бы выйти на хоты бы 95%, нужно потратить очень много времени и ресурсов,  соответственно в отрытый доступ никто это не выложит. 


  5. CopyFromScreen это пример метода который "встроен" в C#, в питоне есть аналоги. 

    Можно вообще на заморачиватся, и взять vlc запустить там захват экрана и пустить все это в rtsp поток, который уже без проблем подхватит opencv. 


  6.  В opencv нет методов для захвата картинки с экрана, да и не должно их там быть. Используйте другие библиотеки или winapi(в том же C# из коробки есть метод CopyFromScreen), по скорости 10fps у вас точно будет, нужно будет больше потом перепишете это место. Проблемы у вас возникнут явно  не с этим.

    И подумайте 10 раз над выбором языка, с++ не самый просто язык.

    • Thanks 1

  7. Для начала глубокое знание теории не обязательно. Достаточно общего представления. Можете пройти курс на stepik.org потратив пару дней. 

    По практике: Используйте более высокоуровневые фреймворки типа  Keras (есть учебник с примерами на русском "библиотека Керас - инструмент глубокого обучения"). Там все довольно просто. 


  8. 1. количество примером чем больше тем лучше. Количество положительных и отрицательных должно быть примерно равным. 

    2. Положительный пример - это фотография где есть искомый объект. Т.е. это целая фотография, в которой указывается область где есть объект. Обрезать ничего не нужено.  Сам размер области и всей фотографии не важен. Но каскад у вас 20 на 20, т.е. квадрат и область желательно делать тоже квадратной. И да надо будет руками отмечать области.

    3. Отрицательный пример - это фонография где нет искомого объекта. ЕЕ размер тоже не важен.

    4. Качество телефона вполне хватит.

     

    • Like 1

  9. 1.  Покажите видео

    2. Уточните это вам нужно только для этого видео, или для целого класса подобных видео. Если класса, то какие они могут быть

    3. Требования к производительности и точности 

     

    Самое просто стройте гистограмму каждого видео по компоненте цвета, там где красный компонент усилится там ваш шарик появился.


  10. Если вы случайно обращаетесь к памяти то никакая архитектура не поможет.

    Ваш пример немного не понятен, вы хотите общую гистограмму всего изображение или скользящих окон.

    Для общей гистограммы, так там последовательное обращение будет внутри каждого потока, а результат в разделяемой памяти

    А для скользящего окна, если окно достаточно крупное можно использовать интегральное изображение (по одному на регистр) и на порядок сократить обращение к глобальной памяти.

    • Thanks 1

  11. Что то у вас рисунок явно не DetectMultiScale

    1. находим минимальный прямоугольник(со сторонами параллельными осям)  в который вписан ваш контур ( а в  DetectMultiScale у вас и так будет уже прямоугольник и делать ничего не надо )         var box = NativeMethods.imgproc_minAreaRect_Point(contours, contours.Length);

    2. Вырезаем image.SubMat(f)

     


  12. Была подобная задача, но не угол нужно было определить, а расстояние на плоскости пройденное объектом, но одно к другому сводится. Решалась так:

    1. задаем условно 4 точки на кадре 

    2. Замеряем чему эти точки соответствует на плоскости (или какому углу)

    3. рассчитываем коэффициенты для полинома второго порядка, решая систему уравнений

    4. получаем результат.

    Есть момент что чем ближе к краю кадра тем менее точно полином второго порядка соответствует реальным искажениям объективов. 


  13. В opencv декодируется видео с ip камеры силами самой opencv (3.1, ffmepg), через некоторое время число кадров выданное opencv и пришедших с камеры (перехват udp пакетов) начинает отличатся. Opencv пропускает кадры, собственно вопрос куда деваются кадры:

    1.  При  нехватки ресурсов кадр который пришел в момент когда еще не обработан предыдущий просто отбрасывается

    2. или они кэшируются и последовательность кадров не нарушается но возникает задержка


  14. minNeighbors. Число минимальных объектов найденных в данной области. Т.Е. на один знак(область изображения) может откликнутся сразу несколько окон (+- несколько пикселей в сторону, разный масштаб), если этих откликов меньше чем minNeighbors то область отбрасывается. При значении 0 будут возращены все  варианты (на один знак может быть несколько пересекающихся областей). Грубо говоря  чем больше это значение, тем более параноидальным будет поиск и тем чаще он будет пропускать объекты, считая, что это ложное срабатывание.

    • Like 1
×