admin
2022-09-30 1a16b19acb23a4f28bafd01f3ed80fb225a96c3e
ConsoleApplication/kernel.cl
@@ -116,6 +116,8 @@
   //只能识别4种数字
   unsigned char type = types[index % ele_count_per_line];
   //printf("ele_count_line:%d\n", ele_count_line);
      //是否只有一位小数
   bool one_point_num = false;
   //时间
   if (type == 0) {
      //时间
@@ -220,7 +222,9 @@
      //查找单位前的空格
      int num_end = -1;
      int i;
      for (i = endx - 11;i >= startx;i--) {
      //获取是否有单位
      int last_empty_index = -1;
      for (i = endx;i >= startx;i--) {
         bool empty = 1;
         for (int y = starty;y < endy;y++) {
            if (get_binary_value(img_in[get_one_level_position(width, i, y)]) > 0) {
@@ -229,8 +233,29 @@
            }
         }
         if (empty) {
            num_end = i - 1;
            last_empty_index = i;
            break;
         }
      }
      bool hasUnit = false;
      if (endx - last_empty_index > num_width) {
         hasUnit = true;
      }
      //带有单位
      if (hasUnit) {
         for (i = endx - 11;i >= startx;i--) {
            bool empty = 1;
            for (int y = starty;y < endy;y++) {
               if (get_binary_value(img_in[get_one_level_position(width, i, y)]) > 0) {
                  empty = 0;
                  break;
               }
            }
            if (empty) {
               num_end = i - 1;
               break;
            }
         }
      }
@@ -327,10 +352,19 @@
      if (m_s == -1 || m_e == -1) {
         //printf("没找到小数点:%d", index);
         nps[0] = -1;
         nps[1] = -1;
         nps[2] = -1;
         nps[3] = -1;
         if (hasUnit)
         {
            nps[0] = -1;
            nps[1] = -1;
            nps[2] = -1;
            nps[3] = -1;
         }
         else {
            nps[0] = startx;
            nps[1] = starty;
            nps[2] = endx;
            nps[3] = endy;
         }
         nps[4] = -1;
         nps[5] = -1;
@@ -350,6 +384,9 @@
         nps[5] = starty;
         nps[6] = num_end;
         nps[7] = endy;
         if (nps[6] - nps[4] + 1 <= num_width) {
            one_point_num = true;
         }
      }
      nps[8] = -1;
@@ -454,7 +491,7 @@
   }
   //百分比
   else if (type == 5) {
      //百分比数字起始位置
      int percent_start = -1;
      int emptyIndex = -1;
@@ -469,18 +506,19 @@
         }
         if (empty) {
            emptyIndex = i;
         }else if (emptyIndex > 0) {
         }
         else if (emptyIndex > 0) {
            percent_start = i;
            break;
         }
      }
      //百分比数字的结束位置
      int percent_end = -1;
      emptyIndex = -1;
      for (i = endx;i >= startx;i--) {
         bool empty = 1;
         for (int y = starty;y < endy;y++) {
@@ -491,13 +529,14 @@
         }
         if (empty) {
            emptyIndex = i;
         }else if (emptyIndex > 0) {
         }
         else if (emptyIndex > 0) {
            percent_end = i;
            break;
         }
      }
      if (percent_start > -1) {
         startx = percent_start;
@@ -507,7 +546,7 @@
         endx = percent_end;
      }
      //按照价格的形式做识别
      int m_s = -1, m_e = -1;
      uchar temp[8];
@@ -546,7 +585,7 @@
      }
      if (m_s == -1 || m_e == -1) {
         nps[0] = -1;
         nps[1] = -1;
         nps[2] = -1;
@@ -636,7 +675,7 @@
      }
   }
   int zeroCount = length_per_num - numCount;
   int zeroCount = length_per_num - numCount - (one_point_num?1:0);
   //最大为20位数
   int fresult[20 * 2];
   for (i = 0;i < zeroCount;i++) {
@@ -647,6 +686,11 @@
   for (i = 0;i < numCount;i++) {
      fresult[(i + zeroCount) * 2] = numberCols[i * 2];
      fresult[(i + zeroCount) * 2 + 1] = numberCols[i * 2 + 1];
   }
   //一位小数需要在末尾填充0
   if (type == 1 && one_point_num) {
      fresult[(numCount + zeroCount) * 2] = -1;
      fresult[(numCount + zeroCount) * 2 + 1] = -1;
   }
   //开始填充数据
@@ -776,7 +820,10 @@
   //只能识别4种数字
   unsigned char type = types[index % ele_count_per_line];
   //printf("ele_count_line:%d\n", ele_count_line);
   //是否只有一位小数
   bool one_point_num = false;
   //时间
   if (type == 0) {
      //时间
      int s = cols / 2;
@@ -998,6 +1045,10 @@
         nps[5] = starty;
         nps[6] = num_end;
         nps[7] = endy;
         if (nps[6] - nps[4] <= num_width) {
          //只有一个数字
            one_point_num = true;
         }
      }
@@ -1160,7 +1211,7 @@
      }
   }
   int zeroCount = length_per_num - numCount;
   int zeroCount = length_per_num - numCount - (one_point_num?1:0);
   //最大为20位数
   int fresult[20 * 2];
   for (i = 0;i < zeroCount;i++) {
@@ -1171,6 +1222,12 @@
   for (i = 0;i < numCount;i++) {
      fresult[(i + zeroCount) * 2] = numberCols[i * 2];
      fresult[(i + zeroCount) * 2 + 1] = numberCols[i * 2 + 1];
   }
   //TODO 如果是金额,且后面只有1位小数的,需要在末尾填充0
   if (type == 1&& one_point_num) {
      fresult[(numCount + zeroCount) * 2] = -1;
      fresult[(numCount + zeroCount) * 2 + 1] = -1;
   }
   //开始填充数据
@@ -2204,6 +2261,33 @@
   int unit_start = -1;
   int i;
   //查询是否有单位
     //获取是否有单位
   int last_empty_index = -1;
   for (i = endx;i >= startx;i--) {
      bool empty = 1;
      for (int y = starty;y < endy;y++) {
         if (get_binary_value(imgs[get_one_level_position(width, i, y)]) > 0) {
            empty = 0;
            break;
         }
      }
      if (empty) {
         last_empty_index = i;
         break;
      }
   }
   bool hasUnit = false;
   if (endx - last_empty_index > 6) {
      hasUnit = true;
   }
   else {
      //没有单位
      result[index] = 2;
      return;
   }
   for (i = endx - 11;i >= startx;i--) {
      bool empty = 1;
      for (int y = starty;y < endy;y++) {