Android开发之视频监控区域报警设定

Android GB28181客户端开发(1):GB28181协议简介 GB28181协议是一种基于IP网络的远程视频监控系统,它定义了设备之间的通信协议和数据格式。GB28181协议的主要特点是支持多种网络接入方式,包括以太网、ADSL、ISDN等,同时具有良好的扩展性和互操作性。在Android GB28181客户端开发中,理解GB28181协议的工作原理是至关重要的。这包括了解如何创建和管理连接,如何发送和接收数据,以及如何处理可能出现的错误和异常。 阅读详情

最近接到一个来自产品的需求如下:用手在视频画框内画矩形框,矩形框内有物体移动将进行报警,最多三个区域

刚接到需求脑海瞬间行成了一个解决方案,这得益于我之前对github开源项目的“见多识广”!有事没事多看看一些优秀的开源项目还是很有用的。(每次只能选一个区域上传到服务器,根据次数控制是否支持再次选取)


首先呢感谢开源项目:https://github.com/edmodo/cropper

我需要如何修改呢?暂且分为以下几个步骤:

  • 获取服务器端原图

  • 根据服务器的宽高比例设定ImageView的宽高

  • 修改开源库矩形框样式级是否隐藏选取框

  • 提供获取矩形四个点的比例值,用于回传到服务器

首先明确一点,服务器的图片按照16:9的约定(16:9的比例我这里是写死的,还可以新增自定义属性来控制),图片的宽高一定大于手机的控件宽高,所以我们需要获取屏幕宽度,按照与服务器约定比例16:9动态设置view宽度(onLayout函数内调用,以防屏幕旋转问题)

 @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

        WindowManager wm = (WindowManager) getContext()
                .getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();
        int height = width/16*9;
        setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height));
        super.onLayout(changed, left, top, right, bottom);

        mBitmapRect = getBitmapRect();
        initCropWindow(mBitmapRect);
    }

注意: layoutParmas,這里针对的是我自己项目内父控件编码,如有需要自行修改别完全copy(可以改为通用getLayoutParams..)

如何能保证服务器获取的原图能完全显示到控件里面呢?这里需要使用到ImageView的缩放类型centerInside,如果你还不完全了解scaleType,可以参考下面内容(了解的略过)
内容摘自:

http://blog.csdn.net/hhbgk/article/details/8101676
  • CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

  • CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)

  • CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

  • FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示

  • FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置

  • FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置

  • FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示

  • MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。

修改代码如下

  public PrecinctImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
        setScaleType(ScaleType.CENTER_INSIDE);
    }

由于需求有限制选取区域三次,所以新增属性isOpenPrecinct,去掉原有所有自定义属性(都用不到干掉吧,强迫症患者没办法),自定义属性解析后在onDraw 函数做一个开关作用

  <declare-styleable name="PrecinctImageView">

        <attr name="isOpenPrecinct" format="boolean"/>

    </declare-styleable>

  @Override
  protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);

        if(isOpenPrecinct){
            drawDarkenedSurroundingArea(canvas);
            drawBorder(canvas);
            drawCorners(canvas);
        }
    }

去掉原有的draw网格线方法,修改四个角的绘制,改为drawCircle

private void drawCorners(@NonNull Canvas canvas) {

        final float left = Edge.LEFT.getCoordinate();
        final float top = Edge.TOP.getCoordinate();
        final float right = Edge.RIGHT.getCoordinate();
        final float bottom = Edge.BOTTOM.getCoordinate();

        final float lateralOffset = (mCornerThickness - mBorderThickness) / 2f;
        final float startOffset = mCornerThickness - (mBorderThickness / 2f);

        canvas.drawCircle(left, top, radioSize, mCornerPaint);

        canvas.drawCircle(right, top, radioSize, mCornerPaint);

        canvas.drawCircle(left, bottom, radioSize, mCornerPaint);

        canvas.drawCircle(right, bottom, radioSize, mCornerPaint);
    }

