LPRSDK2.0编程手册2007.04.09版本历史2007.04.09加入LPR::ProcessImage2函数的说明和对图片的“帧类型”和“场类型”的说明。第一部分概述LPRSDK是一个支持单张识别和视频识别方式的车牌识别软件开发包。除了能支持在单张图片上作车牌识别外,LPRSDK能对连续视频中的车牌进行实时识别(要求CPU在P41.8G以上),而且灵活性高(对车辆行驶方向和车牌大小适应性强),有很高的识别率(一般95%)。除了核心的车牌识别功能外,SDK还提供视频采集等辅助功能以便开发商进行二次开发。LPRSDK以DLL以及相关的头文件和库文件的形式提供,应用程序通过C++接口调用DLL提供的功能。SDK从功能上分为视频识别模块,单张识别模块,图像模块,采集模块,显示模块,录像模块等几部分,以下分别对各个模块进行介绍。第二部分视频识别模块视频识别模块介绍视频识别模块提供对连续视频流中的车牌进行实时识别的功能。视频识别模块位于LPREngine.dll,应用程序使用识别模块时需要包含LPREngine.h并链接LPREngine.lib。LPREngine类封装了识别模块的主要功能。一个LPREngine类的对象用于识别一路视频,通过使用多个LPREngine对象,可以很容易同时进行多路视频识别。LPREngine对象的结构如图1所示:LPREngine对象输入缓冲区输出缓冲区调用AddInput函数提交图像数据定时(比如每隔20ms)调用GetOutput函数获取识别结果图1应用程序一般按如下流程使用LPREngine对象:1.应用程序调用Init函数初始化LPREngine对象,各种识别参数由一个LPREngineParam结构变量描述,各参数的说明参见LPREngineParam结构。2.初始化完成后,应用程序调用AddInput将采集到的视频图像提交给LPREngine对象进行识别,AddInput所做的只是把图像放入LPREngine内部的缓冲区,所以AddInput返回时图像还没有识别(参见图1),为了得到识别结果,应用程序需要定时(比如每隔20ms)调用GetOutput函数查询识别结果。3.应用程序定时(比如每隔20ms)调用GetOutput函数查询识别结果,获得结果后可做进一步处理(比如显示,保存等)。4.当应用程序不在使用LPREngine对象时,调用Fini函数释放LPREngine占用的资源。SDK内的LPREngineDemo示例代码演示了如何使用识别模块。视频识别模块参数配置应用程序可以在初始化LPREngine对象时配置识别参数,也可以使用配置文件的方式配置识别参数。识别参数配置文件必须放在应用程序(exe文件)所在目录,文件名为LPR.ini。配置文件基本格式为:param=value其中value可以是整型值,浮点值,布尔值或字符串。以下分别是各种类型参数的例子:maxPlate=1//整型值minValid=1.96//浮点值bCapture=true//布尔值text=sampletext.//字符串LPR.ini内可以配置以下参数(可以只在配置文件内配置部分参数):maxPlate:最多同时识别的车牌数量(整型)。对应于LPRParam结构的nMaxPlate字段。minPlateWidth:最小车牌宽度(整型)。对应于LPRParam结构的nMinPlateWidth字段。maxPlateWidth:最大车牌宽度(整型)。对应于LPRParam结构的nMaxPlateWidth字段。plateType:车牌类型(整型)。对应于LPRParam结构的plateModel.plateType字段。plateCharType_0,plateCharType_1,plateCharType_2,plateCharType_3,plateCharType_4,plateCharType_5,plateCharType_6:车牌各位字符类型(整型)。对应于LPRParam结构的plateModel.plateCharType数组。recogRegion.leftRatio,recogRegion.rightRatio,recogRegion.topRatio,recogRegion.bottomRatio:矩形识别区域。对应于LPREngineParam结构的recogRegion字段。line1.from.xRatio,line1.from.yRatio,line1.to.xRatio,line1.to.yRatio,line2.from.xRatio,line2.from.yRatio,line2.to.xRatio,line2.to.yRatio:双线识别区域(整型)。对应于LPREngineParam结构的line1和line2字段maxSkip:最大遮挡帧数(整型)。对应于LPREgineParam结构的maxSkip字段。minValid:最小车牌置信度(浮点型)。对应于LPREgineParam结构的minValid字段。framePercent:识别比率(整型)。对应于LPREgineParam结构的framePercent字段。bAdaptiveFP:是否打开自适应识别比率(布尔型)。对应于LPREgineParam结构的bAdaptiveFP字段。bCapture:是否打开抓图功能(布尔型)。对应于LPREgineParam结构的bCapture字段。minCaptureDiff:抓图更新阈值(整型)。对应于LPREngineParam结构的minCaptureDiff字段。preferCapRegion.leftRatio,preferCapRegion.rightRatio,preferCapRegion.topRatio,preferCapRegion.bottomRatio:优先抓拍区域(整型)。对应于LPREngineParam结构的preferCapRegion字段。注意:参数配置文件的优先级高于初始化LPREngine对象时的配置。也就是说,如果在初始化LPREngine对象时设置了某一个参数,而同时LPR.ini文件中也配置了该参数,那么识别模块实际使用的将是LPR.ini内的参数。只有当LPR.ini内没有相应的参数时,使用的才是初始化LPREngine对象所用的参数。参数文件配置的例子参见SDK中的“示例参数配置文件LPR.ini”。类,结构,函数参考LPREngine类LPREngine::Init原型:LPRRESULTLPREngine::Init(constLPREngineParam¶m)描述:初始化函数,应用程序在使用LPREngine对象进行识别前需要调用此函数进行初始化,否则其他函数调用会失败。参数:param-车牌识别模块的工作参数,应用程序在调用初始化函数前需要填充各个参数,具体结构说明参见LPREngineParam结构。返回值:大于等于0表示执行成功,小于0表示失败,返回值具体含义参见错误值。LPREngine::Fini原型:LPRRESULTLPREngine::Fini()描述:清理函数,当应用程序不再使用识别模块时,应调用此函数以释放LPREngine占用的资源。参数:无返回值:大于等于0表示执行成功,小于0表示失败,返回值具体含义参见错误值。LPREngine::AddInput原型:LPRRESULTLPREngine::AddInput(constLPREngineInput&input)描述:向LPREngine提交识别数据。原型:input-以LPREngineInput结构描述的输入数据,具体结构说明见LPREngineInput结构。返回值:大于等于0表示执行成功,小于0表示失败,返回值具体含义参见错误值。说明:如果LPREngine内部缓冲区满了的话,函数返回LPR_BUFFER_FULL,表示提交失败,应用程序应该稍后再次尝试调用AddInput提交数据。LPREngine::GetOutput原型:LPRRESULTGetOutput(LPREngineOutput*pOutput)描述:从LPREngine获取识别结果。参数:pOutput-指向用于存放识别结果的LPREngineOutput指针,具体结构说明见LPREngineOutput结构。返回值:大于等于0表示执行成功,小于0表示失败,返回值具体含义参见错误值。说明:应用程序应该定时调用此函数以获取识别结果,建议定时间隔20ms。LPREngineParam结构定义:structLPREngineParam{intsize;LPRParamlprParam;LPRRatioRectrecogRegion;LPRRatioLineline1;LPRRatioLineline2;intmaxSkip;floatminValid;floatminConfid;intframePercent;boolbAdaptiveFP;intmotionDetectionMode;boolbCapture;intminCaptureDiff;LPRRatioRectpreferCapRegion;};描述:LPREngineParam结构包含各种识别参数,用于初始化LPREngine对象。size:结构大小,应用程序在使用LPREngineParam结构前需要把这个字段设为sizeof(LPREngineParam)。除了这个size字段外,应用程序还需要把lprParam.size字段设为sizeof(LPRParam)。lprParam:车牌识别核心参数,具体说明参见LPRParam结构。recogRegion:矩形识别区域。该区域用一个相对于视频画面矩形的“比例矩形”表示(参见LPRRatioRect结构说明)。如果需要指定整个视频画面,可以按如下方式设置recogRegion:recogRegion.leftRatio=0;recogRegion.rightRatio=100;recogRegion.topRatio=0;recogRegion.bottomRatio=100.(此比例矩形即为整个参考矩形)line1,line2:“双线”识别区域。line1和line2指定了两条相对于视频画面的“比例线”(参见LPRRatioLine和LPRRatioPoint的说明),这两条线之间的区域即为“双线识别区域”。如果需要指定整个视频画面,可以按如下方式设置line1和line2;line1.from.xRatio=0;line1.from.yRatio=0;line1.to.xRatio=100;line1.to.yRatio=0;(line1为参考矩形的上边)line2.from.xRatio=0;line2.from.yRatio=100;line2.to.xRatio=100;line2.to.yRatio=100;(line2为参考矩形的下边,这样line1和line2之间的区域即为整个参考矩形)LPREngine的“识别区域”为“矩形识别区域”和“双线识别区域”相交的部分(即公共部分)。LPREngine只在“识别区域”内做车牌检测,视频画面中其他的区域将不做检测。“识别区域”越小,识别模块的计算量就越小,从而CPU占用率越低。开发商可以根据应用场合来设置适当的“识别区域”,在不影响识别的情况下减少CPU的占用。“矩形识别区域”和“双线识别区域”提供了两种不同的方式来设置“识别区域”,开发商可以根据实际情况选择一种或同时使用两种方式来设置所需要的识别区域。如果只使用一种方式设置,把另一种方式的区域设为整个视频画面即可。maxSkip:最大遮挡帧数。在某些应用场合,车牌在视频画面中可能会别暂时遮挡,例如在收费站车牌可能会被杆机遮挡,这类遮挡会导致车牌在视频画面中不连续,识别模块会因此识别出2个或更多的车辆结果。通