From ccf59565fe7e645dd68d7e9302696f4a0d226e67 Mon Sep 17 00:00:00 2001 From: lzh <1587412585@qq.com> Date: Tue, 29 Apr 2025 12:56:34 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E4=B8=BB?= =?UTF-8?q?=E9=A1=B5README=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 05a32a1..39fc46e 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ * [凌智视觉模块连接设备指南](./docs/introductory_tutorial/connect_device_using_ssh.md) * [凌智视觉模块WiFi配置指南](./docs/introductory_tutorial/wifi_config.md) * [凌智视觉模块 Python 开发环境搭建指南](./docs/introductory_tutorial/python_development_environment.md) - +* [凌智视觉模块 C++ 开发环境搭建指南](./docs/introductory_tutorial/cpp_development_environment.md) 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 +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace cv; +using namespace std::chrono; + + +// 定义必要的参数 +const float meanValues[3] = {0.485f * 255, 0.456f * 255, 0.406f * 255}; +const float normValues[3] = {1.0f / 0.229f / 255.0f, 1.0f / 0.224f / 255.0f, 1.0f / 0.225f / 255.0f}; + +// 图像缩放参数定义 +struct ScaleParam { + int srcWidth; + int srcHeight; + int dstWidth; + int dstHeight; + float ratioWidth; + float ratioHeight; +}; + +// 文本框结构体的定义 +struct TextBox { + std::vector boxPoint; + float score; +}; + +// 计算图像缩放比例以适应目标尺寸 +ScaleParam getScaleParam(const cv::Mat &src, const int targetSize) { + int imgHeight = src.rows; + int imgWidth = src.cols; + float ratio = std::min(static_cast(targetSize) / imgHeight, static_cast(targetSize) / imgWidth); + ScaleParam scaleParam; + scaleParam.srcHeight = imgHeight; + scaleParam.srcWidth = imgWidth; + scaleParam.dstHeight = static_cast(imgHeight * ratio); + scaleParam.dstWidth = static_cast(imgWidth * ratio); + scaleParam.ratioHeight = ratio; + scaleParam.ratioWidth = ratio; + return scaleParam; +} + +// 向量归一化函数 +cv::Point2f normalize(const cv::Point2f& v) { + float len = std::sqrt(v.x * v.x + v.y * v.y); + // 防止除以零 + if (len == 0) return cv::Point2f(0, 0); + return cv::Point2f(v.x / len, v.y / len); +} + +// 多边形扩张函数:用于扩大文本框边界 +std::vector expandPolygon(const std::vector& inBox, float distance) { + std::vector outBox; + int n = inBox.size(); + // 确保输入至少是一个三角形 + if (n < 3) return outBox; + + for (int i = 0; i < n; ++i) { + cv::Point2f prev = inBox[(i + n - 1) % n]; + cv::Point2f curr = inBox[i]; + cv::Point2f next = inBox[(i + 1) % n]; + + cv::Point2f v1 = cv::Point2f(curr.x - prev.x, curr.y - prev.y); + cv::Point2f v2 = cv::Point2f(next.x - curr.x, next.y - curr.y); + + cv::Point2f normal1(-v1.y, v1.x); + cv::Point2f normal2(-v2.y, v2.x); + + normal1 = normalize(normal1); + normal2 = normalize(normal2); + + cv::Point2f bisectorNormal = normal1 + normal2; + bisectorNormal = normalize(bisectorNormal); + + cv::Point2f newPoint = curr + bisectorNormal * distance; + + outBox.push_back(cv::Point(newPoint.x, newPoint.y)); + } + + return outBox; +} + +// 查找并处理文本框区域 +std::vector findRsBoxes(const cv::Mat &fMapMat, const cv::Mat &norfMapMat, ScaleParam &s, + const float boxScoreThresh, const float unClipRatio) { + float minArea = 3; + std::vector rsBoxes; + std::vector> contours; + cv::findContours(norfMapMat, contours, cv::RETR_LIST, cv::CHAIN_APPROX_SIMPLE); + + for (size_t i = 0; i < contours.size(); ++i) { + double perimeter = cv::arcLength(contours[i], true); + cv::RotatedRect minRect = cv::minAreaRect(contours[i]); + float minSideLen = std::min(minRect.size.width, minRect.size.height); + + if (minSideLen < minArea) + continue; + + // 创建一个掩码图像 + cv::Mat mask = cv::Mat::zeros(fMapMat.size(), CV_8UC1); + cv::drawContours(mask, contours, static_cast(i), cv::Scalar(255), cv::FILLED); + + // 计算掩码内部的平均得分 + cv::Scalar meanScore = cv::mean(fMapMat, mask); + float score = static_cast(meanScore[0]); + + if (score < boxScoreThresh) + continue; + + // 使用expandPolygon实现多边形扩张 + double area = cv::contourArea(contours[i]); + float distance = unClipRatio * area / static_cast(perimeter); + std::vector clipBox = expandPolygon(contours[i], distance); + + if (minSideLen < minArea + 2) + continue; + + for (auto &point : clipBox) { + point.x = std::max(0, std::min(static_cast(point.x / s.ratioWidth), s.srcWidth - 1)); + point.y = std::max(0, std::min(static_cast(point.y / s.ratioHeight), s.srcHeight - 1)); + } + + rsBoxes.emplace_back(TextBox{clipBox, score}); + } + return rsBoxes; +} + +// 绘制文本框到图像上 +void drawTextBox(cv::Mat &boxImg, const std::vector &box, int thickness) { + for (size_t i = 0; i < box.size(); ++i) { + cv::line(boxImg, box[i], box[(i + 1) % box.size()], cv::Scalar(0, 255, 0), thickness); + } +} + +int main(int argc, char** argv) { + if(argc != 4) { + std::cerr << "Usage: " << argv[0] << " " << std::endl; + return -1; + } + // 读取输入图像 + cv::Mat src = cv::imread(argv[1], cv::IMREAD_COLOR); + if(src.empty()) { + std::cerr << "Failed to read image: " << argv[1] << std::endl; + return -1; + } + + ncnn::Net net; + // 禁用一些可能不被支持的功能 + net.opt.use_vulkan_compute = false; + net.opt.use_bf16_storage = false; + net.opt.use_fp16_packed = false; + net.opt.use_fp16_storage = false; + net.opt.use_fp16_arithmetic = false; + + // 加载模型参数和权重文件 + if (net.load_param(argv[2]) != 0 || net.load_model(argv[3]) != 0) { + std::cerr << "Failed to load model from " << argv[2] << " and " << argv[3] << std::endl; + return -1; + } + std::cout << "Model loaded successfully." << std::endl; + // 736是自定义的参数,可以自己设置 + ScaleParam scaleParam = getScaleParam(src, 736); + + std::cout << " scaleParam successfully." << std::endl; + float boxScoreThresh = 0.5f; + float boxThresh = 0.3f; + float unClipRatio = 3.5f; + + cv::Mat srcResize; + resize(src, srcResize, cv::Size(scaleParam.dstWidth, scaleParam.dstHeight)); + std::cout << " resize successfully." << std::endl; + + // 准备输入数据,并进行均值标准化 + ncnn::Mat input = ncnn::Mat::from_pixels(srcResize.data, ncnn::Mat::PIXEL_BGR, srcResize.cols, srcResize.rows); + input.substract_mean_normalize(meanValues, normValues); + + // 创建推理器并执行推理 + high_resolution_clock::time_point start_time = + high_resolution_clock::now(); + ncnn::Extractor extractor = net.create_extractor(); + extractor.input("input0", input); + ncnn::Mat out; + extractor.extract("out1", out); + high_resolution_clock::time_point end_time = high_resolution_clock::now(); + // 计算推理时间 + auto time_span = duration_cast(end_time - start_time); + std::cout << "单张图片推理时间(ms): " << time_span.count() << std::endl; + + // 创建一个单通道的 cv::Mat 来存储第一个通道的数据 + cv::Mat fMapMat(srcResize.rows, srcResize.cols, CV_32FC1); + + memcpy(fMapMat.data, (float *) out.data, srcResize.rows * srcResize.cols * sizeof(float)); + + cv::Mat norfMapMat; + norfMapMat = fMapMat > boxThresh; + + // 查找文本框并绘制在原图上 + std::vector textBoxes = findRsBoxes(fMapMat, norfMapMat, scaleParam, boxScoreThresh, unClipRatio); + + for (const auto &textBox : textBoxes) { + drawTextBox(src, textBox.boxPoint, 1); + } + cv::imshow("Detected Text Boxes", src); + cv::waitKey(0); + + return 0; +} \ No newline at end of file diff --git a/Cpp_example/D07_ocr_synthesis/CMakeLists.txt b/Cpp_example/D07_ocr_synthesis/CMakeLists.txt new file mode 100755 index 0000000..36ef554 --- /dev/null +++ b/Cpp_example/D07_ocr_synthesis/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.10) + +project(ocr_synthesis) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# 定义项目根目录路径 +set(PROJECT_ROOT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../..") +message("PROJECT_ROOT_PATH = " ${PROJECT_ROOT_PATH}) + +include("${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake") + +# 定义 OpenCV SDK 路径 +set(OpenCV_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/opencv-mobile-4.10.0-lockzhiner-vision-module") +set(OpenCV_DIR "${OpenCV_ROOT_PATH}/lib/cmake/opencv4") +find_package(OpenCV REQUIRED) +set(OPENCV_LIBRARIES "${OpenCV_LIBS}") + +# 定义 LockzhinerVisionModule SDK 路径 +set(LockzhinerVisionModule_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk") +set(LockzhinerVisionModule_DIR "${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module") +find_package(LockzhinerVisionModule REQUIRED) + +# ncnn配置 +set(NCNN_ROOT_DIR "${PROJECT_ROOT_PATH}/third_party/ncnn-20240820-lockzhiner-vision-module") # 确保third_party层级存在 +message(STATUS "Checking ncnn headers in: ${NCNN_ROOT_DIR}/include/ncnn") + +# 验证头文件存在 +if(NOT EXISTS "${NCNN_ROOT_DIR}/include/ncnn/net.h") + message(FATAL_ERROR "ncnn headers not found. Confirm the directory contains ncnn: ${NCNN_ROOT_DIR}") +endif() + +set(NCNN_INCLUDE_DIRS "${NCNN_ROOT_DIR}/include") +set(NCNN_LIBRARIES "${NCNN_ROOT_DIR}/lib/libncnn.a") + +add_executable(Test-OcrLite OcrLite.cc) +target_include_directories(Test-OcrLite PRIVATE ${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS} ${NCNN_INCLUDE_DIRS}) +target_link_libraries(Test-OcrLite PRIVATE ${OPENCV_LIBRARIES} ${NCNN_LIBRARIES} ${LOCKZHINER_VISION_MODULE_LIBRARIES}) + +install( + TARGETS Test-OcrLite + RUNTIME DESTINATION . +) \ No newline at end of file diff --git a/Cpp_example/D07_ocr_synthesis/OcrLite.cc b/Cpp_example/D07_ocr_synthesis/OcrLite.cc new file mode 100755 index 0000000..b9464a0 --- /dev/null +++ b/Cpp_example/D07_ocr_synthesis/OcrLite.cc @@ -0,0 +1,300 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace cv; +using namespace std::chrono; + +// 定义必要的参数 +const float dbnet_meanValues[3] = {0.485f * 255, 0.456f * 255, 0.406f * 255}; +const float dbnet_normValues[3] = {1.0f / 0.229f / 255.0f, 1.0f / 0.224f / 255.0f, 1.0f / 0.225f / 255.0f}; + +// 文本检测结构体 +struct TextBox { + std::vector boxPoint; + float score; + std::string text; +}; + +// 图像缩放参数定义 +struct ScaleParam { + int srcWidth; + int srcHeight; + int dstWidth; + int dstHeight; + float ratioWidth; + float ratioHeight; +}; + +// 文本检测相关函数 +ScaleParam getScaleParam(const cv::Mat &src, const int targetSize) { + int imgHeight = src.rows; + int imgWidth = src.cols; + float ratio = std::min(static_cast(targetSize) / imgHeight, static_cast(targetSize) / imgWidth); + ScaleParam scaleParam; + scaleParam.srcHeight = imgHeight; + scaleParam.srcWidth = imgWidth; + scaleParam.dstHeight = static_cast(imgHeight * ratio); + scaleParam.dstWidth = static_cast(imgWidth * ratio); + scaleParam.ratioHeight = ratio; + scaleParam.ratioWidth = ratio; + return scaleParam; +} + +cv::Point2f normalize(const cv::Point2f& v) { + float len = std::sqrt(v.x * v.x + v.y * v.y); + return (len == 0) ? cv::Point2f(0, 0) : cv::Point2f(v.x / len, v.y / len); +} + +// +std::vector expandPolygon(const std::vector& inBox, float distance) { + std::vector outBox; + int n = inBox.size(); + if (n < 3) return outBox; + + for (int i = 0; i < n; ++i) { + cv::Point2f prev = inBox[(i + n - 1) % n]; + cv::Point2f curr = inBox[i]; + cv::Point2f next = inBox[(i + 1) % n]; + + cv::Point2f v1 = curr - prev; + cv::Point2f v2 = next - curr; + + cv::Point2f normal1(-v1.y, v1.x); + cv::Point2f normal2(-v2.y, v2.x); + + normal1 = normalize(normal1); + normal2 = normalize(normal2); + + cv::Point2f bisectorNormal = normalize(normal1 + normal2); + cv::Point2f newPoint = curr + bisectorNormal * distance; + + outBox.push_back(cv::Point(newPoint.x, newPoint.y)); + } + return outBox; +} + +// 提取检测到文本的检测框 +std::vector findRsBoxes(const cv::Mat &fMapMat, const cv::Mat &norfMapMat, ScaleParam &s, + const float boxScoreThresh, const float unClipRatio) { + float minArea = 3; + std::vector rsBoxes; + std::vector> contours; + cv::findContours(norfMapMat, contours, cv::RETR_LIST, cv::CHAIN_APPROX_SIMPLE); + + for (const auto& contour : contours) { + double perimeter = cv::arcLength(contour, true); + cv::RotatedRect minRect = cv::minAreaRect(contour); + float minSideLen = std::min(minRect.size.width, minRect.size.height); + if (minSideLen < minArea) continue; + cv::Mat mask = cv::Mat::zeros(fMapMat.size(), CV_8UC1); + for (int contour_idx = 0; contour_idx < contours.size(); contour_idx++) { + cv::drawContours(mask, contours, contour_idx, cv::Scalar(255), cv::FILLED); + } + + cv::Scalar meanScore = cv::mean(fMapMat, mask); + float score = static_cast(meanScore[0]); + + if (score < boxScoreThresh) continue; + + double area = cv::contourArea(contour); + float distance = unClipRatio * static_cast(area) / static_cast(perimeter); + std::vector clipBox = expandPolygon(contour, distance); + + for (auto &point : clipBox) { + point.x = std::max(0, std::min(static_cast(point.x / s.ratioWidth), s.srcWidth - 1)); + point.y = std::max(0, std::min(static_cast(point.y / s.ratioHeight), s.srcHeight - 1)); + } + + rsBoxes.emplace_back(TextBox{clipBox, score}); + } + return rsBoxes; +} + +void drawTextBox(cv::Mat &boxImg, const std::vector &box, int thickness) { + for (size_t i = 0; i < box.size(); ++i) { + cv::line(boxImg, box[i], box[(i + 1) % box.size()], cv::Scalar(0, 255, 0), thickness); + } +} + +// 辅助函数 +template +inline static size_t argmax(ForwardIterator first, ForwardIterator last) { + return std::distance(first, std::max_element(first, last)); +} + +// 文本识别相关函数 +void processFrame(Mat &src, ncnn::Net &ocr_net, const std::vector &keys, + const float ocr_mean[], const float ocr_norm[], int dstHeight, std::string &outputText) { + float scale = (float)dstHeight / (float)src.rows; + int dstWidth = int((float)src.cols * scale); + Mat resized_patch; + cv::resize(src, resized_patch, cv::Size(dstWidth, dstHeight)); + ncnn::Mat input = ncnn::Mat::from_pixels(resized_patch.data, ncnn::Mat::PIXEL_BGR, + resized_patch.cols, resized_patch.rows); + input.substract_mean_normalize(ocr_mean, ocr_norm); + ncnn::Extractor ocr_extractor = ocr_net.create_extractor(); + ocr_extractor.input("input", input); + ncnn::Mat ocr_output; + ocr_extractor.extract("out", ocr_output); + float *floatArray = (float *)ocr_output.data; + std::vector outputData(floatArray, floatArray + ocr_output.h * ocr_output.w); + int keySize = keys.size(); + std::string strRes; + std::vector scores; + int lastIndex = 0; + int maxIndex; + float maxValue; + for (int i = 0; i < ocr_output.h; i++) { + int maxIndex = 0; + float maxValue = -1000.f; + // Softmax 计算 + std::vector exps(ocr_output.w); + for (int j = 0; j < ocr_output.w; j++) { + float expSingle = exp(outputData[i * ocr_output.w + j]); + exps.at(j) = expSingle; + } + // 行总和 + float partition = accumulate(exps.begin(), exps.end(), 0.0); + // 找到最大值及其索引 + auto maxElementIt = std::max_element(exps.begin(), exps.end()); + maxIndex = std::distance(exps.begin(), maxElementIt); + maxValue = *maxElementIt / partition; + // 检测到有效字符 + if (maxIndex > 0 && maxIndex < keySize && + (!(i > 0 && maxIndex == lastIndex))) { + scores.emplace_back(maxValue); + // 将字符追加到结果字符串中 + strRes.append(keys[maxIndex - 1]); + } + + lastIndex = maxIndex; + } + outputText = strRes; +} + +int main(int argc, char *argv[]) { + if (argc != 7) { + std::cerr << "Usage: " << argv[0] + << " " << std::endl; + return -1; + } + + // 读取输入图像 + Mat src = imread(argv[1], IMREAD_COLOR); + if (src.empty()) { + std::cerr << "Failed to read image." << std::endl; + return -1; + } + + // 加载OCR字符表 + std::vector keys; + std::ifstream in(argv[6]); + std::string line; + if (in) { + while (getline(in, line)) { + keys.push_back(line); + } + } else { + std::cerr << "The keys.txt file was not found." << std::endl; + return -1; + } + if (keys.size() != 5531) { + std::cerr << "Invalid keys.txt format." << std::endl; + return -1; + } + + // 初始化DBNet检测模型 + ncnn::Net dbnet; + dbnet.opt.use_vulkan_compute = false; + if (dbnet.load_param(argv[2]) != 0 || dbnet.load_model(argv[3]) != 0) { + std::cerr << "Failed to load DBNet model." << std::endl; + return -1; + } + + // 初始化OCR识别模型 + ncnn::Net ocr_net; + ocr_net.opt.use_vulkan_compute = false; + if (ocr_net.load_param(argv[4]) != 0 || ocr_net.load_model(argv[5]) != 0) { + std::cerr << "Failed to load OCR model." << std::endl; + return -1; + } + + // 执行文本检测 + ScaleParam scaleParam = getScaleParam(src, 736); + Mat srcResize; + resize(src, srcResize, cv::Size(scaleParam.dstWidth, scaleParam.dstHeight)); + + ncnn::Mat dbnet_input = ncnn::Mat::from_pixels(srcResize.data, ncnn::Mat::PIXEL_BGR, + srcResize.cols, srcResize.rows); + dbnet_input.substract_mean_normalize(dbnet_meanValues, dbnet_normValues); + + ncnn::Extractor dbnet_extractor = dbnet.create_extractor(); + dbnet_extractor.input("input0", dbnet_input); + ncnn::Mat dbnet_output; + dbnet_extractor.extract("out1", dbnet_output); + + // 解析检测输出 + Mat fMapMat(srcResize.rows, srcResize.cols, CV_32FC1); + memcpy(fMapMat.data, (float *)dbnet_output.data, + srcResize.rows * srcResize.cols * sizeof(float)); + Mat norfMapMat = fMapMat > 0.3f; + + std::vector text_boxes = findRsBoxes(fMapMat, norfMapMat, scaleParam, 0.5f, 4.0f); + + // 初始化计数器 + int save_count = 0; + // 执行文本识别 + for (auto& box : text_boxes) { + // 裁剪文本区域 + Rect rect = cv::boundingRect(box.boxPoint); + Mat text_patch = src(rect).clone(); + + // 保存裁剪后的原始区域 + std::string filename = "cropped_" + std::to_string(save_count) + ".png"; + // 保存为PNG格式 + imwrite(filename, text_patch); + save_count++; + + // 执行OCR识别 + const float ocr_mean[3] = {127.5f, 127.5f, 127.5f}; + const float ocr_norm[3] = {1.0f / 127.5f, 1.0f / 127.5f, 1.0f / 127.5f}; + std::string textResult; + processFrame(text_patch, ocr_net, keys, ocr_mean, ocr_norm, 32, textResult); + + box.text = textResult; + } + + // 对文本框进行排序 + std::sort(text_boxes.begin(), text_boxes.end(), [](const TextBox &a, const TextBox &b) { + cv::Rect rectA = cv::boundingRect(a.boxPoint); + cv::Rect rectB = cv::boundingRect(b.boxPoint); + + int centerYA = rectA.y + rectA.height / 2; + int centerYB = rectB.y + rectB.height / 2; + + if (centerYA != centerYB) { + return centerYA < centerYB; + } + return (rectA.x + rectA.width / 2) < (rectB.x + rectB.width / 2); + }); + // 可视化结果 + for (const auto& box : text_boxes) { + drawTextBox(src, box.boxPoint, 1); + std::cout << box.text << std::endl; + // 由于opencv并不支持绘制中文,所以一下代码可以注释掉,感兴趣的可以自己尝试一下。 + // putText(src, box.text, box.boxPoint[0], + // FONT_HERSHEY_SIMPLEX, 0.8, + // Scalar(0, 0, 255), 1); + } + + // 显示结果 + imshow("Text_result", src); + waitKey(0); + return 0; +} \ No newline at end of file diff --git a/Cpp_example/D07_ocr_synthesis/README.md b/Cpp_example/D07_ocr_synthesis/README.md new file mode 100755 index 0000000..a3869b0 --- /dev/null +++ b/Cpp_example/D07_ocr_synthesis/README.md @@ -0,0 +1,564 @@ +# OCR 中文字符识别 +本章节在 Lockzhiner Vision Module 上基于OcrLiteNcnn模型, 实现了一个OCR中文字符识别系统。 +## 1. 基本知识讲解 +### 1.1 OCR中文字符识别简介 +光学字符识别(OCR)是一种将图像中的文字转换为可编辑文本的技术,其中中文OCR因汉字结构复杂、字形多样而更具挑战性。通过图像预处理、深度学习模型(如CNN+RNN)及语言校正,系统能精准识别印刷体或手写中文,并适应不同字体、排版与复杂背景。该技术广泛应用于文档数字化、证件识别、智能办公等领域,尤其在处理海量纸质资料、提升信息处理效率方面具有重要意义。 +### 1.2 OCR中文字符识别的核心步骤 +要实现一个OCR中文字符识别,主要包含以下几个步骤: +- 图像预处理: + - 灰度化与二值化:将彩色图像转换为黑白图像,增强文字与背景的对比度。 + - 降噪与倾斜校正:去除噪声,校正因拍摄导致的倾斜角度。 +- 文字定位与区域检测: + - 一般利用深度学习模型来检测图像中的文字区域。 +- 字符分割: + - 将连续文字块拆分为单个字符,解决粘连字符问题。 +- 特征提取与识别: + - 提取字符的几何特征或通过深度学习模型生成抽象特征。 +- 后处理与校正 + +--- + +## 2. C++ API 文档 +### 2.1 Net类 +#### 2.1.1 头文件 +```cpp +#include +``` +- 作用:用于声明Net类,使得Net类可以在当前文件中使用。 + +#### 2.1.2 构造类函数 +```cpp +ncnn::Net dbnet; +``` +- 作用:创建一个Net类型的对象实例,用于实现文字区域的检测。 +- 参数说明: + - 无 +- 返回值: + - 无 + +```cpp +ncnn::Net ocr_net; +``` +- 作用:创建一个Net类型的对象实例,用于实现文字的识别。 +- 参数说明: + - 无 +- 返回值: + - 无 + +#### 2.1.3 load_param函数 +```cpp +int load_param(const DataReader& dr); +``` +- 参数说明: + - dr:传入的参数文件路径。 +- 返回值: + - 返回值为0表示加载参数文件成功。 + +#### 2.1.4 load_model函数 +```cpp +int load_model(const DataReader& dr); +``` +- 参数说明: + - dr:传入的模型文件路径。 +- 返回值:返回值为0表示加载模型成功。 + +#### 2.1.5 from_pixels函数 +```cpp +ncnn::Mat::from_pixels(srcResize.data, ncnn::Mat::PIXEL_BGR, srcResize.cols, srcResize.rows); +``` +- 参数说明: + - srcResize.data:输入图像的像素数据指针。 + - ncnn::Mat::PIXEL_BGR:输入像素数据的颜色格式。 + - srcResize.cols:输入图像的宽度。 + - srcResize.rows:输入图像的高度。 +- 返回值:适配成 NCNN 所需的格式的包含图像数据的新对象。 + +### 2.2 Extractor类 +#### 2.2.1 头文件 +```cpp +#include +``` +- 作用:用于声明Extractor类,使得Extractor类可以在当前文件中使用。 + +#### 2.2.2 构造类函数 +```cpp +ncnn::Extractor dbnet_extractor = dbnet.create_extractor(); +``` +- 作用:从已经加载了神经网络模型的 dbnet 中创建一个 Extractor 实例,用于执行文本区域检测的推理任务。 +- 参数说明: + - 无 +- 返回值: + - 无 + +```cpp +cnn::Extractor ocr_extractor = ocr_net.create_extractor(); +``` +- 作用:从已经加载了神经网络模型的 ocr_net 中创建一个 Extractor 实例,用于执行文本识别的推理任务。 +- 参数说明: + - 无 +- 返回值: + - 无 + +## 3. OCR 中文字符识别代码解析 +### 3.1 流程图 + + + +### 3.2 核心代码解析 +#### 3.2.1 向量归一化 +```cpp +cv::Point2f normalize(const cv::Point2f& v); +``` +- 作用: + - 计算向量长度并归一化,用于后续几何变换(如多边形扩展方向计算)。 +- 参数说明: + - v:待归一化的二维向量。 +- 返回值: + - 返回单位长度的向量,若输入向量为零向量则返回(0, 0)。 + +#### 3.2.2 多边形边界扩张 +```cpp +std::vector expandPolygon(const std::vector& inBox, float distance); +``` +- 作用: + - 基于邻边法线方向计算角平分线,向外扩展多边形边界,增强文本检测框的包容性。 +- 参数说明: + - inBox:输入的多边形顶点集合。 + - distance:扩展距离,控制文本框膨胀程度。 +- 返回值: + - 返回扩展后的新多边形顶点集合。 + +#### 3.2.3 文本检测框提取 +```cpp +std::vector findRsBoxes(const cv::Mat &fMapMat, const cv::Mat &norfMapMat, ScaleParam &s, const float boxScoreThresh, const float unClipRatio); +``` +- 作用: + - 结合轮廓检测与UNet式后处理,生成最终文本检测框。 +- 参数说明: + - fMapMat:DBNet输出的概率图。 + - norfMapMat:二值化后的概率图。 + - s:图像缩放参数结构体。 + - boxScoreThresh:文本框置信度阈值。 + - unClipRatio:边界扩展系数。 +- 返回值: + - 返回包含文本框坐标、置信度的结构体列表。 + +#### 3.2.4 OCR文本识别 +```cpp +void processFrame(Mat &src, ncnn::Net &ocr_net, const std::vector &keys, + const float ocr_mean[], const float ocr_norm[], int dstHeight, std::string &outputText); +``` +- 作用: + - 执行图像预处理,模型推理,Softmax解码,字符拼接全流程。 +- 参数说明: + - src:待识别的文本区域图像。 + - ocr_net:OCR识别模型。 + - keys:字符表(字符到索引映射)。 + - ocr_mean:图像归一化均值。 + - ocr_norm:图像归一化标准差。 + - dstHeight:目标高度。 + - outputText:输出识别结果字符串。 +- 返回值: + - 无 + +### 3.3 完整代码实现 +```cpp +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace cv; +using namespace std::chrono; + +// 定义必要的参数 +const float dbnet_meanValues[3] = {0.485f * 255, 0.456f * 255, 0.406f * 255}; +const float dbnet_normValues[3] = {1.0f / 0.229f / 255.0f, 1.0f / 0.224f / 255.0f, 1.0f / 0.225f / 255.0f}; + +// 文本检测结构体 +struct TextBox { + std::vector boxPoint; + float score; + std::string text; +}; + +// 图像缩放参数定义 +struct ScaleParam { + int srcWidth; + int srcHeight; + int dstWidth; + int dstHeight; + float ratioWidth; + float ratioHeight; +}; + +// 文本检测相关函数 +ScaleParam getScaleParam(const cv::Mat &src, const int targetSize) { + int imgHeight = src.rows; + int imgWidth = src.cols; + float ratio = std::min(static_cast(targetSize) / imgHeight, static_cast(targetSize) / imgWidth); + ScaleParam scaleParam; + scaleParam.srcHeight = imgHeight; + scaleParam.srcWidth = imgWidth; + scaleParam.dstHeight = static_cast(imgHeight * ratio); + scaleParam.dstWidth = static_cast(imgWidth * ratio); + scaleParam.ratioHeight = ratio; + scaleParam.ratioWidth = ratio; + return scaleParam; +} + +cv::Point2f normalize(const cv::Point2f& v) { + float len = std::sqrt(v.x * v.x + v.y * v.y); + return (len == 0) ? cv::Point2f(0, 0) : cv::Point2f(v.x / len, v.y / len); +} + +// 多边形边界扩展 +std::vector expandPolygon(const std::vector& inBox, float distance) { + std::vector outBox; + int n = inBox.size(); + if (n < 3) return outBox; + + for (int i = 0; i < n; ++i) { + cv::Point2f prev = inBox[(i + n - 1) % n]; + cv::Point2f curr = inBox[i]; + cv::Point2f next = inBox[(i + 1) % n]; + + cv::Point2f v1 = curr - prev; + cv::Point2f v2 = next - curr; + + cv::Point2f normal1(-v1.y, v1.x); + cv::Point2f normal2(-v2.y, v2.x); + + normal1 = normalize(normal1); + normal2 = normalize(normal2); + + cv::Point2f bisectorNormal = normalize(normal1 + normal2); + cv::Point2f newPoint = curr + bisectorNormal * distance; + + outBox.push_back(cv::Point(newPoint.x, newPoint.y)); + } + return outBox; +} + +// 提取检测到文本的检测框 +std::vector findRsBoxes(const cv::Mat &fMapMat, const cv::Mat &norfMapMat, ScaleParam &s, + const float boxScoreThresh, const float unClipRatio) { + float minArea = 3; + std::vector rsBoxes; + std::vector> contours; + cv::findContours(norfMapMat, contours, cv::RETR_LIST, cv::CHAIN_APPROX_SIMPLE); + + for (const auto& contour : contours) { + double perimeter = cv::arcLength(contour, true); + cv::RotatedRect minRect = cv::minAreaRect(contour); + float minSideLen = std::min(minRect.size.width, minRect.size.height); + if (minSideLen < minArea) continue; + cv::Mat mask = cv::Mat::zeros(fMapMat.size(), CV_8UC1); + for (int contour_idx = 0; contour_idx < contours.size(); contour_idx++) { + cv::drawContours(mask, contours, contour_idx, cv::Scalar(255), cv::FILLED); + } + + cv::Scalar meanScore = cv::mean(fMapMat, mask); + float score = static_cast(meanScore[0]); + + if (score < boxScoreThresh) continue; + + double area = cv::contourArea(contour); + float distance = unClipRatio * static_cast(area) / static_cast(perimeter); + std::vector clipBox = expandPolygon(contour, distance); + + for (auto &point : clipBox) { + point.x = std::max(0, std::min(static_cast(point.x / s.ratioWidth), s.srcWidth - 1)); + point.y = std::max(0, std::min(static_cast(point.y / s.ratioHeight), s.srcHeight - 1)); + } + + rsBoxes.emplace_back(TextBox{clipBox, score}); + } + return rsBoxes; +} + +void drawTextBox(cv::Mat &boxImg, const std::vector &box, int thickness) { + for (size_t i = 0; i < box.size(); ++i) { + cv::line(boxImg, box[i], box[(i + 1) % box.size()], cv::Scalar(0, 255, 0), thickness); + } +} + +// 辅助函数 +template +inline static size_t argmax(ForwardIterator first, ForwardIterator last) { + return std::distance(first, std::max_element(first, last)); +} + +// 文本识别相关函数 +void processFrame(Mat &src, ncnn::Net &ocr_net, const std::vector &keys, + const float ocr_mean[], const float ocr_norm[], int dstHeight, std::string &outputText) { + float scale = (float)dstHeight / (float)src.rows; + int dstWidth = int((float)src.cols * scale); + Mat resized_patch; + cv::resize(src, resized_patch, cv::Size(dstWidth, dstHeight)); + ncnn::Mat input = ncnn::Mat::from_pixels(resized_patch.data, ncnn::Mat::PIXEL_BGR, + resized_patch.cols, resized_patch.rows); + input.substract_mean_normalize(ocr_mean, ocr_norm); + ncnn::Extractor ocr_extractor = ocr_net.create_extractor(); + ocr_extractor.input("input", input); + ncnn::Mat ocr_output; + ocr_extractor.extract("out", ocr_output); + float *floatArray = (float *)ocr_output.data; + std::vector outputData(floatArray, floatArray + ocr_output.h * ocr_output.w); + int keySize = keys.size(); + std::string strRes; + std::vector scores; + int lastIndex = 0; + int maxIndex; + float maxValue; + for (int i = 0; i < ocr_output.h; i++) { + int maxIndex = 0; + float maxValue = -1000.f; + // Softmax 计算 + std::vector exps(ocr_output.w); + for (int j = 0; j < ocr_output.w; j++) { + float expSingle = exp(outputData[i * ocr_output.w + j]); + exps.at(j) = expSingle; + } + // 行总和 + float partition = accumulate(exps.begin(), exps.end(), 0.0); + // 找到最大值及其索引 + auto maxElementIt = std::max_element(exps.begin(), exps.end()); + maxIndex = std::distance(exps.begin(), maxElementIt); + maxValue = *maxElementIt / partition; + // 检测到有效字符 + if (maxIndex > 0 && maxIndex < keySize && + (!(i > 0 && maxIndex == lastIndex))) { + scores.emplace_back(maxValue); + // 将字符追加到结果字符串中 + strRes.append(keys[maxIndex - 1]); + } + + lastIndex = maxIndex; + } + outputText = strRes; +} + +int main(int argc, char *argv[]) { + if (argc != 7) { + std::cerr << "Usage: " << argv[0] + << " " << std::endl; + return -1; + } + + // 读取输入图像 + Mat src = imread(argv[1], IMREAD_COLOR); + if (src.empty()) { + std::cerr << "Failed to read image." << std::endl; + return -1; + } + + // 加载OCR字符表 + std::vector keys; + std::ifstream in(argv[6]); + std::string line; + if (in) { + while (getline(in, line)) { + keys.push_back(line); + } + } else { + std::cerr << "The keys.txt file was not found." << std::endl; + return -1; + } + if (keys.size() != 5531) { + std::cerr << "Invalid keys.txt format." << std::endl; + return -1; + } + + // 初始化DBNet检测模型 + ncnn::Net dbnet; + dbnet.opt.use_vulkan_compute = false; + if (dbnet.load_param(argv[2]) != 0 || dbnet.load_model(argv[3]) != 0) { + std::cerr << "Failed to load DBNet model." << std::endl; + return -1; + } + + // 初始化OCR识别模型 + ncnn::Net ocr_net; + ocr_net.opt.use_vulkan_compute = false; + if (ocr_net.load_param(argv[4]) != 0 || ocr_net.load_model(argv[5]) != 0) { + std::cerr << "Failed to load OCR model." << std::endl; + return -1; + } + + // 执行文本检测 + ScaleParam scaleParam = getScaleParam(src, 736); + Mat srcResize; + resize(src, srcResize, cv::Size(scaleParam.dstWidth, scaleParam.dstHeight)); + + ncnn::Mat dbnet_input = ncnn::Mat::from_pixels(srcResize.data, ncnn::Mat::PIXEL_BGR, + srcResize.cols, srcResize.rows); + dbnet_input.substract_mean_normalize(dbnet_meanValues, dbnet_normValues); + + ncnn::Extractor dbnet_extractor = dbnet.create_extractor(); + dbnet_extractor.input("input0", dbnet_input); + ncnn::Mat dbnet_output; + dbnet_extractor.extract("out1", dbnet_output); + + // 解析检测输出 + Mat fMapMat(srcResize.rows, srcResize.cols, CV_32FC1); + memcpy(fMapMat.data, (float *)dbnet_output.data, + srcResize.rows * srcResize.cols * sizeof(float)); + Mat norfMapMat = fMapMat > 0.3f; + + std::vector text_boxes = findRsBoxes(fMapMat, norfMapMat, scaleParam, 0.5f, 4.0f); + + // 初始化计数器 + int save_count = 0; + // 执行文本识别 + for (auto& box : text_boxes) { + // 裁剪文本区域 + Rect rect = cv::boundingRect(box.boxPoint); + Mat text_patch = src(rect).clone(); + + // 保存裁剪后的原始区域 + std::string filename = "cropped_" + std::to_string(save_count) + ".png"; + // 保存为PNG格式 + imwrite(filename, text_patch); + save_count++; + + // 执行OCR识别 + const float ocr_mean[3] = {127.5f, 127.5f, 127.5f}; + const float ocr_norm[3] = {1.0f / 127.5f, 1.0f / 127.5f, 1.0f / 127.5f}; + std::string textResult; + processFrame(text_patch, ocr_net, keys, ocr_mean, ocr_norm, 32, textResult); + + box.text = textResult; + } + + // 对文本框进行排序 + std::sort(text_boxes.begin(), text_boxes.end(), [](const TextBox &a, const TextBox &b) { + cv::Rect rectA = cv::boundingRect(a.boxPoint); + cv::Rect rectB = cv::boundingRect(b.boxPoint); + + int centerYA = rectA.y + rectA.height / 2; + int centerYB = rectB.y + rectB.height / 2; + + if (centerYA != centerYB) { + return centerYA < centerYB; + } + return (rectA.x + rectA.width / 2) < (rectB.x + rectB.width / 2); + }); + // 可视化结果 + for (const auto& box : text_boxes) { + drawTextBox(src, box.boxPoint, 1); + std::cout << box.text << std::endl; + // 由于opencv并不支持绘制中文,所以一下代码可以注释掉,感兴趣的可以自己尝试一下。 + // putText(src, box.text, box.boxPoint[0], + // FONT_HERSHEY_SIMPLEX, 0.8, + // Scalar(0, 0, 255), 1); + } + + // 显示结果 + imshow("Text_result", src); + waitKey(0); + return 0; +} +``` + +--- + +## 4. 编译调试 +### 4.1 编译环境搭建 +- 请确保你已经按照 [开发环境搭建指南](../../../../docs/introductory_tutorial/cpp_development_environment.md) 正确配置了开发环境。 +- 同时已经正确连接开发板。 +### 4.2 Cmake介绍 +```cmake +cmake_minimum_required(VERSION 3.10) + +project(ocr_synthesis) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# 定义项目根目录路径 +set(PROJECT_ROOT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../..") +message("PROJECT_ROOT_PATH = " ${PROJECT_ROOT_PATH}) + +include("${PROJECT_ROOT_PATH}/toolchains/arm-rockchip830-linux-uclibcgnueabihf.toolchain.cmake") + +# 定义 OpenCV SDK 路径 +set(OpenCV_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/opencv-mobile-4.10.0-lockzhiner-vision-module") +set(OpenCV_DIR "${OpenCV_ROOT_PATH}/lib/cmake/opencv4") +find_package(OpenCV REQUIRED) +set(OPENCV_LIBRARIES "${OpenCV_LIBS}") + +# 定义 LockzhinerVisionModule SDK 路径 +set(LockzhinerVisionModule_ROOT_PATH "${PROJECT_ROOT_PATH}/third_party/lockzhiner_vision_module_sdk") +set(LockzhinerVisionModule_DIR "${LockzhinerVisionModule_ROOT_PATH}/lib/cmake/lockzhiner_vision_module") +find_package(LockzhinerVisionModule REQUIRED) + +# ncnn配置 +set(NCNN_ROOT_DIR "${PROJECT_ROOT_PATH}/third_party/ncnn-20240820-lockzhiner-vision-module") # 确保third_party层级存在 +message(STATUS "Checking ncnn headers in: ${NCNN_ROOT_DIR}/include/ncnn") + +# 验证头文件存在 +if(NOT EXISTS "${NCNN_ROOT_DIR}/include/ncnn/net.h") + message(FATAL_ERROR "ncnn headers not found. Confirm the directory contains ncnn: ${NCNN_ROOT_DIR}") +endif() + +set(NCNN_INCLUDE_DIRS "${NCNN_ROOT_DIR}/include") +set(NCNN_LIBRARIES "${NCNN_ROOT_DIR}/lib/libncnn.a") + +add_executable(Test-OcrLite OcrLite.cc) +target_include_directories(Test-OcrLite PRIVATE ${LOCKZHINER_VISION_MODULE_INCLUDE_DIRS} ${NCNN_INCLUDE_DIRS}) +target_link_libraries(Test-OcrLite PRIVATE ${OPENCV_LIBRARIES} ${NCNN_LIBRARIES} ${LOCKZHINER_VISION_MODULE_LIBRARIES}) + +install( + TARGETS Test-OcrLite + RUNTIME DESTINATION . +) +``` +### 4.3 编译项目 +使用 Docker Destop 打开 LockzhinerVisionModule 容器并执行以下命令来编译项目 +```bash +# 进入Demo所在目录 +cd /LockzhinerVisionModuleWorkSpace/LockzhinerVisionModule/Cpp_example/D07_ocr_synthesis +# 创建编译目录 +rm -rf build && mkdir build && cd build +# 配置交叉编译工具链 +export TOOLCHAIN_ROOT_PATH="/LockzhinerVisionModuleWorkSpace/arm-rockchip830-linux-uclibcgnueabihf" +# 使用cmake配置项目 +cmake .. +# 执行编译项目 +make -j8 && make install +``` + +在执行完上述命令后,会在build目录下生成可执行文件。 + +--- + +## 5. 执行结果 +### 5.1 运行前准备 +- 请确保已经下载了模型,并保存在当前目录下。 +### 5.2 运行过程 +```shell +chmod 777 Test-OcrLite +./Test-OcrLite dbnet_op.param dbnet_op.bin crnn_lite_op.param crnn_lite_op.bin keys.txt +``` +### 5.3 运行结果 +- 原始图像 + +![title](./images/test.png) + +- 识别结果 + +![title](./images/Result_Rec.png) + +--- + +## 6. 总结 +通过上述内容,我们成功实现了一个简单的OCR中文字符识别系统,包括: + +- 加载模型和待识别图像。 +- 进行文本区域检测推理和文本识别推理。 +- 打印并保存推理结果。 \ No newline at end of file diff --git a/Cpp_example/D07_ocr_synthesis/images/Result_Det.png b/Cpp_example/D07_ocr_synthesis/images/Result_Det.png new file mode 100755 index 0000000000000000000000000000000000000000..174859f525b59fe6de30c61db0e821d484486db6 GIT binary patch literal 33699 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 G{(k`#{s{yC literal 0 HcmV?d00001 diff --git a/Cpp_example/D07_ocr_synthesis/images/Result_Rec.png b/Cpp_example/D07_ocr_synthesis/images/Result_Rec.png new file mode 100755 index 0000000000000000000000000000000000000000..0de6f93c3eea0cb3c22ee58ee4fb99f76a01040a GIT binary patch literal 29606 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 W*Y`%K$?i`F^mR<`72kDu`~LwsZCoS( literal 0 HcmV?d00001 diff --git a/Cpp_example/D07_ocr_synthesis/images/test.png b/Cpp_example/D07_ocr_synthesis/images/test.png new file mode 100755 index 0000000000000000000000000000000000000000..6819020d308f5f7749a53ed40c53b03cea9d12d1 GIT binary patch literal 23672 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 AfdBvi literal 0 HcmV?d00001 diff --git a/Cpp_example/D07_ocr_synthesis/images/view.png b/Cpp_example/D07_ocr_synthesis/images/view.png new file mode 100755 index 0000000000000000000000000000000000000000..c5c42ad9cab056bef3fed8be3209386bdaeef0ef GIT binary patch literal 135478 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
|KVVe#^#^4a5=nh*2sSP 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 literal 0 HcmV?d00001 -- Gitee From c9537c8f1118a3a7b18d6bb57b04503f4f75ec71 Mon Sep 17 00:00:00 2001 From: lzh <1587412585@qq.com> Date: Tue, 29 Apr 2025 18:23:52 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=B8=BB?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E7=9A=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c1bc3d0..a283c8e 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,9 @@ C++ 开发案例以A、B、C、D进行不同类别进行分类,方便初学者 | D02 | 神经网络类 | Digit Hand Recognition | [手写数字识别](./Cpp_example/D02_DigitHandRecog/README.md) | | D03 | 神经网络类 | Face Recognition System | [人脸识别系统](./Cpp_example/D03_face_recognition_system/README.md) | | D04 | 神经网络类 | Distance | [距离检测](./Cpp_example/D04_distance/README.md) | +| D05 | 神经网络类 | OCR Text Recognition | [OCR文字识别](./Cpp_example/D05_ocr_text_recognition/README.md) | +| D06 | 神经网络类 | OCR Text Detection | [OCR文字检测](./Cpp_example/D06_ocr_text_detection/README.md) | +| D07 | 神经网络类 | OCR Synthesis | [OCR合成示例](./Cpp_example/D07_ocr_synthesis/README.md) | ## 🐛 Bug反馈 -- Gitee