修改边框圆点样式,通过修改value 下默认值实现

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="white_translucent">#AAFFFFFF</color>
    <color name="black_translucent">#B0000000</color>

    <color name="border">#FFB529</color>
    <color name="guideline">@color/white_translucent</color>
    <color name="corner">#FFB529</color>
    <color name="surrounding_area">#66000000</color>

</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <dimen name="border_thickness">1dp</dimen>
    <dimen name="corner_thickness">5dp</dimen>
    <dimen name="guideline_thickness">1px</dimen>

    <dimen name="target_radius">24dp</dimen>
    <dimen name="snap_radius">3dp</dimen>
    <dimen name="corner_length">20dp</dimen>

</resources>

最后一步获取四个点坐标,根据控件的宽高转换为比例值,阅读源码发现Edge类可以为我们直接获取点坐标

 public PointP getPrecinctPointP(){
        PointP pointP = new PointP();

        pointP.setLeftTopX(Edge.LEFT.getCoordinate()/getMeasuredWidth());
        pointP.setLeftTopY(Edge.TOP.getCoordinate() / getMeasuredHeight());

        pointP.setRightTopX(Edge.RIGHT.getCoordinate() / getMeasuredWidth());
        pointP.setRightTopY(Edge.TOP.getCoordinate() / getMeasuredHeight());

        pointP.setLeftBottomX(Edge.LEFT.getCoordinate() / getMeasuredWidth());
        pointP.setLeftBottomY(Edge.BOTTOM.getCoordinate() / getMeasuredHeight());

        pointP.setRightBottomX(Edge.RIGHT.getCoordinate() / getMeasuredWidth());
        pointP.setRightBottomY(Edge.BOTTOM.getCoordinate()/getMeasuredHeight());
        return pointP;
    }

以上修改看上去没有任何问题,但是结果呢总是那么不如人愿!这个开源库getBitmapRect()函数

private RectF getBitmapRect() {

        final Drawable drawable = getDrawable();
        if (drawable == null) {
            return new RectF();
        }
   //*************略************     
 }       

这里获取的src对应的drawable资源,而在某种情况下图片如果比控件宽高小,设置src会导致图片显示不能完全覆盖控件,部分显示纯黑色,如果此时设置为Background,源码里getBitmapRect()获取到的范围值为0,所以这里应该修改代码如下

