From 8b06b1cbf112d55307ea8a6efe711db4e7506d89 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 07 三月 2023 10:13:47 +0800
Subject: [PATCH] 'GPU内核方法优化'

---
 app/OcrUtil.cpp |   85 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 82 insertions(+), 3 deletions(-)

diff --git a/app/OcrUtil.cpp b/app/OcrUtil.cpp
index 844778b..6a3663f 100644
--- a/app/OcrUtil.cpp
+++ b/app/OcrUtil.cpp
@@ -1,6 +1,8 @@
 #include "pch.h"
 #include "OcrUtil.h"
 #include "SocketManager.h"
+#include <curl/curl.h>
+#include "MyNetWorkManager.h"
 
 list<OCRResult> OcrUtil::mat_ocr(string key_regex, cv::Mat mat)
 {
@@ -12,7 +14,7 @@
 	time_t totalMicroSeconds = tpMicro.time_since_epoch().count();
 	string matId = string(to_string(totalMicroSeconds)).append("_").append(to_string(mat.rows)).append("x").append(to_string(mat.cols)).append("_").append(to_string(rand()));
 
-	int BUFFER_SIZE = 1024 * 2;
+	int BUFFER_SIZE = 1024 * 1024;
 	int maxSize = mat.rows * mat.cols;
 	int maxIndex = maxSize / BUFFER_SIZE;
 
@@ -42,7 +44,9 @@
 		for (int i = 0; i < 10; i++)
 		{
 			try {
-				string result = SocketManager::sendOcrMsg(result_str.c_str());
+				map<string, string> params;
+				params["data"] = result_str;
+				string result = MyNetWorkManager::getInstance()->PostHttpRequest(string("http://").append(SocketManager::ADDR).append(":").append(to_string(SocketManager::OCR_PORT)).append("/ocr") ,"",params);
 				return parseOCRResult(result);
 			}
 			catch (int code) {
@@ -59,9 +63,84 @@
 					break;
 				}
 			}
-			catch (...) {
+			catch (string st) {
+				throw st;
 			}
 		}
 	}
 	throw string("识别失败");
 }
+
+string OcrUtil::code_ocr_by_name(cv::Mat& mat)
+{
+	int len = mat.rows * mat.cols;
+	chrono::time_point<chrono::system_clock, chrono::microseconds> tpMicro
+		= chrono::time_point_cast<chrono::microseconds>(chrono::system_clock::now());
+	// (微秒精度的)时间点 => (微秒精度的)时间戳
+	time_t totalMicroSeconds = tpMicro.time_since_epoch().count();
+	string matId = string(to_string(totalMicroSeconds)).append("_").append(to_string(mat.rows)).append("x").append(to_string(mat.cols)).append("_").append(to_string(rand()));
+
+	int BUFFER_SIZE = 1024 * 2;
+	int maxSize = mat.rows * mat.cols;
+	int maxIndex = maxSize / BUFFER_SIZE;
+
+	//生成matID
+	//分块发送,每一行为1块
+	for (int index = 0; index <= maxIndex; index++) {
+		Json::Value array;
+		for (int c = 0; c < BUFFER_SIZE; c++) {
+			int dataIndex = index * BUFFER_SIZE + c;
+			if (dataIndex >= maxSize) {
+				break;
+			}
+			array[c] = mat.data[index * BUFFER_SIZE + c];
+		}
+		Json::Value data;
+		data["data"] = array;
+		data["matId"] = matId;
+		data["index"] = index;
+		data["maxIndex"] = maxIndex;
+		data["width"] = mat.cols;
+		data["height"] = mat.rows;
+		Json::Value root;
+		root["data"] = data;
+		root["type"] = 101;
+		string result_str = JsonUtil::toJsonStr(root);
+		for (int i = 0; i < 10; i++)
+		{
+			try {
+				map<string, string> params;
+				params["data"] = result_str;
+				string result = MyNetWorkManager::getInstance()->PostHttpRequest(string("http://").append(SocketManager::ADDR).append(":").append(to_string(SocketManager::OCR_PORT)).append("/ocr"), "", params);
+				Json::Value resultJSON = JsonUtil::parseJson(result);
+				if (resultJSON["code"].asInt() == 0) {
+					string code = resultJSON["data"]["code"].asString();
+					return code;
+				}
+				else {
+					throw data["code"].asInt();
+				}
+				throw string("识别不匹配");
+			}
+			catch (int code) {
+				if (code == -1) {
+					//数据不完整
+					Sleep(100);
+					continue;
+				}
+				else if (code == 1) {
+					//等待继续上传
+					break;
+				}
+				else {
+					break;
+				}
+			}
+			catch (string st) {
+				throw st;
+			}
+		}
+	}
+	throw string("识别失败");
+}
+

--
Gitblit v1.8.0