基于海康监控的图像识别设计

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 基于海康监控的图像识别设计   一、基本知识和背景      ​目前,安防行业正从网络化向智能化升级;从简单的视频获取、图像截获向内容分析、自动跟踪进化。借助监控摄像头,进行图像识别或机器视觉设计的需求,变得越来越强烈。

基于海康监控的图像识别设计

 

一、基本知识和背景

     目前,安防行业正从网络化向智能化升级;从简单的视频获取、图像截获向内容分析、自动跟踪进化。借助监控摄像头,进行图像识别或机器视觉设计的需求,变得越来越强烈。这里分享一些自己的研究。

     我选用海康监控,因为目前只能接触到这种监控,其他的品牌应该差不多。关键是思路。

     在这篇文章里面,实现1)控制监控摄像头获取图像2)用opencv进行简单处理3)获得量化数据一个过程。需要注意的一点是,我这里没有直接对视频流进行操作,因为目前我还没有这个需求。而是对截获的图片进行操作,进行处理,达到内容分析的目的。

 

二、主要步骤

     ​1)获取并利用海康SDK,得到输入图像

        官网获得CH-HCNetSDK(Windows32)V4.3.0.6.zip,里面有文档和java/mfc/csharp的demo.基于我目前的需求,采用csharp编写图像获取界面,改写“1-实时预览示例代码一”相关内容。

     

       代码内容清晰完整,是标准的调用dll的模式。其中获取图片部分为

 


        private void btnJPEG_Click(object sender, EventArgs e)

        {
            string sJpegPicFileName;
            //图片保存路径和文件名 the path and file name to save
            sJpegPicFileName = "JPEG_test.jpg";
            int lChannel = Int16.Parse(textBoxChannel.Text); //通道号 Channel number
            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            lpJpegPara.wPicQuality = 0//图像质量 Image quality
            lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
            //JPEG抓图 Capture a JPEG picture
            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
                MessageBox.Show(str);
                return;
            }
            else
            {
                str = "Successful to capture the JPEG file and the saved file is " + sJpegPicFileName;
                MessageBox.Show(str);
            }
            return;
        }

 

   添加Timer事件,每5秒运行一次,自动获取图像,文件名为当前时间,并对原代码略作修改

 


    
  //将时间补足两位
        string timehelper(int iinput)
        {
            if (iinput<10)
            {
                return "0" + iinput.ToString();
            }
            else
            {
                return iinput.ToString();
            }
        }
        //auto jpeg
        private void timer1_Tick(object sender, EventArgs e)
        {
            string sJpegPicFileName;
            //图片保存路径和文件名 the path and file name to save
            sJpegPicFileName = "F:/test/" + DateTime.Now.ToShortDateString() + "_" + timehelper(DateTime.Now.Hour) + "_" + timehelper(DateTime.Now.Minute) + "_" + timehelper(DateTime.Now.Second) + ".jpg";
 
            int lChannel = Int16.Parse(textBoxChannel.Text); //通道号 Channel number
 
            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            lpJpegPara.wPicQuality = 0; //图像质量 Image quality
            lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 2- 4CIF,0xff- Auto(使用当前码流分辨率),抓图分辨率需要设备支持,更多取值请参考SDK文档
 
            //JPEG抓图 Capture a JPEG picture
            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                str = "NET_DVR_CaptureJPEGPicture failed, error code= " + iLastErr;
       
            }
            else
            {
                str = "Successful to capture the JPEG file and the saved file is " + sJpegPicFileName;
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string sJpegPicFileName = DateTime.Now.ToShortDateString() + "_" + DateTime.Now.Hour + "_" + DateTime.Now.Minute + "_" +DateTime.Now.Second + ".jpg";
 
        }
    }

 

 

 

 

   OK经过观察,没有出现内存溢出,可以使用。如果是多个监控一起使用的话可能会有新的问题,希望有相关经验的高手能够指导。

   如果是实际使用的话,还需要添加对图片进行相关的删除操作,保障硬盘不要溢出。

    2)编写opencv服务,对图像进行分析

 

     我是这样理解“服务”的。所谓服务,就是运行在后台,能够自动处理输入的数据,得到用户想要的结果的。如果监控要想能够“智能”起来,所获得的就不只是图片,而是包含图片相关内容的分析,是一个量化的过程。。

     这里就是简单地获取最新的图片,寻找轮廓数目,并且将其打印出来这样一个过程。