private RectF getBitmapRect() {

        final Drawable drawable = getBackground();
        if (drawable == null) {
            return new RectF();
        }

<idea.analyzesystem.precinct.PrecinctImageView
            android:id="@+id/precinctImageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_padding"
            android:adjustViewBounds="true"
            android:background="@drawable/butterfly"/>

最后附上效果图:


MotionDetection:安卓运动检测应用 运动检测 安卓运动检测应用 目录: I. 一般信息 II. 设置 ================================================== ================ 一、一般信息。 该项目是在 Android Studio 中开发的。 安卓工作室 1.1.0 JDK 6(仅 JRE 是不够的) Android 开发工具插件(推荐) 要检查是否检测到设备,请在命令提示符下使用命令 adb devices。adb 工具位于 sdk\platform-tools 中。 列出检测到的设备。 二、 设置 运行 Android 项目。 将 Android 项目导入工作区 要在设备上运行项目,设备必须设置为调试模式。 连接设备并将 Android 项目作为 Android 应用程序运行。 立即下载

相关推荐

移动侦测的一个代码

C++开发,移动侦测的算法代码,一个老外的算法改写而来,很好用

视频监控场景下报警功能的技术特点及场景应用

平台可实时查看设备在线、掉线等状态信息,并获取到设备的报警信息,同步的抓取到所有的设备记录的报警状态,将设备的报警级别、报警方式、报警类型报警时间都统一的展示出来。平台端也会根据设备的报警的信息进行视频的截取,获取到报警时刻的视频截图,从而实现设备管理、故障告警等功能。2、报警处理:支持多种报警处理方式,若报警为误报,可以进行报警忽略;1、自定义报警阈值:支持客户依据自身业务自定义报警阈值,可自定义内容包括:报警对象、报警类型、报警指标、报警阈值、报警等级、报警生效时间段、报警时间、报警方式及接收人等。

OpenSkeye的博客 1514

android摄像头开发完美例程(几乎涉及所有有关摄像头开发的东东)

Android摄像头开发完美demo,包括摄像头循环聚焦,缩放大小,旋转picture,查询picturesize, 增加ImageButton的按键效果。整个代码写的简洁,几乎涉及所有有关摄像头开发的东东。参见:http://blog.youkuaiyun.com/yanzi1225627/article/details/8577756

视频移动侦测VMD的实现

视频移动侦测区域报警的原理、实现与应用   简介   ====== 此项目用于前端摄像头的视频移动侦测报警。 之前已经发布了一个版本,功能比较简单,现在在以前版本的基础上增加了区域报警的功能。 所谓区域报警,就是在摄像头的视角范围定义出一些区域,当此区域的出现非法入侵的时候就产生报警。 通过这种方式可以有效的对重点区域进行监控而忽略其它的一些非重

rayylee 4287

一种多区域视频监控入侵检测报警方法的研究

一种多区域视频监控入侵检测报警方法的研究

BALM2深度解析 | 港大MARS实验室如何用点簇革新激光BA?

本文深度解析了港大MARS实验室提出的BALM2方案如何通过点簇技术革新激光BA(Bundle Adjustment)处理。BALM2将点云数据聚合为点簇,显著提升计算效率,实测显示其计算耗时仅为传统方法的1/20。文章详细介绍了点簇的核心原理、二阶优化方法及与传统方法的性能对比,展示了其在激光SLAM领域的突破性应用。

weixin_29212867的博客 152

视频监控管理平台智能边缘分析一体机视频监控汇聚平台区域人数统计检测算法

然后,算法利用深度学习或机器学习技术训练出的模型,对视频帧中的行人进行目标检测。通过跟踪行人的运动,算法能够判断行人是否进入了指定的统计区域。当行人离开区域时,计数器会减少。智能边缘分析一体机区域人数统计检测算法是一种集成了图像处理、目标检测、跟踪和计数等功能的先进算法,用于实时监测和统计指定区域内的人数。该算法通过捕捉视频流中的行人信息,利用高效的算法进行行人检测和跟踪,从而实现对人数的准确统计。总之,智能边缘分析一体机区域人数统计检测算法是一种高效、准确的解决方案,为人数统计提供了强有力的技术支持。

LntonCEC的博客 585

最新,弱小目标检测数据集,持续更新中。

梳理了最新的下弱小目标检测数据库,方便后续开发使用

weixin_43331421的博客 4094

【论文】视频监控场景中静态和运动目标的分割和跟踪

视频监控场景中静态和运动目标的分割和跟踪摘要关键词1. INTRODUCTION2. MULTI LEVEL FOREGROUND SEGMENTATION2.1. Multi-level probabilistic model2.2. Multi-Level Foreground Segmentation Results3. MEAN-SHIFT BASED TRACKING SYSTEM WITH MULTILEVEL SEGMENTATION4. RESULTS5. CONCLUSIONS6. REF

weixin_43480312的博客 1523

RS485设备联网避坑指南:塔石串口服务器在MODBUS平台中的3个关键配置项

本文针对塔石串口服务器在MODBUS物联网平台接入中的常见问题,详细解析了三个关键配置项:工作模式选择、远程端口与保活机制、寄存器映射与轮询策略。通过对比错误与正确配置案例,帮助工程师避开配置陷阱,实现RS-485设备的稳定、高效联网,提升批量部署的成功率与系统可靠性。

weixin_29281941的博客 405

Android Studio笔记之警示框——实现弹窗

#项目结构 点击按钮弹出的代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv_quickReg = findViewById(R.id.tv_quickReg); tv_quick

qq_43398404的博客 2728

HCIA-Storage 存储工程师学习笔记——1. 存储技术趋势

文章目录1. 存储技术趋势1.1 数据、信息与数据存储1.2 存储技术的发展①存储架构的发展②存储介质的发展③ 接口协议的发展1.3 存储产品的发展趋势 华为HCIA-Storage认证地址:https://e.huawei.com/cn/talent/#/cert/roadmap 1. 存储技术趋势 1.1 数据、信息与数据存储 什么是数据? ​ 数据是对所有事物的数字表示。 数据的种类? 结构化数据 半结构化数据 非结构化数据 数据的处理周期 ​ 数据处理是人或机器对数据进行的重组或重新排序,

超级大洋葱的博客 2842

【方案】如何利用4G单兵设备配合国标视频监控,实现安保安全巡视?

一、行业概述 安保主要对所辖区域实行24小时全天候保安巡视服务,为防盗、防火、防灾、交通和维持管理区域的公共秩序,预防和处理各类不安全事件。 安保公司的职责是熟悉所辖区域的楼宇、各种公共设施、设备的分布位置,各类公共场所的使用性质和服务对象,系统掌握所辖区域整体情况,发现可疑情况,应立即查明报告;巡视时要经常定时汇报巡视情况,加强死角地段的治安执勤巡逻;督导自行车、摩托车的停入次序,督导所辖区域道路泊车,行车的路线、车速、噪音,保存所辖区域内设置的各类消防、安全、交通等标志齐全、醒目完好。 二、需

AI与流媒体视频技术 1123

PyTorch生成式人工智能(25)——基于Transformer实现机器翻译

不同于循环神经网络 (RNN) 按顺序处理数据,Transformer 以并行的方式处理输入数据(例如句子)。这种并行处理提高了效率,但并未使其能够识别输入的顺序。为了解决这个问题,Transformer 向输入的词嵌入中添加了位置编码。这些位置编码是分配给输入序列中每个位置的独特向量,其维度与输入词嵌入对齐。本节将以英语到法语的翻译为例,通过介绍如何训练 Transformer 模型将英语句子转换为法语,深入理解 Transformer 的架构及自注意力机制的运作方式。

盼小辉丶的博客 2711

第4.4节:保护轴承与安全系统

飞轮储能系统的保护轴承是磁悬浮失效时的最后安全屏障,其设计需满足非干涉性、高可靠性和有限寿命承载原则。转子跌落过程包括自由下落、碰撞、进动和滑行减速等复杂非线性阶段,产生远超常规工况的冲击载荷。保护轴承需具备极限冲击容量、高温耐受性和抗卡死能力。系统采用多层级安全架构,结合故障诊断与健康管理,通过监测振动、电流等参数实现预测性维护。安全停机序列有序结合主动制动与被动摩擦制动,确保系统在极端工况下的安全。保护轴承类型多样,需根据系统规模与可靠性要求合理选择。

技术工作者 226

江苏移动千里眼 v2.1.12

版本:v2.1.12 大小:38.3M 更新:2019/2/26 语言:简体 等级: 平台:安卓, 4.0以上 下载地址: 江苏移动千里眼 v2.1.12(1) 江苏移动千里眼 v2.1.12(2) 江苏移动千里眼 v2.1.12(3)   江苏移动千里眼客户端是由江苏移动千里眼平台打造的江苏移动千里眼视频监控客户端,江苏移动千里眼客户端是面向民用市场的视频监控服务应用,江苏移动千里眼客户端为用户...

xinlinyz的博客 2123

使用 Simulink 实现基于相控阵雷达的波束形成技术

摘要:本文详细介绍了利用MATLAB Simulink和Phased Array System工具箱实现相控阵雷达波束形成的完整流程。主要内容包括:1)创建Simulink模型;2)设计天线阵列参数;3)信号生成模块配置;4)波束形成算法实现;5)结果可视化方法;6)仿真调试与优化;7)代码导出与部署。通过分步指导,读者可以掌握从理论到实践的完整开发流程,包括关键参数设置和算法实现示例。该方案适用于军事、气象等领域的雷达系统开发,并支持后续嵌入式和智能算法集成。

