视频摘要视频浓缩

简介: 视频摘要 视频浓缩(一) 视频摘要又称视频浓缩,是对视频内容的一个简单概括,以自动或半自动的方式,先通过运动目标分析,提取运动目标,然后对各个目标的运动轨迹进行分析,将不同的目标拼接到一个共同的背景场景中,并将它们以某种方式进行组合。

视频摘要 视频浓缩(一)

视频摘要又称视频浓缩,是对视频内容的一个简单概括,以自动或半自动的方式,先通过运动目标分析,提取运动目标,然后对各个目标的运动轨迹进行分析,将不同的目标拼接到一个共同的背景场景中,并将它们以某种方式进行组合。视频摘要在视频分析和基于内容的视频检索中扮演着重要角色。

视频录像存在存储数据量大,存储时间长等特点,通过录像寻找线索,获取证据传统的做法是要耗费大量人力、物力以及时间,效率极其低下,以至于错过最佳破案时机。因此在视频监控系统中,对原始视频进行浓缩,可以快速浏览,锁定检索对象,对于公安加快破案速度,提高大案、要案的破案效率具有重要指导意义。(1)

对于企业应用来说,视频摘要与压缩技术可以使企业管理人员在短时间内浏览完视频。在智能手机大行其道的今天,使用视频摘要技术对监控视频进行处理,供手机浏览,既可以节约管理者的时间,又可以节约大量的流量。(2)

对于我来说,现在存在监控录像查阅的实际需求,更重要的是这个问题是“图像处理”的一个典型运用,非常值得研究探索。所以在这里进行研究和实现   一、行业背景和划分       97年CMU的informedia是针对新闻视频的,而MoCA是针对电影的。在监控视频方面以色列briefcam是行业领导者,此外还有哥伦比亚大学的VideoQ和IBM的CueVideo。国内这块处于初级发展状态。       视频摘要可以继续划分为        1、图片关键帧(提取一些视频截图);        2、剪胶片(机器去除静止画面,只显示有目标的画面);        3、空间换时间(不同时间的事件显示在同一画面)。        第3基本上就是能够用于商业运用的视频摘要项目,类似提供这样效果。(注意图上的两组人是不同时间的人)。        当然了,真实的视频可能是这样的
       我这里实验的背景,首先以768那个avi,然后以营区监控来做(opencv3.0自带视频 
768x576.avi) 二、关键技术和算法流程        (一)背景建模        背景建模的基(you)本(xiao)方法是“背景建模”。能够找到的方法包括(1)均值法(2)中值法(3)滑动平均滤波(4)单高斯(5)混合高斯模型(6)codebook方法。我这里实现( 1)均值法(3)滑动滤波法和(5)混合高斯法        (1) 均值法       对于768*576.avi这个视频来说,是比较经典的监控视频,其特点是主要背景景物、光照等是不变的,前景人物来回走动。处理这种问题,如果想把背景取出来,最直接的方法就是统计一个阶段的帧(比如1到100)中,图像中每个像素在绝大多数时间里面的颜色。        如果直接求平均值,结果是这样的        应该说这种方法是有一定效果的,特别对于背景都是远景,或者变化不是很大的情况,处理的效果比较好。        但是对于前进的图像晃动,效果就不是很理想。        使用第0帧和平均值求absdiff,可以看到那个标识牌是很明显地被认为是前景了。这个效果应该不是太好。
void GoBgModeling( const  char  * videoFilePath,  const  int frame_num_used, Mat * bgMat, \
     const  int size1,  const  int size2,  const  int sigma1,  const  int sigma2 ){
     //声明
     int frame_no  =  0;
    Mat frame;
    Mat tmp;
    VideoCapture pCapture(videoFilePath); //自己选取一段avi视频
     if( !pCapture.isOpened()){
        printf( "Unable to open video file for background modeling!\n");
         return;
    }
    printf( "Background Modeling...\n");
     //逐帧读取视频
    Mat matTmp;
     while(frame_no  < frame_num_used){
        pCapture >>frame;
        frame.convertTo(frame,CV_32FC3);
        frame_no  +=  1;
         if(frame_no  ==  1){
             //初始化
            tmp  = Mat : :zeros(frame.rows,frame.cols,CV_32FC3);
            matTmp  = frame.clone();
        }
        tmp  = tmp  + frame /frame_num_used;
         *bgMat  = tmp;
    }
    bgMat - >convertTo( *bgMat,CV_8UC3);
    matTmp.convertTo(matTmp,CV_8UC3);
    absdiff(matTmp, *bgMat,matTmp);   
    printf( "Background Model has been achieved!\n");
}
           (2)滑动滤波法      /* Adds image to accumulator with weights: acc = acc*(1-alpha) + image*alpha */       这种方法的原理我搞的不是很清楚,如果采用这种方法计算背景的话,越是在前面的图片,其权重被设定的越大。同样的视频结果如下 这个结果我看还不如均值。
