Осмысление вывода "/ dev / video" - PullRequest
2 голосов
/ 13 августа 2010

Я пытался написать простое приложение, которое должно определять различия в пикселях от устройства / dev / video .Как и motion .

Я не знаю, как работает устройство / dev / video, поэтому в большинстве случаев это были догадки.Я обнаружил, что данные (от конкретной веб-камеры) можно разделить на 8192 байта.Я предполагаю, что каждый представляет кадр.Первые + -600 байтов из каждого «кадра» идентичны предыдущему кадру.

Как я могу интерпретировать эти данные в понятную матрицу пикселей?

Код программы для справки:

#!/usr/bin/ruby

# calculates a percentage difference between two array's
def percentage_difference( arrayA, arrayB )
  top_size = arrayA.size > arrayB.size ? arrayA.size : arrayB.size
  diff_elements = 0;
  0.upto( top_size - 1 ) do |i|
    diff_elements += 1 unless arrayA[i] == arrayB[i]
  end
  ( 1.0 * diffelements ) / top_size
end


cam = File.open( '/dev/video' );

lastframe = [];

while( true ) do
  # reads a frame from the open video device ( cam ) and converts to bytes;
  newframe = cam.readpartial( num_of_bytes_per_frame ).bytes.map { |b| b }

  # prints the percentage difference between the two frames
  puts percentage_difference( lastframe, newframe );

  lastframe = newframe;
end

Ответы [ 2 ]

2 голосов
/ 13 августа 2010

Чтение из / dev / video не является простым. Я предлагаю использовать для этого специальную библиотеку. Может быть, вы можете попробовать OpenCV lib. Он имеет простой интерфейс для необработанных пикселей в веб-камерах и камерах.

1 голос
/ 13 августа 2010

Я ничего не знаю о теме, но, может быть, это относится?
Существует документация, объясняющая, что означает каждый байт, и примеры кода в C:

http://v4l2spec.bytesex.org

...