// HelicopterStitching.cpp : 定义控制台应用程序的入口点。
// 2015年1月22日20:29:38 jsxyhelu
# include  "stdafx.h"
# include  <cv.h >
# include  <cxcore.h >
# include  <highgui.h >
# include  "opencv2/highgui/highgui.hpp"
# include  "opencv2/imgproc/imgproc.hpp"                    
# include  "Prehelper.h"
# include  "GOFunction.h"
# include  "LaplacianBlend.h"
 
int _tmain( int argc, _TCHAR * argv[])
{    
    vector <Mat > inputmat;
    vector <Mat > outputmat;
    vector <cv : :Point2f > points1;
    vector <cv : :Point2f > points2;
    vector <Point > locmat1;
    vector <Point > locmat2;
     int i;
     //读入参数
    FILE  *stream;
     int   numread, numwritten;
     //定义文件路径 
     char * cur_dir = "F:\\test";
     int iimagesize  = 0;
    Mat src;
    Mat src_gray;
    vector <pair < char *,Mat >> imgs;
    
    Mat  canny_output;
    vector <vector <Point >   >  contours;
    vector <Vec4i >  hierarchy;
     int thresh  = 50;
     while( true)
    {    
        imgs  = read_img(cur_dir);
         if (imgs.size() > 0)
        {
            src  = imgs[imgs.size() - 1].second; //获得最新的图片
            imshow( "src",src);    
            cvtColor(src,src_gray,CV_RGB2GRAY);
            Canny(  src_gray,  canny_output,  thresh,  thresh * 2,   3  );
             ///  Find  contours
            findContours(  canny_output,  contours,  hierarchy,  CV_RETR_TREE,  CV_CHAIN_APPROX_SIMPLE,  Point( 0,   0)  );
            imshow( "canny_output",canny_output);
            printf(     "找到轮廓%d个\n",contours.size());
        }
    
        cv : :waitKey( 3000); //等待3秒
    }
    
    cv : :waitKey();
     return  0;
}

三、小结反思

     这样一个项目,原理并不复杂。其鲁棒性如何,在高并发的情况下是否会出现新的问题,都需要进一步验证。但是的确是一种引入监控图像的方法,并且得到了“智能分析”的结果。

     感谢阅读到此,希望有经验者能够提出宝贵意见,希望对你有所帮助。

 



