C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll] (下)
2009-04-08 08:23:46 来源:WEB开发网#region 3.6移动侦测
// 释 义: 移动侦测
//DS4000HC提供运动强度信息来处理运动检测,设置移动侦测区域时以32*32像素块为
//单位,按4CIF(704*576)分辨率计算,每行有22个块(704/32),PAL时18行(576/32),
//NTSC时15行(480/32),与编码格式无关。经过测试,这种方法比H卡提高了灵敏度和可
//靠性,并简化了返回的数据,返回的值是18个DWORD,对应屏幕高度576/32=18行(PAL),
//每个DWORD的0-21位对应屏幕宽度704/32=22, 其中1为运动,0为静止,也可以调用原有
//MotionAnalyzer分析结果
//4.0版本的SDK新增了接口函数SetupMotionDetectionEx,提供了更灵活的功能,并且
//简化了用户的工作量。
#region 3.6.1设置方式一
// 设置移动侦测相关参数并启动移动侦测后,运动检测信息会通过数据流传送,用户程序
//发现PktMotionDetection帧类型时,可调用MotionAnalyzer来处理运动信息,结果由
//MotionAnalyzer在iResult中返回。也可以按照SDK提供的数据格式来自己分析,运动信息格
//式参见移动侦测释义。
/// <summary>
/// 3.6.1.1设置移动侦测灵敏度
/// 说 明: 调整运动分析的灵敏度,支持动态调整,此函数决定DSP全局运动分析的灵敏度。
/// 而MotionAnalyzer的iThreshold则主要用于分析指定区域的运动统计结果。
///
/// int __stdcall AdjustMotionDetectPrecision(HANDLE hChannelHandle, int iGrade, int iFastMotionDetectFps, int iSlowMotionDetectFps)
/// </summary>
/// <param name="hChannelHandle">通道句柄</param>
/// <param name="iGrade">
/// 运动分析灵敏度等级,取值范围0-6,0级最灵敏,6级最迟钝,推荐值为2。
/// 将iGrade和“0x80000000“做”或“操作,会对移动侦测启用自适应分析。
/// </param>
/// <param name="iFastMotionDetectFps">高速运动检测的帧间隔,取值范围0-12,0表示不作高速运动检测,通常值取为2</param>
/// <param name="iSlowMotionDetectFps">低速运动检测的帧间隔,取值范围13以上,当取值为0时,不作低速运动检测</param>
/// <returns>成功返回0;失败返回错误号</returns>
[DllImport("DS40xxSDK.dll")]
public static extern int AdjustMotionDetectPrecision(IntPtr hChannelHandle, int iGrade, int iFastMotionDetectFps, int iSlowMotionDetectFps);
/// <summary>
/// 3.6.1.2设置移动侦测区域范围及个数
/// 说 明: 设置运动检测区域;当收到运动信息的数据帧(PktMotionDetection)时,调用
/// MotionAnalyzer;MotionAnalyzer会根据在SetupMotionDetection中的设置来分析每个需要
/// 检测的区域,当某区域的阀值(MotionAnalyzer的iThreshold)到达时,会在返回的区域数组
/// (MotionAnalyzer的iResult)标明最后的判断;矩形框范围是(0,0,703,575)
///
/// int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas)
/// </summary>
/// <param name="hChannelHandle">通道句柄</param>
/// <param name="RectList">矩形框数组</param>
/// <param name="iAreas">矩形框个数,最大值为100</param>
/// <returns>成功返回0;失败返回错误号</returns>
[DllImport("DS40xxSDK.dll")]
public static extern int SetupMotionDetection(IntPtr hChannelHandle, ref Rectangle RectList, int iAreas);
/// <summary>
/// 3.6.1.3移动侦测分析
/// 说 明: 动态监测分析,移动侦测由DSP完成,DSP送出的IPktMotionData帧就是已经
/// 分析好的运动信息,区域的运动分析由主机完成,数据源由码流中的PktMotionData帧提供,
/// 结果在iResult中说明,2.0以上版本的运动分析基于DSP提供的运动强度,不再使用运动
/// 矢量,其灵敏度及可靠性有大幅提高,用户软件可使用由码流提供的运动强度信息来自己分
/// 析或调用该函数来进行区域分析
///
/// 函 数: int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold, int *iResult)
/// </summary>
/// <param name="hChannelHandle">通道句柄</param>
/// <param name="MotionData">运动矢量指针</param>
/// <param name="iThreshold">判断运动程度的伐值</param>
/// <param name="iResult">按照伐值指定的强度分析后的结果数组。数组的大小在SetupMotionDetection的numberOfAreas指定,如果某数组单元的值大于零则表明有该区域有该值表明的运动强度</param>
/// <returns>成功返回0;失败返回错误号 </returns>
[DllImport("DS40xxSDK.dll")]
public static extern int MotionAnalyzer(IntPtr hChannelHandle, char[] MotionData, int iThreshold, ref int iResult);
#endregion
#region 3.6.2设置方式二
/// <summary>
/// 3.6.2.1设置移动侦测(扩展)
/// 说 明: 设置移动侦测,这种设置方式可替代设置方式一中3个函数的共同作用,在这种情况下,DSP将不再反馈移动侦测帧。
/// 参数delay:画面静止之后的延时时间,单位为秒,若在该延时时间内没有产生
/// 移动侦测,则将回调函数MotionDetectionCallback之中的参数bMotionDetected标志为False,
/// 若在该延时时间之内,在当前所设置的区域内产生移动侦测,则bMotionDetected被标志为
/// True,并且在产生移动侦测之后的delay时间内,DSP不会对在此时间段之内的视频帧进行
/// 移动侦测分析,因此DSP和主机都省却了在此时间段对产生的视频运动进行频繁判断和分
/// 析。直至超过了此delay秒延时时间,DSP才会对此时刻的视频进行判断,若产生了移动侦
/// 测,则回调函数中的bMotionDetected被再次标志为True,否则标志为False。
///
///
/// 函 数: int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade, int iFastMotionDetectFps, int iSlowMotionDetectFps,UINT delay,RECT *RectList, int iAreas, MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved)
/// </summary>
/// <param name="hChannelHandle">通道句柄</param>
/// <param name="iGrade">
/// 运动分析灵敏度等级,取值范围0-6,0级最灵敏,6级最迟钝,
/// 推荐值2。将iGrade和“0x80000000“做”或“操作,会对移动侦测启用
/// 自适应分析。
/// </param>
/// <param name="iFastMotionDetectFps">高速运动检测的帧间隔,取值范围0-12,0表示不作高速运动检测,通常值取为2</param>
/// <param name="iSlowMotionDetectFps">低速运动检测的帧间隔,取值范围13以上,当取值为0时,不作低速运动检测</param>
/// <param name="delay">前一次移动帧测产生后的延时时间</param>
/// <param name="RectList">进行移动侦测的矩形框数组</param>
/// <param name="iAreas">矩形框个数(最大个数为100)</param>
/// <param name="MotionDetectionCallback">移动侦测结果回调函数 </param>
/// <param name="reserved">保留参数</param>
/// <returns>成功返回0;失败返回错误号</returns>
[DllImport("DS40xxSDK.dll")]
public static extern int SetupMotionDetectionEx(IntPtr hChannelHandle, int iGrade, int iFastMotionDetectFps, int iSlowMotionDetectFps, uint delay, ref Rectangle RectList, int iAreas, MOTION_DETECTION_CALLBACK MotionDetectionCallback, int reserved);
#endregion
#region 3.6.3启动及停止移动侦测
/// <summary>
/// 3.6.3.1启动移动侦测
/// 说 明: 启动移动侦测。
/// 注意:移动侦测和编码相互独立,用户程序可在不启动编码的情况下进行运动检测
///
/// int __stdcall StartMotionDetection(HANDLE hChannelHandle)
/// </summary>
/// <param name="hChannelHandle">通道句柄</param>
/// <returns>成功返回0;失败返回错误号</returns>
[DllImport("DS40xxSDK.dll")]
public static extern int StartMotionDetection(IntPtr hChannelHandle);
/// <summary>
/// 3.6.3.2停止移动侦测
/// 说 明: 停止移动侦测
///
/// int __stdcall StopMotionDetection(HANDLE hChannelHandle)
/// </summary>
/// <param name="hChannelHandle"></param>
/// <returns></returns>
[DllImport("DS40xxSDK.dll")]
public static extern int StopMotionDetection(IntPtr hChannelHandle);
#endregion
#endregion
更多精彩
赞助商链接