xiaoheshang_123的博客 179

水泵远程监控报警系统方案说明

水泵远程监控报警系统解决方案,基于水利物联网平台,利用流量计、液位采集器、电参数采集模块等感知模块,通过智能控制柜与智慧水利管理平台组成自动监测、报警、管理系统。实现供水泵站无人值守,统一调度指挥,提高管理效率,节省运营成本,保证整个二次供水高效、安全、稳定的运行。系统兼容各类型、规格的水泵,接入系统的水泵数量不等。建立远程集中监控系统,实现监控中心对所辖二次供水泵房的统一运营管理,实时监控供水泵房的运行信息,确保居民正常用水和安全用水。

u012984333的博客 305

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

智慧养老解决方案对居家养老友好吗?当然友好-新导智能

随着人口老龄化问题急剧扩大,老年人的养老问题已受到政府及社会的普遍关注及关心,为使更多的老年人更好的安享晚年,越来越多的养老机构不断兴建起来。为保障老年人的安全,使老人能享受到更加全面贴心的服务,需要运用科技的手段对老人进行实时的看护,在老年人遇到突发事故时能及发现并进行救助。 智慧养老解决方案采用了最新的安卓智能系统腕表,通过传感网络、云计算、医疗物联网、移动互联网等先进技术和理念,以养老院实际管理和服务需求为出发点,建立了一套成熟完善的智慧养老院解决方案系统。系统涵盖了养老院日常基本信息管理、老人

