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