admin
2022-06-27 eda1a611bc4afcf1c36a6c728f432aec1f688e1b
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;
}