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

Smorodov

Главные администраторы
  • Количество публикаций

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

  • Посещение

  • Days Won

    346

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


  1. Можно тут взять базовый пример: http://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html

    Только что то не сильно я верю, что это будут хорошо работать в данном случае, но попробовать можно.

    Посмотрите еще такой вариант: http://fox.ino.it/home/cosimo/public/ICIAP2013_CR.pdf 

    Ну и трекер здесь нужен.


  2. Можно на OpenCL программить была статейка на хабре: https://habrahabr.ru/post/269009/ .

    Сложный последовательный код тащить на FPGA не резон, ну а так, все что можно параллелить пойдет очень хорошо.


  3. Лучше не использовать старый интерфейс, используйте cv::Mat вместо IplImage и функции cv::Функция вместо CvФункция.

    Относительно доступа к пикселам посмотрите здесь:

     http://docs.opencv.org/2.4/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html

    Может еще это будет интересно:

     


  4. Последовательность простая:

    1) Детектировать лицо.

    2) Вырезать найденный фрагмент изображения с лицом.

    3) Масштабировать под заданный размер (128х128 например)

    4) Создать список меток, например 1 и 0

    5) Использовать распознавалку лиц. (самые простые это PCA и LDA  ) можете посмотреть еще OpenBR.

     

     

     

    • Like 1

  5. Камеры резервируют поток при подключении, а не при захвате кадра, и вышибают друг друга если потока не хватает.

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


  6. Скорее всего это связано с нехваткой пропускной способности порта.

    Камеры, как и цифровые колонки и микрофоны кстати, резервируют для себя определенной (довольно большой) ширины канал, поэтому обычно больше одной камеры на один usb-хост не вешают.

    Ну еще может быть питания не хватает, хотя это менее вероятно чем первое. 


  7. Вероятно открылась только одна камера.

    У VideoCapture есть метод isOpened, желательно бы его тоже проверять после открытия камер.

    Если не открываются, то надо проверять могут ли эти камеры вообще совместно работать.

     

    Нашел, кстати свой тест 3-х камер:

    #include "opencv2/highgui/highgui.hpp"
    #include <opencv2/objdetect/objdetect.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <iostream>
    #include <vector>
    #include <stdio.h>
    
    using namespace cv;
    using namespace std;
    
    int main(int ac, char** av) {
        VideoCapture capture0(0);
        VideoCapture capture1(1);
        VideoCapture capture2(2);
        if (!capture0.isOpened()) {
            cout << "Cam 0 failed to open." << endl;
            return 0;
        }
        if (!capture1.isOpened()) {
            cout << "Cam 1 failed to open." << endl;
            return 0;
        }
        if (!capture0.isOpened()) {
            cout << "Cam 2 failed to open." << endl;
            return 0;
        }
        namedWindow("Cam0");
        namedWindow("Cam1");
        namedWindow("Cam2");
        Mat frame0;
        Mat frame1;
        Mat frame2;
        int k = 0;
        while (k != 27) {
            capture0 >> frame0;
            capture1 >> frame1;
            capture2 >> frame2;
    
            if (!frame0.empty()) {
                imshow("Cam0", frame0);
            } else {
                cout << "frame from cam 0 empty" << endl;
            }
            if (!frame1.empty()) {
                imshow("Cam1", frame1);
            } else {
                cout << "frame from cam 1 empty" << endl;
            }
            if (!frame2.empty()) {
                imshow("Cam2", frame2);
            } else {
                cout << "frame from cam 2 empty" << endl;
            }
            k = waitKey(20);
        }
        return 0;
    }

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


  8. Ну тогда надо идти в отладчик и смотреть где падает, и что чему равно.

    Проверьте открылись ли камеры, открываются ли они по одной, не идут ли пустые кадры, в общем добавьте нормальную обвязку с обработкой ошибок.

    Нумерация камер у вас в системе вполне может вас удивить, попробуйте разные варианты.

    Я читал с трех камер и все было нормально.

    ЗЫ: Не нужно каждый раз звать waitKey, достаточно одного раза для обновления всех окон.

     


  9.  

    GTX1070 работает в TF с CUDA 8.0 на Ubuntu 16.04.

    Как ставил, если честно не помню уже, вроде проблем не было.

    TF особо не использую, тестил на немного модифицированном скрипте из примеров (добавил установку девайса):

     

    # Copyright 2015 The TensorFlow Authors. All Rights Reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    # ==============================================================================
    
    """A very simple MNIST classifier.
    
    See extensive documentation at
    http://tensorflow.org/tutorials/mnist/beginners/index.md
    """
    from __future__ import absolute_import
    from __future__ import division
    from __future__ import print_function
    
    # Import data
    from tensorflow.examples.tutorials.mnist import input_data
    
    import tensorflow as tf
    with tf.device('/gpu:0'):
      flags = tf.app.flags
      FLAGS = flags.FLAGS
      flags.DEFINE_string('data_dir', '/tmp/data/', 'Directory for storing data')
     
      mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
     
      sess = tf.InteractiveSession()
     
      # Create the model
      x = tf.placeholder(tf.float32, [None, 784])
      W = tf.Variable(tf.zeros([784, 10]))
      b = tf.Variable(tf.zeros([10]))
      y = tf.nn.softmax(tf.matmul(x, W) + b)
     
      # Define loss and optimizer
      y_ = tf.placeholder(tf.float32, [None, 10])
      cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
      train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
     
      # Train
      tf.initialize_all_variables().run()
      for i in range(1000):
        batch_xs, batch_ys = mnist.train.next_batch(100)
        train_step.run({x: batch_xs, y_: batch_ys})
     
      # Test trained model
      correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
      accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
      print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))
    
    

     

    Лог скрипта:

     

    I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so.8.0 locally
    I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcudnn.so.5 locally
    I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so.8.0 locally
    I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
    I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so.8.0 locally
    Extracting /tmp/data/train-images-idx3-ubyte.gz
    Extracting /tmp/data/train-labels-idx1-ubyte.gz
    Extracting /tmp/data/t10k-images-idx3-ubyte.gz
    Extracting /tmp/data/t10k-labels-idx1-ubyte.gz
    I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:925] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:118] Found device 0 with properties:
    name: GeForce GTX 1070
    major: 6 minor: 1 memoryClockRate (GHz) 1.683
    pciBusID 0000:01:00.0
    Total memory: 7.92GiB
    Free memory: 7.42GiB
    W tensorflow/stream_executor/cuda/cuda_driver.cc:572] creating context when one is currently active; existing: 0x2cc5c00
    I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:925] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:118] Found device 1 with properties:
    name: GeForce GTX 970
    major: 5 minor: 2 memoryClockRate (GHz) 1.2155
    pciBusID 0000:07:00.0
    Total memory: 3.94GiB
    Free memory: 3.88GiB
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:61] cannot enable peer access from device ordinal 0 to device ordinal 1
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:61] cannot enable peer access from device ordinal 1 to device ordinal 0
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:138] DMA: 0 1
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:148] 0:   Y N
    I tensorflow/core/common_runtime/gpu/gpu_init.cc:148] 1:   N Y
    I tensorflow/core/common_runtime/gpu/gpu_device.cc:867] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
    I tensorflow/core/common_runtime/gpu/gpu_device.cc:867] Creating TensorFlow device (/gpu:1) -> (device: 1, name: GeForce GTX 970, pci bus id: 0000:07:00.0)
    0.9169

     

    В configure вроде явно спрашивают про GPU.

    configure

     

    Еще наткнулся на похожие вопроы на SO: http://stackoverflow.com/questions/39817645/cuda-cudnn-installed-but-tensorflow-cant-use-the-gpu и http://stackoverflow.com/questions/38794497/tensorflow-bazel-0-3-0-build-cuda-8-0-gtx-1070-fails


  10. Ну это перебор конечно.

    50-200 нейронов в скрытом слое вполне хватит (по опыту), (в несколько раз больше кол-ва нейронов выходного слоя). И одного скрытого слоя вполне хватит.


  11. Нормально должна полносвязная работать.

    Не такая уж она и большая для данного случая.

    Только нормализацию данных предварительно проведите (вычесть среднее, привести к диапазону [0:1] или [-1:1] ).


  12. Ну не знаю, у меня по тому руководству на свежепоставленную ubuntu 16.04 все сразу установилось безо всяких манипуляций с FFMPEG.

    Для CUDA 8.0 пришлось поставить свежий thrust, а так все без проблем.

×