目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
7月前
|
机器学习/深度学习 监控 算法
智能监控领域的革新者:基于深度学习的图像识别技术
【4月更文挑战第21天】 随着人工智能技术的迅猛发展,尤其是深度学习在计算机视觉领域的突破性进展,基于深度学习的图像识别技术已成为智能监控系统中不可或缺的核心。本文旨在探讨这一技术如何优化智能监控系统,提高安全防范效率与准确性。文中首先介绍了深度学习的基本概念及其在图像处理中的关键作用,然后详细阐述了深度学习模型如卷积神经网络(CNN)在智能监控中的应用实例和效果,最后讨论了目前所面临的挑战及未来的发展方向。通过实验数据和案例分析,本文揭示了深度学习技术在智能视频监控领域的巨大潜力。
|
7月前
|
机器学习/深度学习 边缘计算 监控
深度学习驱动下的智能监控革新:图像识别技术的突破与应用
【4月更文挑战第23天】 在智能监控系统的迅猛发展背后,深度学习技术起着至关重要的角色。本文旨在探讨基于深度学习的图像识别技术如何推动智能监控系统向更高效、准确的方向发展。首先,文章概述了深度学习在图像处理领域的关键进展,并分析了这些进展如何被具体应用于智能监控中。其次,通过实例分析,揭示了深度学习算法在提高目标检测、行为识别和异常事件检测准确率方面的潜力。最后,讨论了智能监控系统面临的主要挑战及其未来发展方向。
|
7月前
|
机器学习/深度学习 监控 算法
基于深度学习的图像识别技术在智能监控领域的应用
随着人工智能技术的飞速发展,尤其是深度学习在图像处理领域的突破性进展,使得基于图像识别的智能监控系统成为可能。本文旨在探讨利用卷积神经网络(CNN)为核心的图像识别技术在智能视频监控中的应用,分析其在实时异常行为检测、人脸识别和物体跟踪等方面的实际效能,并讨论当前技术面临的挑战及未来发展趋势。
|
7月前
|
机器学习/深度学习 存储 监控
Kubernetes 集群的持续监控与性能优化策略深度学习在图像识别中的应用与挑战
【5月更文挑战第29天】 在当今微服务架构和容器化部署的大背景下,Kubernetes 已成为众多企业的首选平台。然而,随着集群规模的扩大和业务复杂性的增加,如何确保系统的高可用性和性能稳定性成为一个挑战。本文将探讨针对 Kubernetes 集群实施的持续监控方案以及针对性能瓶颈的优化策略,旨在帮助运维人员有效管理和提升其服务的质量。
|
7月前
|
机器学习/深度学习 人工智能 监控
深度学习在智能监控图像识别技术中的革新应用
【4月更文挑战第22天】 随着人工智能的飞速发展,深度学习技术已成为推动智能监控系统进步的关键力量。本文旨在探讨基于深度学习的图像识别技术如何优化智能监控系统,提高其准确性与效率。我们将介绍深度学习模型在处理视频监控数据时的核心机制,以及这些技术如何助力于异常行为检测、人脸识别和物体追踪等关键功能。此外,文中还将讨论目前面临的挑战和未来的发展方向,为读者提供一个关于此交叉学科领域当前进展与未来趋势的全面视角。
46 3
|
7月前
|
机器学习/深度学习 人工智能 监控
深度学习赋能智能监控:图像识别技术的进阶应用
【4月更文挑战第22天】 随着人工智能的飞速发展,特别是深度学习技术的突破,图像识别在智能监控系统中扮演着日益重要的角色。本文旨在探讨基于深度学习的图像识别技术如何革新现代智能监控系统,提升其准确性和效率。首先,文中将介绍深度学习在图像处理领域的基础原理及其关键算法。接着,分析当前智能监控面临的挑战及深度学习提供的解决方案。最后,通过案例研究,展示深度学习在实际智能监控中的应用成效,并讨论其对未来监控技术发展的影响。
|
7月前
|
机器学习/深度学习 运维 监控
深度学习在智能监控领域的革新:图像识别技术的崛起
【4月更文挑战第23天】 随着人工智能技术的飞速发展,深度学习已经成为推动计算机视觉进步的核心技术之一。特别是在智能监控领域,基于深度学习的图像识别技术正逐渐改变着安全监控的传统模式,提升系统的智能化水平。本文将探讨基于深度学习的图像识别技术在智能监控系统中的应用现状与挑战,分析其在目标检测、行为分析以及异常事件识别中的作用,并展望其未来发展趋势。
|
7月前
|
机器学习/深度学习 人工智能 监控
深度学习赋能智能监控:图像识别技术的革新与应用
【4月更文挑战第23天】 随着人工智能的迅猛发展,尤其是深度学习在图像处理领域的突破性进展,智能监控系统已经迎来了一场技术革命。本文旨在探讨基于深度学习的图像识别技术在智能监控中的实际应用,并分析其对提高监控效率、确保公共安全和推动智慧城市建设的重要性。我们将重点讨论卷积神经网络(CNN)和循环神经网络(RNN)等模型在实时视频分析和异常行为检测中的应用,并展示如何通过这些技术实现高效准确的监控。
|
7月前
|
机器学习/深度学习 边缘计算 监控
深度学习赋能智能监控:图像识别技术的革新与应用
【4月更文挑战第23天】 随着人工智能的迅猛发展,深度学习技术在图像处理领域取得突破性进展,特别是在智能监控系统中,基于深度学习的图像识别已成为提升系统智能化水平的核心动力。本文旨在探讨深度学习如何优化智能监控系统中的图像识别过程,提高监控效率和准确性,并分析其在不同应用场景下的具体实施策略。通过深入剖析关键技术、挑战及解决方案,本文为读者提供了一个关于深度学习图像识别技术在智能监控领域应用的全面视角。
|
7月前
|
机器学习/深度学习 监控 安全
智能监控的革新者:基于深度学习的图像识别技术
【4月更文挑战第23天】 在智能监控领域,基于深度学习的图像识别技术已经成为一种革命性的工具。这种技术能够自动识别和分类图像中的对象,提供实时的、准确的信息,从而提高监控系统的效率和准确性。本文将探讨深度学习在图像识别中的应用,以及其在智能监控中的潜在价值。