https://github.com/xiangweizeng/mobile-lpr
mobile-lpr
Mobile-LPR 是一个面向移动端的准商业级车牌识别库,以NCNN作为推理后端,使用DNN作为算法核心,支持多种车牌检测算法,支持车牌识别和车牌颜色识别。
算法流程
构建及安装
git clone https://github.com/xiangweizeng/mobile-lpr.git
mkdir build
cd build
cmake ..
make install
使用及样例
1.使用MTCNN检测
void test_mtcnn_plate(){
pr::fix_mtcnn_detector("../../models/float", pr::mtcnn_float_detector);
pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::mtcnn_float_detector);
pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
pr::LPRRecognizer lpr = pr::float_lpr_recognizer.create_recognizer();
Mat img = imread("../../image/plate.png");
ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
std::vector<pr::PlateInfo> objects;
detector->plate_detect(sample, objects);
lpr->decode_plate_infos(objects);
for (auto pi : objects)
{
cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
<< pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
}
}
2.使用LFFD检测
void test_lffd_plate()
{
pr::fix_lffd_detector("../../models/float", pr::lffd_float_detector);
pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::lffd_float_detector);
pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
pr::LPRRecognizer lpr = pr::float_lpr_recognizer.create_recognizer();
Mat img = imread("../../image/plate.png");
ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
std::vector<pr::PlateInfo> objects;
detector->plate_detect(sample, objects);
lpr->decode_plate_infos(objects);
for (auto pi : objects)
{
cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
<< pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
}
}
3.使用SSD检测
void test_ssd_plate()
{
pr::fix_ssd_detector("../../models/float", pr::ssd_float_detector);
pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::ssd_float_detector);
pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
pr::LPRRecognizer lpr = pr::float_lpr_recognizer.create_recognizer();
Mat img = imread("../../image/manys.jpeg");
ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
std::vector<pr::PlateInfo> objects;
detector->plate_detect(sample, objects);
lpr->decode_plate_infos(objects);
for (auto pi : objects)
{
cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
<< pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
}
}
4.使用量化模型
void test_quantize_mtcnn_plate(){
pr::fix_mtcnn_detector("../../models/quantize", pr::mtcnn_int8_detector);
pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::mtcnn_int8_detector);
pr::fix_lpr_recognizer("../../models/quantize", pr::int8_lpr_recognizer);
pr::LPRRecognizer lpr = pr::int8_lpr_recognizer.create_recognizer();
Mat img = imread("../../image/plate.png");
ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
std::vector<pr::PlateInfo> objects;
detector->plate_detect(sample, objects);
lpr->decode_plate_infos(objects);
for (auto pi : objects)
{
cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
<< pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
}
}
参考
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有