From eda1a611bc4afcf1c36a6c728f432aec1f688e1b Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 27 六月 2022 19:13:36 +0800 Subject: [PATCH] 'GP代码识别' --- ConsoleApplication/RecognitionManager.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 52 insertions(+), 0 deletions(-) diff --git a/ConsoleApplication/RecognitionManager.cpp b/ConsoleApplication/RecognitionManager.cpp index 171c7dd..bec0797 100644 --- a/ConsoleApplication/RecognitionManager.cpp +++ b/ConsoleApplication/RecognitionManager.cpp @@ -1,5 +1,17 @@ #include "RecognitionManager.h" + + +RecognitionManager::RecognitionManager() { + openCLExcuter = new OpenCLExcuter(); + openCLExcuter->init(); +} + +RecognitionManager::~RecognitionManager() { + openCLExcuter->destory(); +} + + TradeData RecognitionManager::recognition(cv::Mat img, int* rowData) { TradeData tradeData = {}; for (int index = 1;index < 8;index++) { @@ -506,4 +518,44 @@ LogUtil::debug("识别结果:%s\n", st.c_str()); return st; +} + +list<uchar> RecognitionManager::recognitionGPCode(list<cv::Mat> imgList) { + + unsigned char* totalNumberData = (unsigned char*)malloc(sizeof(unsigned char) * (_NUMBER_GP_CODE_HEIGHT * 1) * _NUMBER_GP_CODE_WIDTH * 10 * imgList.size()); + list<cv::Mat>::iterator ele; + int i = 0; + for (ele= imgList.begin();ele!= imgList.end();++ele) + { + int index_2 = i * 10 * _NUMBER_GP_CODE_WIDTH; + for (int n = 0;n < 10;n++) + { + int index_3= n * _NUMBER_GP_CODE_WIDTH; + cv::Mat img = ImgUtil::formatNumGPCode(*ele); + + for (int r = 0;r < _NUMBER_GP_CODE_HEIGHT;r++) + { + int index_1 = r * imgList.size()* 10 * _NUMBER_GP_CODE_WIDTH; + for (int c = 0;c < _NUMBER_GP_CODE_WIDTH;c++) { + int index = index_1 + index_2+index_3 + c; + totalNumberData[index] = (img.ptr<uchar>(r)[c] >= _IMG_BINARY_THRESHOLD) ? 1 : 0; + } + } + } + i++; + } + + + uchar* templateNums = (unsigned char*)malloc(sizeof(unsigned char) * (_NUMBER_GP_CODE_HEIGHT * 1) * _NUMBER_GP_CODE_WIDTH * 10 * imgList.size()); + openCLExcuter->createNumberTemplates(1, _NUMBER_GP_CODE_WIDTH, _NUMBER_GP_CODE_HEIGHT, imgList.size(),ImgUtil::numsOneLevel_gpcode, templateNums); + + + + uchar** numberResult = openCLExcuter->recognition_numbers(totalNumberData, templateNums, 1 * _NUMBER_GP_CODE_HEIGHT, _NUMBER_GP_CODE_WIDTH * 10* imgList.size(), _NUMBER_GP_CODE_WIDTH, _NUMBER_GP_CODE_HEIGHT, imgList.size()); + list<uchar> resultList; + for (int i = 0;i < imgList.size();i++) { + uchar num= numberResult[0][i]; + resultList.push_back(num); + } + return resultList; } \ No newline at end of file -- Gitblit v1.8.0