HyperLPR
HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP、C/C++、Python语言,Windows/Mac/Linux/Android/IOS 平台。项目源码
HyperLPR的下载
#安装opencv4.0及以上
#安装cmake3.0以上版本,支持c++11的c++编译器,如gcc-6.3
https://gitee.com/zeusees/HyperLPR.git
有源码测试
测试代码
#include <../include/PlateDetection.h>
void drawRect(cv::Mat image,cv::Rect rect)
{
cv::Point p1(rect.x,rect.y);
cv::Point p2(rect.x+rect.width,rect.y+rect.height);
cv::rectangle(image,p1,p2,cv::Scalar(0,255,0),1);
}
int main(int argc,char** argv)
{
cv::Mat image = cv::imread(argv[1],1);
if ( !image.data )
{
printf("No image data \n");
return -1;
}
pr::PlateDetection plateDetection("model/cascade.xml");
std::vector<pr::PlateInfo> plates;
plateDetection.plateDetectionRough(image,plates);
for(pr::PlateInfo platex:plates)
{
drawRect(image,platex.getPlateRect());
cv::imwrite("res/cache/test.png",platex.getPlateImage());
cv::imshow("image",platex.getPlateImage());
cv::waitKey(0);
}
cv::imshow("image",image);
cv::waitKey(0);
return 0 ;
}
配置
对于完整的项目,需要将编译器指定为 afl-clang,然后再进行编译。
export CC=afl-clang
export CXX=afl-clang++
mkdir build
cd build
cmake ../
make -j4
fuzz
正式执行 fuzz 测试的命令如下:
mkdir in
# 在in文件下下创建image语料库
afl-fuzz -m none -i in -o out_res ./TEST_Detection -i @@
测试结果
黑盒测试
配置
首先在下载好 HyperLPR 后,对 HyperLPR 直接进行编译安装,生成二进制文件。
cd HyperLPR
cd Prj-Linux
mkdir build
cd build/
cmake ../
make -j4
# make的时候会出现与opencv4的很多兼容问题,下面有解决方案。
启用QEMU模式,要先编译。
# 进入到AFLplusplus所在位置
cd qemu_mode
./build_qemu_support.sh
fuzz
afl-fuzz -Q -m none -i in -o out_res ./TEST_Detection -i @@
测试结果
注意事项
-
CMake Error at lpr/CMakeLists.txt:6 (find_package): Could not find a configuration file for package “OpenCV” that is compatible with requested version “3.3.0”.
打开CMakeLists.txt文件,然后将opencv 3.3.0改为4.0.0,这样opencv4以上的版本就可以使用了。 -
HyperLPR/Prj-Linux/lpr/src/util.h:65:44: note : suggested alternative: ‘CV_CPU_NONE’ return cv::compareHist(histA,histB,CV_COMP_CORREL);
源文件中加入 #include <opencv2/imgproc/types_c.h> -
/HyperLPR/Prj-Linux/lpr/src/…/include/niBlackThreshold.h:65:27: error: ‘CV_StsBadArg’ was not declared in this scope CV_Error( CV_StsBadArg, “Unknown binarization method” );
源文件中加入 #include <opencv2/imgproc/types_c.h> -
HyperLPR/Prj-Linux/lpr/tests/test_pipeline.cpp:41:14: error: aggregate ‘std::ifstream file’ has incomplete type and cannot be defined
在源文件加入 #include <fstream>