基于Android 摄像头的移动侦测实现
1. 业界目前实现形式
移动侦测的主要使用场景大多是在NVR行业,目前大概分为两种实现形式:
- 由摄像机端做移动侦测计算,汇总事件类型,上报相关事件至服务器,并开启录像实时上传音视频流至服务器。
- 摄像机端一直不停的向服务端推流,由服务端去做移动侦测计算,根据事件类型决定是否保存流到硬盘,并下发事件关联的指令给摄像机端。
2. 实现思路及优缺点分析
目前整理的算法大概分为两大类:一类是基于图像对比差异算法
的简单图像比较、另一类是基于人形识别技术
的更为精确的动作事件识别。第二类识别技术对于非图像处理行业从业人员门槛太高,无力考虑。以下仅对第一类侦测算法进行探索。
1.像素比对法
1-1. 基础思路:
在固定间隔时间内对视频流采集帧图像数据,之后对所采集到的两帧画面进行像素级比对,如果比对结果一致性在一个大于一个既定的相似率(比如90%),则认定视频中无移动,反之则认为发生移动事件。伪代码逻辑示例如下:
public class PicCompare {
public static final int PIXEL_OFFSET = 5;
public static final float SAME_OFFSET = 0.1f;
public void start() {
Bitmap pic1 = new BitmapFactory().decodeFile("pic1");
Bitmap pic2 = new BitmapFactory().decodeFile("pic2");
compare(getPixelArray(pic1), getPixelArray(pic2));
}
public boolean compare(int[] p1, int[] p2) {
int def = 0;
for (int i = 0; i < p1.length; i++) {
if (Math.abs(p1[1] - p2[i]) > PIXEL_OFFSET) {
def++;
}
}
if (def / p1.length > SAME_OFFSET) {
return false;
}
return true;
}
public int[] getPixelArray(Bitmap pic) {
int[] pixels = new int[pic.getWidth() * pic.getHeight()];
pic.getPixels(pixels, 0, pic.getWidth(), 0, 0, pic.getWidth(), pic.getHeight());
return pixels;
}
}
1-2. 减少运算量方法
- 对采集的图片进行缩放,以保证在不影响最终结果的情况下最大程度减少运算量
- 对图片切块,拆解计算量。
1-3. 该算法的优缺点
- 优点:
- 技术难度相对难度较低,终端网络占用低,仅在有事件发生时推流。
- 计算量可以根据画面帧采集间隔的调整适当调整
- 缺点:
- 像素对比法仅能对比图像数据差异,无法做到真正的移动侦测;计算结果有可能受环境光线、成像曝光度及其他无关因素影响。
- 摄像头分辨率高及采样频率高时运算量大,采用减少运算量的方法优化后可能会影响计算结果精确度。
2. 直方图对比法
2-1. 算法思路
public float compareHistogram(int[] s1, int[] s2) {
try {
float result = 0F;
for (int i = 0; i < 256; i++) {
int abs = Math.abs(s1[i] - s2[i]);
int max = Math.max(s1[i], s2[i]);
result += (1 - ((float) abs / (max == 0 ? 1 : max)));
}
return result / 256;
} catch (Exception exception) {
return 0;
}
}
public int[] getHistogram(Bitmap bitmap){
int[] data = new int[256];
for (int x = 0; x < bitmap.getWidth(); x++) {
for (int y = 0; y < bitmap.getHeight(); y++) {
int color = bitmap.getPixel(x, y);
int r = (color & 0xff0000) >> 16;
int g = (color & 0x00ff00) >> 8;
int b = (color & 0x0000ff);
data[(r + g + b) / 3]++;
}
}
return data;
}
2-2. 算法优缺点
- 优点:
相比第一种方法计算量相对更小,能够获得更快的处理结果
- 缺点:
该方法是一种特征码抽取对比方法,对结果精确度有一定影响。依旧只能是对比图像差异,无法判断事件类型。
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
i·Space !
喜欢就支持一下吧
打赏
微信
支付宝