Xindoo2020的博客 348

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

气象灾害监测:如何利用大数据及安防AI技术进行预警?

我国地处东南亚季风区,幅员辽阔,人口众多,自然环境复杂,天气气候多变,是世界上气象灾害最严重的国家之一。在频繁发生的自然灾害中,气象灾害约占70%。我国气象灾害种类多、分布地域广,发生频率高、损失程度高。气象灾害不仅对公共安全构成了严重的威胁,而且每年都给国民经济带来巨大损失。

TSINGSEE青犀视频官方技术博客 1484

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

安防监控系统流媒体服务器,搭建一套安防监控系统RTSP/Onvif网络摄像头视频流媒体服务有哪些核心要素?...

原标题:搭建一套安防监控系统RTSP/Onvif网络摄像头视频流媒体服务有哪些核心要素?在现代信息社会,人民的生活水准不断提高,因而对安全的需求也越来越迫切。特别自“9·11”与伦敦爆炸案事件后,国内外安防市场就迫切需要智能安防监控体系产品。近年来,国内外先后涌现出一批不同程度的智能安防监控体系或产品,由此也可见,安防监控体系正在由数字化、网络化逐渐走向智能化。比如我们团队研发的安防摄像头视频流媒...

weixin_33849892的博客 796

搭建一套安防监控系统RTSP/Onvif网络摄像头视频流媒体服务器需要哪些核心要素?

在现代信息社会,人民的生活水准不断提高,因而对安全的需求也越来越迫切。特别自“9·11”与伦敦爆炸案事件后,国内外安防市场就迫切需要智能安防监控体系产品。 近年来,国内外先后涌现出一批不同程度的智能安防监控体系或产品,由此也可见,安防监控体系正在由数字化、网络化逐渐走向智能化。比如我们团队研发的安防摄像头视频流媒体服务器,由于能够进行实时的监控视频流传输,并且能够对视频流进行统一管理,受到了广大...

EasyNVR官方技术博客 1233

养老院解决方案之智能无感消毒与智能查房系统-新导智能

1.产品概述 1.1.产品背景 随着人口老龄化问题急剧扩大,老年人的养老问题已受到政府及社会的普遍关注及关心,为使更多的老年人更好的安享晚年,越来越多的养老机构不断兴建起来。为保障老年人的安全,使老人能享受到更加全面贴心的服务,需要运用科技的手段进行苏州新导养老院解决方案对老人进行实时的看护,在老年人遇到突发事故时能及发现并进行救助。 1.2设计目标 本项目采用了苏州新导最新的安卓智能系统腕表,通过传感网络、云计算、医疗物联网、移动互联网等先进技术和理念,以养老院实际管理和服务需求为出发点...

Xindoo2020的博客 681
上一篇: Android-NDK开发(一)
下一篇: Android开发之蓝牙通信(三)
AnalyzeSystem
博客等级 码龄11年 204粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值