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

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

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

AI训练师团队管理运营思路

工具运营AI训练师主要是支撑运营,协助算法和运营提高托管机器人的解决能力,以协助降低业务场景熔断与优化场景识别为核心运营目标,通过算法聚类、标注分析等方式,结合业务知识,提供精准、清晰的标注数据和解决方案,确保训练效果满足需求。过程中需要与算法、运营一块参与模型搭建和数据验收,并且负责核心指标和数据日常的跟踪维护。④针对知识库已有意图进行梳理和分析,反馈运营评估缺失或合并意图优化方向。③对语料数据进行挖掘、清洗,解除缠绕、冗余等问题导致的未识别。①线上case分析,及时发现识别问题导致的托管熔断问题。

qq_25438419的博客 1084

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

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

LntonCEC的博客 585

大众奥迪诊断不求人:手把手解析SAE J2819(CAN TP2.0)协议报文与连接流程

本文深入解析大众奥迪车型诊断核心标准SAE J2819(CAN TP2.0)协议,详细拆解连接建立流程与报文控制字段。通过实战案例展示通道设置、参数协商等关键步骤,提供诊断设备配置建议和常见故障排查技巧,帮助工程师掌握汽车诊断通信协议的精髓。

weixin_30421809的博客 396

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

视频监控场景中静态和运动目标的分割和跟踪摘要关键词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

vins-mono前端详解(2)——imu预积分

本篇文章详细讲解了vins-mono中imu预积分内容,包括复杂的公式推导。

weixin_44587828的博客 1192

uniapp: err = err.replace(this._UNI_INPUT_DIR_REG, ‘UNI_TypeError: err.replace is not a function问题修复

问题:uniapp的依赖包出现了问题,需要升级解决办法:升级uniapp依赖包,下载"semver"和”@dcloudio/uni-i18n“两个包,本地锁定postcss为7版本,就解决了。

py_boy的博客 1453

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

实战:RK3568 Android14 集成 AP6212A WiFi/BT 二合一模块

AP6212A 的集成在 RK3568 上非常成熟。只要电源、32K 时钟、SDIO 线序、UART 流控这四点硬件没问题,软件上主要是 DTS 对应的 GPIO 别填错即可。希望这篇博文能帮你一次点亮 WiFi 和蓝牙!

qq_33427070的博客 1446

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

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

AI与流媒体视频技术 1123

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4642

12、多端神经形态晶体管:原理、应用与算法探索

本文综述了多端神经形态晶体管的原理、应用与算法探索。从神经元MOS晶体管的发展到基于电解质栅极晶体管(EGT)的新型器件设计,系统阐述了其在低电压、多功能逻辑运算和突触行为模拟方面的优势。重点介绍了其在化学生物传感器(如多巴胺和pH检测)中的高灵敏度应用,以及在树突整合、时空总和、动态逻辑和神经元算术等树突算法中的实现。文章还总结了该类器件在神经形态计算、智能传感等领域的广阔前景,并分析了当前面临的材料工艺、理论建模与系统集成挑战,展望了未来发展方向。

delta的博客 143

江苏移动千里眼 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

SAP 创建PO时提示“不能确定任何组件”

SAP 创建委外加工的PO时提示“不能确定任何组件” 而如果BOM已经创建了,但还是提示该错误保存。 解决办法:1. BOM selection 未配置好; 2. 由于Purchasing prosessing time的设置,如果PO中的delivery time - Purchasing prosessing time是过去的日期,那么会找不到BOM,BOM的有效期需早 于PO审批的有效期。 3. BOM未...

willieyuan的博客 6116

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

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

u012984333的博客 305

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

Xindoo2020的博客 348

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

安防监控系统流媒体服务器,搭建一套安防监控系统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、付费专栏及课程。

余额充值