// // Created by Jack Yu on 23/10/2017. // #include "../include/Pipeline.h" #include #include using namespace std; template static unsigned int levenshtein_distance(const T &s1, const T &s2) { const size_t len1 = s1.size(), len2 = s2.size(); std::vector col(len2 + 1), prevCol(len2 + 1); for (unsigned int i = 0; i < prevCol.size(); i++) prevCol[i] = i; for (unsigned int i = 0; i < len1; i++) { col[0] = i + 1; for (unsigned int j = 0; j < len2; j++) col[j + 1] = min( min(prevCol[1 + j] + 1, col[j] + 1), prevCol[j] + (s1[i] == s2[j] ? 0 : 1)); col.swap(prevCol); } return prevCol[len2]; } void TEST_CAM() { cv::VideoCapture capture("test1.mp4"); cv::Mat frame; pr::PipelinePR prc("../lpr/model/cascade.xml", "../lpr/model/HorizonalFinemapping.prototxt", "../lpr/model/HorizonalFinemapping.caffemodel", "../lpr/model/Segmentation.prototxt", "../lpr/model/Segmentation.caffemodel", "../lpr/model/CharacterRecognization.prototxt", "../lpr/model/CharacterRecognization.caffemodel", "../lpr/model/SegmenationFree-Inception.prototxt", "../lpr/model/SegmenationFree-Inception.caffemodel" ); while (1) { //读取下一帧 if (!capture.read(frame)) { std::cout << "读取视频失败" << std::endl; exit(1); } // // cv::transpose(frame,frame); // cv::flip(frame,frame,2); // cv::resize(frame,frame,cv::Size(frame.cols/2,frame.rows/2)); std::vector res = prc.RunPiplineAsImage(frame, pr::SEGMENTATION_FREE_METHOD); for (auto st : res) { if (st.confidence > 0.75) { std::cout << st.getPlateName() << " " << st.confidence << std::endl; cv::Rect region = st.getPlateRect(); cv::rectangle(frame, cv::Point(region.x, region.y), cv::Point(region.x + region.width, region.y + region.height), cv::Scalar(255, 255, 0), 2); } } cv::imshow("image", frame); cv::waitKey(1); } } void TEST_ACC() { pr::PipelinePR prc("../lpr/model/cascade.xml", "../lpr/model/HorizonalFinemapping.prototxt", "../lpr/model/HorizonalFinemapping.caffemodel", "../lpr/model/Segmentation.prototxt", "../lpr/model/Segmentation.caffemodel", "../lpr/model/CharacterRecognization.prototxt", "../lpr/model/CharacterRecognization.caffemodel", "../lpr/model/SegmenationFree-Inception.prototxt", "../lpr/model/SegmenationFree-Inception.caffemodel" ); ifstream file; string imagename; int n = 0, correct = 0, j = 0, sum = 0; char filename[] = "/Users/yujinke/Downloads/general_test/1.txt"; string pathh = "/Users/yujinke/Downloads/general_test/"; file.open(filename, ios::in); while (!file.eof()) { file >> imagename; string imgpath = pathh + imagename; std::cout << "------------------------------------------------" << endl; cout << "图片名:" << imagename << endl; cv::Mat image = cv::imread(imgpath); // cv::imshow("image", image); // cv::waitKey(0); std::vector res = prc.RunPiplineAsImage(image, pr::SEGMENTATION_FREE_METHOD); float conf = 0; vector con; vector name; for (auto st : res) { if (st.confidence > 0.1) { //std::cout << st.getPlateName() << " " << st.confidence << std::endl; con.push_back(st.confidence); name.push_back(st.getPlateName()); //conf += st.confidence; } else cout << "no string" << endl; } // std::cout << conf << std::endl; int num = con.size(); float max = 0; string platestr, chpr, ch; int diff = 0, dif = 0; for (int i = 0; i < num; i++) { if (con.at(i) > max) { max = con.at(i); platestr = name.at(i); } } // cout << "max:"< res = prc.RunPiplineAsImage(image, pr::SEGMENTATION_FREE_METHOD); for (auto st : res) { if (st.confidence > 0.75) { std::cout << st.getPlateName() << " " << st.confidence << std::endl; cv::Rect region = st.getPlateRect(); cv::rectangle(image, cv::Point(region.x, region.y), cv::Point(region.x + region.width, region.y + region.height), cv::Scalar(255, 255, 0), 2); } } cv::imshow("image", image); cv::waitKey(0); } int main() { // TEST_ACC(); // TEST_CAM(); TEST_PIPELINE(); return 0; }