А вот этот же алгоритм, но с учётом уже пустых строк, комментариев и 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 алгоритмом.
На собеседовании смело можно сначала описать решение в псевдокоде, главное чтобы подход был правильный.
Если с листка функция сразу заработает — это, конечно, громадный плюс, но не стоит отчаиваться если синтаксис забыт, можно списать на волнение и на ту же зависимость от разных кодхэлперов. Зачастую работодателям очень сложно найти толковых сотрудников, а если они видят, что человек соображает, то могут взять и с поблажкой на дообучение.
Выучить синтаксис — легко, научится мыслить — совсем другое.
Возможно. Но несколько не так.
Алгоритм оперирует всего несколькими параметрами:
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.
Пожалуйста!
У меня ещё есть модуль для подключения к сетевым RTSP камерам, которые отдают картинку в Motion-JPEG, тоже могу написать статью, если кого-нибудь заинтересует.
Потомучто в этом случае OpenCV был бы центральной фигурой, а так программа может работать и без него, выключив слежение. Да и просто через v4l2 было интереснее, этим самым я предоставил возможность захвата изображений не операясь на довольно тяжелую библиотеку. OpenCV использует ffmpeg, ffmpeg использует API video4linux2, я просто не стал использовать посредников.
Этим уже можно пользоваться.
Учитывает пробелы между элементами.
ЗЫ: Почему-то мой комментарий не опубликовался, дублирую.
Если с листка функция сразу заработает — это, конечно, громадный плюс, но не стоит отчаиваться если синтаксис забыт, можно списать на волнение и на ту же зависимость от разных кодхэлперов. Зачастую работодателям очень сложно найти толковых сотрудников, а если они видят, что человек соображает, то могут взять и с поблажкой на дообучение.
Выучить синтаксис — легко, научится мыслить — совсем другое.
Статья полезная, но несколько сумбурная.
Алгоритм оперирует всего несколькими параметрами:
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.
У меня ещё есть модуль для подключения к сетевым RTSP камерам, которые отдают картинку в Motion-JPEG, тоже могу написать статью, если кого-нибудь заинтересует.