T31开发笔记: 移动侦测

若该文为原创文章,转载请注明原文出处。

最近在测试创安源IPC时发现摄像头的视频流有移动侦测功能 ,拆解后发现使用的是T31,刚好手头上有淘宝买50多点的T31摄像头,就自己现在了个简易DEMO测试一下。

一、硬件和开发环境

1、硬件:T31X+SC5235 

2、开发环境: ubuntu16.04-64bit

3、编译器:mips-gcc540-glibc222-32bit-r3.3.0.tar.gz

注:板子和和WIFI模块是某淘上淘的,使用的是RTL8188,使用的是USB接口,uboot和内核是自己裁剪移植的,内核默认自带WIFI驱动,所以不用移植可以直接使用。

二、移动侦测原理

以前有使用过海思hi3516ev200的移动侦测功能,感觉原理差不多。

运行的demo是sample-Encoder-h264-IVS-base-move.c

根据DEMO,移动侦测使用的是子流640*360,以区域方式来检测是否有移动,有移动输出1,

即把640*360分成45*80个8*8的区域

由此知道了移动的大概位置。而我试验的目的是通过这些区域算坐标并画框显示在界面上。

三、使用步骤

IMP 通过IVS的通用接口API调用实例化的IMPIVSInterface将智能化分析算法嵌入到SDK中来分析SDK中的frame图像。

IMPIVSInterface为通用算法接口,具体算法通过实现此接口并将其传给IMP IVS达到在SDK运行具体算法的目的。

一个channel有且仅为单个算法示例的载体,必须将具体实现的算法接口传给具体的channel才能在SDK中运行算法。

IMPIVSInterface 成员 param 为成员函数 init 的参数。

IMP_IVS 会在传给成员函数 ProcessAsync 参数的 frame 时对其进行外部加锁, ProcessAsync 必须在使用完 frame 后调用 IMP_IVS_ReleaseData 释放 frame,以免死锁。

除上述通过绑定在数据流中的 IMP IVS 实现算法调用之外,还提供一种非绑定的方式实现算法 调 用 , 即 获 取 framesouce channel 的 frame 图 像 , 直 接 调 用 IMPIVSInterface 的成员函数实现算法处理。

大部分情况下,我们使用的都是不绑定的方式进行移动侦测算法的获取的。

绑定模式的算法使用方法:

非绑定模式调用IVS平台

具体的API参考API手册。

四、代码说明

sample-Encoder-h264-IVS-base-move例程已经输出了参数,结构体如下:

其他数据data表示意思个人不理解,没有变化为0,有变化不为0,有人知道望告知。

输出总的数据是3600即80*45通过下面代码他数据重新整理成一个多维数组。

把检测到的值不为0,就表示1方式的方式存在arary[45][80]的数组里。 

接下来通过算法,自己出为1的区域,

计算边界值

这个函数的作用是求一个10x10数组中值为1的元素的最大和最小行和列坐标

通过此算法,即可获取到对应的区域

附完整的测试代码:

#include <stdio.h>  
#include <limits.h> // For INT_MAX and INT_MIN  #define ROWS 10  
#define COLS 10  void findMinMaxCoordinates(int array[ROWS][COLS], int *minRow, int *minCol, int *maxRow, int *maxCol) {  *minRow = INT_MAX;  *minCol = INT_MAX;  *maxRow = INT_MIN;  *maxCol = INT_MIN;  for (int i = 0; i < ROWS; ++i) {  for (int j = 0; j < COLS; ++j) {  if (array[i][j] == 1) {  if (i < *minRow) *minRow = i;  if (j < *minCol) *minCol = j;  if (i > *maxRow) *maxRow = i;  if (j > *maxCol) *maxCol = j;  }  }  }  
}  int main() {  int array[ROWS][COLS] = {  0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,};  int minRow, minCol, maxRow, maxCol;  findMinMaxCoordinates(array, &minRow, &minCol, &maxRow, &maxCol);  if (minRow != INT_MAX && minCol != INT_MAX) {  printf("Minimum coordinates: Row = %d, Col = %d\n", minRow, minCol);  printf("Maximum coordinates: Row = %d, Col = %d\n", maxRow, maxCol);  printf("(%d, %d) (%d, %d)\n", minCol, minRow ,maxCol, maxRow);} else {  printf("No elements with value 1 found in the array.\n");  }  return 0;  
}

把获取的坐标存到p00和p01结构体内,

p00.x = minCol*8*3;
p00.y = minRow*8*3;
 
p01.x = maxCol*8*3;
p01.y = maxRow*8*3;

说明乘于8是因为roi区域是8*8, 乘于3是因为我在主码流1920*1080上叠加了OSD画框显示功能 。

所以坐标放大3倍 。

OSD画框参考的是sample_OSD.c例程。在update_thread更新线程里添加了显示框的坐标点。

五、测试结果

输出感觉有点不灵敏,具体参数还有待调试。

此方式是个人想到的一种方法,有其他方式望互相讨论。

如有侵权,或需要完整代码,请及时联系博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习之路 -- 进程篇 -- 进程地址空间

目录 一、背景介绍 二、进程地址空间 1.看现象 2.先简单描述一下地址空间&#xff08;地址空间全在操作系统的内部&#xff09; 3.地址空间详细一点的描述 4.进程地址空间里面的内容&#xff08;部分&#xff09; 三、进程地址空间的转换机制 1.页表 2.进程地址空间和页…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积&#xff0c;替换YoloV8的常规卷积&#xff0c;轻量高效&#xff0c;即插即用&#xff01;改进方法非常简单。 DO-Conv&#xff08;Depthwise Over-parameterized Convolutional Layer&#xff09;是一种深度过参数化的卷积层&#xff0c;用于提高卷…

【Web】HNCTF 2022 题解(全)

目录 Week1 Interesting_include 2048 easy_html What is Web Interesting_http easy_upload Week2 ez_SSTI easy_include ez_ssrf Canyource easy_unser easy_sql ohmywordpress Week3 ssssti Fun_php ez_phar QAQ_1inclu4e logjjjjlogjjjj …

嵌入式学习58-ARM7(自动设备号和混杂设备)

知识零碎&#xff1a; 头文件查找&#xff1a; /arm/路径下的头文件 linux驱动程序的编写&#xff0c;编译&#xff0c;运行过程 -------------------------------------------------------------------------------------------------------------------------------- 1.…

密钥密码学(一)

原文&#xff1a;annas-archive.org/md5/b5abcf9a07e32fc6f42b907f001224a1 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 从秘密解码环到政府政策声明&#xff0c;隐藏和发现信息的挑战长期以来一直吸引着智慧。密码学是一个引人入胜的主题&#xff0c;…

HCIA-Datacom实验_05_实验三:OSPF路由协议基础实验

一、实验拓扑 二、实验步骤 (一)修改设备名称、配置接口IP、Loopback口IP R1 R2 R3 (二)配置OSPF R1 R2 R3 (三)配置认证 R1 R2 R3

队列常规使用

文章目录 一、同步互斥改进方法二、队列实现同步三、队列实现互斥总结 一、同步互斥改进方法 在上一章同步互斥中&#xff0c;我们有两个实验。 同步实验&#xff1a; 我们创建了两个任务&#xff0c;任务1循环遍历一个比较大的数字&#xff0c;遍历完成后设置标志位置1。任务…

【极速前进】20240422:预训练RHO-1、合成数据CodecLM、网页到HTML数据集、MLLM消融实验MM1、Branch-Train-Mix

一、RHO-1&#xff1a;不是所有的token都是必须的 论文地址&#xff1a;https://arxiv.org/pdf/2404.07965.pdf 1. 不是所有token均相等&#xff1a;token损失值的训练动态。 ​ 使用来自OpenWebMath的15B token来持续预训练Tinyllama-1B&#xff0c;每1B token保存一个che…

ONLYOFFICE 协作空间 2.5 现已发布:公共房间改进、用户群组、储存空间管理、嵌入预设等更新

本次更新优化了 ONLYOFFICE 协作空间的多项功能&#xff0c;让您的工作能更加轻松、高效。阅读下文了解所有更新。 关于 ONLYOFFICE 协作空间 ONLYOFFICE 协作空间是一个文档办公&协作平台&#xff0c;自带文档编辑器&#xff0c;提供一整套用于文档储存、共享和协作的工具…

微电子领域常见概念(六)化学键合

微电子领域常见概念&#xff08;六&#xff09;化学键合 化学键合是化学中一个非常基础且重要的概念&#xff0c;它描述了原子之间通过电子的相互作用形成的连接。可以进行以下分类&#xff1a; 1. 离子键合&#xff08;Ionic Bonding&#xff09; • 定义&#xff1a;离子键合…

2024年Q1季度平板电视行业线上市场销售数据分析

Q1季度平板电视线上市场表现不如预期。 根据鲸参谋数据显示&#xff0c;2024年1月至3月线上电商平台&#xff08;京东天猫淘宝&#xff09;平板电视累计销量约360万件&#xff0c;环比下降12%&#xff0c;同比下降30%&#xff1b;累计销售额约99亿元&#xff0c;环比下降28%&a…

试用花生壳软件,实现外网访问内网web服务器

试用花生壳软件&#xff0c;实现外网访问内网web服务器。今天查看了一下家用的WiFi路由器和光猫。在wifi路由器里看到了DDNS&#xff0c;看到了花生壳。这时想到了花生壳软件能实现外网访问内网web服务器的功能。于是试用了一下。 先游览了贝锐花生壳公司网站&#xff0c;了解…