/**
 *背景建模
 */

void bgModeling( const  char  * videoFilePath,  const  int frame_num_used, IplImage  * * bgImg, \
     const  int size1,  const  int size2,  const  int sigma1,  const  int sigma2){
     //声明
    IplImage  * frame  = NULL;
    CvMat  * frameMat  = NULL;
    CvMat  * bgMat  = NULL;
    CvCapture * pCapture  = NULL;
    IplImage   * framtmp  = NULL;
    CvMat  * mattmp  = NULL;
     int frame_no  =  0;
    pCapture  = cvCaptureFromFile(videoFilePath); //自己选取一段avi视频
     if( !pCapture){
        printf( "Unable to open video file for background modeling!\n");
         return;
    }
     if( *bgImg  != NULL){ //非空需先清空*bgImg指向的内存
        cvReleaseImage(bgImg);
    }
    printf( "Background Modeling...\n");
     //逐帧读取视频
     while(frame_no  < frame_num_used){
        frame  = cvQueryFrame(pCapture);
        frame_no  +=  1;
         if(frame_no  ==  1){
             //初始化
            framtmp  = cvCreateImage(cvSize(frame - >width, frame - >height), frame - >depth, frame - >nChannels);
            cvCopy(frame,framtmp);
             *bgImg  = cvCreateImage(cvSize(frame - >width, frame - >height), frame - >depth, frame - >nChannels);
            cvCopy(frame,  *bgImg);
            frameMat  = cvCreateMat(frame - >height, frame - >width, CV_32FC3);
            bgMat  = cvCreateMat(( *bgImg) - >height, ( *bgImg) - >width, CV_32FC3);
            cvConvert(frame, frameMat);
            cvConvert( *bgImg, bgMat);
             continue;
        }
         //视频帧IplImage转CvMat
        cvConvert(frame, frameMat);
         //高斯滤波先,以平滑图像
        cvSmooth(frame, frame, CV_GAUSSIAN, size1, size2, sigma1, sigma2);
         //滑动平均更新背景(求平均)
        cvRunningAvg(frameMat, bgMat, ( double) 1 /frame_num_used);
    
    }
    
    cvConvert(bgMat,  *bgImg);
    printf( "Background Model has been achieved!\n");
     //释放内存
    cvReleaseCapture( &pCapture);
    cvReleaseMat( &frameMat);
    cvReleaseMat( &bgMat);
}
       (3) 混合 高斯模型         int  _tmain( int  argc, _TCHAR *  argv[])
{    
    Mat bgMat;
//    GoBgModeling("1.avi",100,&bgMat);
    cv : :VideoCapture capture;  
    capture.open( "1.avi");  
  
     if ( !capture.isOpened())  
    {  
        std : :cout << "read video failure" <<std : :endl;  
         return  - 1;  
    }  
    cv : :BackgroundSubtractorMOG2 mog;  
  
    cv : :Mat foreground;  
    cv : :Mat background;  
  
    cv : :Mat frame;  
     long frameNo  =  0;  
     while (capture.read(frame))  
    {  
         ++frameNo;  
        std : :cout <<frameNo <<std : :endl;  
         // 运动前景检测,并更新背景  
        mog(frame, foreground,  0. 001);         
         // 腐蚀  
        cv : :erode(foreground, foreground, cv : :Mat());         
         // 膨胀  
        cv : :dilate(foreground, foreground, cv : :Mat());  
        mog.getBackgroundImage(background);    // 返回当前背景图像  
        cv : :imshow( "video", foreground);  
        cv : :imshow( "background", background);  
         if (cv : :waitKey( 25>  0)  
        {  
             break;  
        }  
    }  
     return  0;
}
       这里虽然是直接使用了opencv提供的Mog模块,应该说效果相当不错。但是也需要对mog的基本原理进行理清和理解,并且对opencv的实现进行整理,这样才算吃透知识。           





目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
机器学习/深度学习 自然语言处理 监控
深度学习之视频摘要生成
基于深度学习的视频摘要生成是一种通过自动化方式从长视频中提取关键片段,生成简洁且有代表性的视频摘要的技术。其目的是在保留视频主要内容的基础上,大幅缩短视频的播放时长,方便用户快速理解视频的核心信息。
601 7
|
运维 安全 Linux
linux麒麟系统二级等保【三权分立策略】
linux麒麟系统二级等保【三权分立策略】
1601 0
|
机器学习/深度学习 人工智能 算法
顶会论文 | 阿里云视频摘要 SOTA 模型:用于视频摘要的多层时空网络
这次向大家分享的工作是作者所负责团队在国际人工智能多媒体顶会 ACM MM 2022 (CCF-A)发表的文章 “Multi-Level Spatiotemporal Network for Video Summarization”,该文提出了一种用于视频摘要的多层时空网络,在视频摘要领域实现了全球领先的研究探索。基于作者团队在工业级推荐系统方面的研究积累,成功地在阿里云产业大规模视频摘要场景实践中解决了一个视频摘要领域的重要问题,推动了该领域的发展。
3155 1
顶会论文 | 阿里云视频摘要 SOTA 模型:用于视频摘要的多层时空网络
|
2月前
|
存储 机器学习/深度学习 人工智能
阿里云环境下 Runway 深度部署:从技术原理到 AIGC 视频生成落地
Runway作为AI视频生成标杆,融合扩散模型与多模态技术,依托潜空间优化与时空注意力机制,实现高效高质视频生成。结合阿里云算力与API生态,支持版权合规、运镜控制与多模态联动,广泛应用于影视、广告与游戏领域,推动内容创作智能化升级。
527 0
|
5月前
|
弹性计算 开发框架 Ubuntu
阿里云服务器ECS镜像知识解析:功能特性、场景及上手实操教程参考
对于部分初次选择阿里云服务器的新手用户来说,可能并不是很清楚阿里云服务器镜像是什么?ECS镜像堪称搭建ECS实例的基础模板,其中涵盖了启动及运行实例所必需的操作系统以及预先配置好的数据。本文将围绕阿里云服务器镜像的相关知识展开介绍,助力大家全方位了解并熟练运用这一强大功能。
|
并行计算 PyTorch Linux
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
大概率(5重方法)解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB
9616 0
|
12月前
|
人工智能 自然语言处理 数据挖掘
RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配
RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配
RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配
|
自然语言处理 开发者
通用文本向量模型全新升级至V3,开通百炼速来体验~~
阿里云新推出通用文本向量模型text-embedding-v3,基于LLM,支持50+语言,包括新增的意大利语等。模型升级亮点:8K长文本支持、可变向量维度、Sparse向量及不分Query/Document类型。现在提供50万免费tokens,有效期180天,计费0.0007元/1000 tokens。体验请访问[阿里云百炼官网](https://bailian.console.aliyun.com/?spm=a2c6h.13046898.publish-article.6.63066ffaL32qHM)
6142 0
|
机器学习/深度学习 人工智能 算法
基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
基于YOLOv8的河道漂浮物实时检测系统,利用2400张图片训练有效模型,开发了带GUI界面的系统,支持图片、视频和摄像头检测,具备模型权重导入、检测置信度调节等功能,旨在维护水体生态平衡和环境卫生。
697 0
基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】
|
Linux Windows
【Linux】grub命令行引导进入windows系统
【8月更文挑战第20天】在Linux中通过GRUB命令行引导Windows的方法包括:1) 进入GRUB命令行模式,启动时按`c`键;2) 使用`ls`查找含Windows引导文件的分区,如`bootmgr`或`ntldr`;3) 设置根设备`root=(hd0,msdos3)`与链加载器`chainloader +1`;4) 输入`boot`命令启动Windows。请注意实际步骤可能因系统配置而异。
1855 2