我尝试编写一个简单的应用程序来检测/dev/video设备的像素差异。就像运动一样。
我不知道 /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