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