Search
Write a publication
Pull to refresh
136
0
Сергей @Lerg

Пользователь

Send message
Да, действительно, качественные сетевые камеры стоят намного дороже качественных аналоговых. В этом их минус.
Ещё вещать видео в сеть может ffserver.
Пожелание принято, переведу завтра.
А вот этот же алгоритм, но с учётом уже пустых строк, комментариев и c обработкой событий, когда значение переопределяется и когда не соблюдается вложенность. Также проверяется доступ к файлу.
Этим уже можно пользоваться.
def read_conf(filename):
    from os import access, R_OK
    if not access(filename, R_OK):
        raise IOError('Error: Cannot read the configuration file "' + filename + '".')
        return False
    d = {}
    with open(filename, 'r') as file:
        for linenumber, line in enumerate(file):
            line = line.strip()
            if not line or line[0] == '#' or line[0] == ';':
                continue
            line_sp = line.split('=',1)
            if not (len(line_sp) == 2 and line_sp[1]):
                raise IOError('Error: Cannot parse the configuration file "' + filename + '" at line ' + str(linenumber) + '.')
                return False
            key, value = line_sp
            t = d
            for subkey in key.strip().split('.'):
                if not t.has_key(subkey) or t[subkey].__class__.__name__ != 'dict':
                    t.update({subkey: {}})
                p = t
                t = t[subkey]
            if p[subkey]:
                if type(p[subkey]) != type(value):
                    raise IOError('Error: Cannot assign a value to a node in the configuration file "' + filename + '" at line ' + str(linenumber) + '.')
                    return False
                print 'Warning: Overriding previously defined value for key "' + key + '" at line ' + str(linenumber) + '.'
            p.update({subkey:value.strip()})
    return d

try:
    print read_conf('config.txt')
except IOError, error:
    print 'Failed to read the configuration file:'
    print error
За точку с запятой не ругать — просто не заметил её.
Я, как питонист, тоже не удержался решить эту задачу:
def read_conf(filename):
    d = {};
    with open(filename, 'r') as file:
        for line in file:
            key, value = line.split('=',1)
            t = d
            for subkey in key.strip().split('.'):
                if not t.has_key(subkey):
                    t.update({subkey: {}})
                    p = t
                t = t[subkey]
            p.update({subkey:value.strip()})
    return d

print read_conf('config.txt')


Учитывает пробелы между элементами.
При использовании ДКП, после квантинизации его коэффициентов у нас получается матрица, у который бОльшие элементы сосредоточены в верхнем левом углу, а нули в нижнем правом. Зигзаг позволяет ранжировать эти величины по убыванию, что положительно сказывается на дальнейшей обработке этих коэффициентов RLE алгоритмом.

ЗЫ: Почему-то мой комментарий не опубликовался, дублирую.
При использовании ДКП, после квантинизации его коэффициентов у нас получается матрица, у который бОльшие элементы сосредоточены в верхнем левом углу, а нули в нижнем правом. Зигзаг позволяет ранжировать эти величины по убыванию, что положительно сказывается на дальнейшей обработки этих коэффициентов RLE алгоритмом.
На собеседовании смело можно сначала описать решение в псевдокоде, главное чтобы подход был правильный.
Если с листка функция сразу заработает — это, конечно, громадный плюс, но не стоит отчаиваться если синтаксис забыт, можно списать на волнение и на ту же зависимость от разных кодхэлперов. Зачастую работодателям очень сложно найти толковых сотрудников, а если они видят, что человек соображает, то могут взять и с поблажкой на дообучение.
Выучить синтаксис — легко, научится мыслить — совсем другое.
Добавили бы ещё алгоритмы на основе вейвлет преобразований (JPEG2000).
Статья полезная, но несколько сумбурная.
Когда дочитал задание сразу про этот способ подумал. Прелесть интерпретируемых языков.
Возможно. Но несколько не так.
Алгоритм оперирует всего несколькими параметрами:
l = L*K / ( W/x — 1 + K ), которые описаны выше.

При изменении угла камеры будут меняться параметры L и K (и возможно W). Их динамически из картинки не посчитать. Остаётся их только закрепить. Но мы можем менять переменную x — она определяет расстояние от камеры до объекта. То есть, если решать обратную задачу, то мы оставляем объект неподвижным, а вместо этого двигаем камеру. На рисунке это движение из положения 1 в положение 2. Мой алгоритм ограничен только одной свободой перемещения, поэтому мы можем перемещать камеру только строго параллельно «линейке»:



В этом случае даже ничего не надо переписывать: программа честно покажет перемещение и скорость камеры, если объект слежения будет неподвижен.

Выбор объекта в кадре можно сделать автоматическим, воспользовавшись всё из того же примера lkdemo.py функцией cv.GoodFeaturesToTrack.

То о чем Вы говорите больше походит на определения всех трёх координат камеры, а это не то, на что расчитан данный алгоритм.
Такая задача называется Camera Motion Estimation, алгоритмы её решения можно найти в сети, вот например один такой документ:
A Robust Method for Camera Motion Estimation in
Movies Based on Optical Flow
.
Сама линейка нам не нужна, нам нужно только знать длину обозримой дороги и видить точку её середины.
Да, она самая. Но управлять ей очень тяжело, по bluetooth происходит приличная задержка сигнала.
Пожалуйста!
У меня ещё есть модуль для подключения к сетевым RTSP камерам, которые отдают картинку в Motion-JPEG, тоже могу написать статью, если кого-нибудь заинтересует.
Потомучто в этом случае OpenCV был бы центральной фигурой, а так программа может работать и без него, выключив слежение. Да и просто через v4l2 было интереснее, этим самым я предоставил возможность захвата изображений не операясь на довольно тяжелую библиотеку. OpenCV использует ffmpeg, ffmpeg использует API video4linux2, я просто не стал использовать посредников.
12 ...
70

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity