客户端要访问ONVIF设备(IPC)的动检,一是事件,二是设置;
此处就是讨论如何设置动检区域的。
通过Video Analytics/Cell Motion Detection可以了解到关于动检的一些ONVIF配置。
参考Video Analytics.– -34- Annex B. Cell Motion Detection
规则定义
<tt:RuleDescription Name="tt:CellMotionDetector"> <tt:Parameters> <tt:SimpleItemDescription Name="MinCount" Type="xs:integer"/> <tt:SimpleItemDescription Name="AlarmOnDelay" Type="xs:integer"/> <tt:SimpleItemDescription Name="AlarmOffDelay" Type="xs:integer"/> <tt:SimpleItemDescription Name="ActiveCells" Type="xs:base64Binary"/> </tt:Parameters> <tt:MessageDescription IsProperty="true"> <tt:Source> <tt:SimpleItemDescription Name="VideoSourceConfigurationToken" Type="tt:ReferenceToken"/> <tt:SimpleItemDescription Name="VideoAnalyticsConfigurationToken" Type="tt:ReferenceToken"/> <tt:SimpleItemDescription Name="Rule" Type="xs:string"/> </tt:Source> <tt:Data> <tt:SimpleItemDescription Name="IsMotion" Type="xs:boolean"/> </tt:Data> <tt:ParentTopic> tns1:RuleEngine/CellMotionDetector/Motion </tt:ParentTopic> </tt:MessageDescription> </tt:RuleDescription>
<tt:AnalyticsModuleDescription Name="tt:CellMotionEngine"> <tt:Parameters> <tt:SimpleItemDescription Name="Sensitivity" Type="xs:integer"/> <tt:ElementItemDescription Name="Layout" Type="tt:CellLayout"/> </tt:Parameters> </tt:AnalyticsModuleDescription>
<xs:complexType name="CellLayout"> <xs:sequence> <xs:element name="Transformation" type="tt:Transformation"/> <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Columns" type="xs:integer" use="required"/> <xs:attribute name="Rows" type="xs:integer" use="required"/> <xs:anyAttribute processContents="lax"/> </xs:complexType>
<tt:VideoAnalyticsConfiguration> <tt:RuleEngineConfiguration> <tt:Rule Name="MyMotionDetector" Type="tt:CellMotionDetector"> <tt:Parameters> <tt:SimpleItem Name="MinCount" Value="4"/> <tt:SimpleItem Name="AlarmOnDelay" Value="1000"/> <tt:SimpleItem Name="AlarmOffDelay" Value="1000"/> <tt:SimpleItem Name="ActiveCells" Value="/v/+8A=="/> </tt:Parameters> </tt:Rule> </tt:RuleEngineConfiguration> </tt:VideoAnalyticsConfiguration>
ActiveCells : 灰色表示已选单元格,图示对其按位掩码表示的十六进制表示为: "ff ff ff f0 f0 f0". 再应用Packbit 算法压缩则得到的字节序列为: "fe ff fe f0". 最后,通过base64Binary编码该序列则得到这样一串值: "/v/+8A==";
提示:
<tt:VideoAnalyticsConfiguration> <tt:AnalyticsEngineConfiguration> <tt:AnalyticsModule Name="MyCellMotion" Type="tt:CellMotionEngine"> <tt:Parameters> <tt:SimpleItem Name="Sensitivity" Value="90"/> <tt:ElementItem Name=”Layout”> <tt:CellLayout Columns="8" Rows="6"> <tt:Transformation> <tt:Translate x="-0.66666" y="-0.6" /> <tt:Scale x="0.1666666" y="-0.2" /> </tt:Transformation> </tt:CellLayout> </tt:ElementItem> </tt:Parameters> </tt:AnalyticsModule> </tt:AnalyticsEngineConfiguration>
我们主要需要理解的是Transformation信息。关键是这个数据是如何度量的。
ONVIF默认参考系是原点设在画面中央,参考5.1.2.2 Spatial Relation 的example, 所举例详述是将320*240分割成2*2形式,原点置中央,其中比例与原尺寸关系为
Image.Size*Scale = [2,2];
现在再来看当前举例,此时并非2*2,而是8*6,不过我们可以抓住上例关系。可以得知到,Image.Size*[Scale] = 2*Cell.Size.
此时,我们发现[Scale]和5.1.2.2中例是有差异的这个[Scale]是坐标单位转换的缩放尺度,我们需要从单元格的尺度来来度量这个坐标转换关系,因此,
这个向量是平移的缩放度量,
因此,通过这个向量我们可以计算出原点在默认参考系中的坐标值;即Translate/Scale 得到原点在默认参考系的是坐标是(-4,3);
这个向量是比例的缩放度量。
根据Image.Size,通过该向量可以计算出单元格的像素大小。