首先下载Project_RapidOcrNcnn-1.2.0.7z,解压之后,修改
D:\Project_RapidOcrNcnn-1.2.0\opencv-static\OpenCVWrapperConfig.cmake
if (WIN32)
if (CMAKE_CL_64)
message("配置WINDOWS OpenCV x64 路径: ${CMAKE_CURRENT_LIST_DIR}/windows-x64")
set(OpenCV_DIR "D:/source/c++/Project_RapidOcrNcnn-1.2.0/opencv-static/windows-x64/x64/vc16/staticlib")
else ()
message("配置WINDOWS OpenCV x86 路径: ${CMAKE_CURRENT_LIST_DIR}/windows-x86")
set(OpenCV_DIR "${CMAKE_CURRENT_LIST_DIR}/windows-x86")
endif ()
elseif (APPLE)
message("配置macOS OpenCV 路径: ${CMAKE_CURRENT_LIST_DIR}/macos/lib/cmake/opencv4")
set(OpenCV_DIR "${CMAKE_CURRENT_LIST_DIR}/macos/lib/cmake/opencv4")
elseif (UNIX)
message("配置Linux OpenCV 路径: ${CMAKE_CURRENT_LIST_DIR}/linux/lib/cmake/opencv4")
set(OpenCV_DIR "${CMAKE_CURRENT_LIST_DIR}/linux/lib/cmake/opencv4")
endif ()将对应平台的路径替换成你的opencv路径,这里以自带的opencv版本路径为例。然后安装好cmake(我用的4.12版本),安装完之后,双击generate-vs-project.bat,生成对应版本的工程,这里我也做了一些修改,仅供参考
@ECHO OFF chcp 65001 cls @SETLOCAL echo "========请先参考README.md准备好编译环境========" echo. echo "========编译选项========" echo "请注意:项目默认使用Release库,除非您自行编译Debug版的Ncnn和Opencv,否则请不要选择Debug编译" echo "请输入编译选项并回车: 1)Release, 2)Debug" set BUILD_TYPE=Release ::set /p flag= set flag=1 if %flag% == 1 (set BUILD_TYPE=Release)^ else if %flag% == 2 (set BUILD_TYPE=Debug)^ else (echo 输入错误!Input Error!) echo. echo "请选择要使用的ncnn库选项并回车: 1)ncnn(CPU),2)ncnn(vulkan)" set BUILD_NCNN_VULKAN="CPU" ::set /p flag= set flag=1 if %flag% == 1 (set BUILD_NCNN_VULKAN="CPU")^ else if %flag% == 2 (set BUILD_NCNN_VULKAN="GPU")^ else (echo "输入错误!Input Error!") echo. echo "请注意:如果选择2)JNI动态库时,必须安装配置Oracle JDK" echo "请选择编译输出类型并回车: 1)BIN可执行文件,2)JNI动态库,3)C动态库" ::set /p flag= set flag=3 if %flag% == 1 (set BUILD_OUTPUT="BIN")^ else if %flag% == 2 (set BUILD_OUTPUT="JNI")^ else if %flag% == 3 (set BUILD_OUTPUT="CLIB")^ else (echo 输入错误!Input Error!) echo. echo "引用的库类型: 1)静态CRT(mt), 2)动态CRT(md)" echo "注意:范例工程默认集成mt版库" ::set /p flag= set flag=1 if %flag% == 1 ( set MT_ENABLED="True" )^ else (set MT_ENABLED="False") echo. echo "请输入选项并回车: 0)ALL, 1)vs2017-x86, 2)vs2017-x64, 3)vs2022-x86, 4)vs2022-x64:" ::set /p flag= set flag=4 if %flag% == 0 (call :buildALL)^ else if %flag% == 1 (call :gen2017-x86)^ else if %flag% == 2 (call :gen2017-x64)^ else if %flag% == 3 (call :gen2022-x86)^ else if %flag% == 4 (call :gen2022-x64)^ else (echo "输入错误!Input Error!") GOTO:EOF :buildALL call :gen2017-x86 call :gen2017-x64 call :gen2022-x86 call :gen2022-x64 GOTO:EOF :gen2017-x86 mkdir build-win-vs2017-x86 pushd build-win-vs2017-x86 call :cmakeParams "Visual Studio 15 2017" "Win32" popd GOTO:EOF :gen2017-x64 mkdir build-win-vs2017-x64 pushd build-win-vs2017-x64 call :cmakeParams "Visual Studio 15 2017" "x64" popd GOTO:EOF :gen2022-x86 mkdir build-win-vs2022-x86 pushd build-win-vs2022-x86 call :cmakeParams "Visual Studio 17 2022" "Win32" popd GOTO:EOF :gen2022-x64 mkdir build-win-vs2022-x64 pushd build-win-vs2022-x64 call :cmakeParams "Visual Studio 17 2022" "x64" popd GOTO:EOF :cmakeParams echo cmake -G "%~1" -A "%~2" -DOCR_OUTPUT=%BUILD_OUTPUT% -DOCR_VULKAN=%BUILD_NCNN_VULKAN% -DOCR_BUILD_CRT=%MT_ENABLED% .. cmake -G "%~1" -A "%~2" -DOCR_OUTPUT=%BUILD_OUTPUT% -DOCR_VULKAN=%BUILD_NCNN_VULKAN% -DOCR_BUILD_CRT=%MT_ENABLED% .. GOTO:EOF @ENDLOCAL
修改默认release,mt,vs2022的版本,默认C版本是导出对应函数,C++版本是没有导出工具类的,需要手动修改头文件
OcrLite.h
#ifndef __OCR_LITE_H__
#define __OCR_LITE_H__
// --- 新增宏定义 ---
#ifdef OCR_LITE_EXPORTS
#define OCR_LITE_API __declspec(dllexport)
#else
#define OCR_LITE_API __declspec(dllimport)
#endif
#include "opencv2/core.hpp"
#include "ncnn/net.h"
#include "OcrStruct.h"
#include "DbNet.h"
#include "AngleNet.h"
#include "CrnnNet.h"
class OCR_LITE_API OcrLite {
public:
OcrLite();
~OcrLite();
void setNumThread(int numOfThread);
void initLogger(bool isConsole, bool isPartImg, bool isResultImg);
void enableResultTxt(const char *path, const char *imgName);
void setGpuIndex(int gpuIndex);
bool initModels(const std::string &detPath, const std::string &clsPath,
const std::string &recPath, const std::string &keysPath);
void Logger(const char *format, ...);
OcrResult detect(const char *path, const char *imgName,
int padding, int maxSideLen,
float boxScoreThresh, float boxThresh, float unClipRatio, bool doAngle, bool mostAngle);
OcrResult detect(const cv::Mat& mat,
int padding, int maxSideLen,
float boxScoreThresh, float boxThresh, float unClipRatio, bool doAngle, bool mostAngle);
private:
bool isOutputConsole = false;
bool isOutputPartImg = false;
bool isOutputResultTxt = false;
bool isOutputResultImg = false;
FILE *resultTxt;
DbNet dbNet;
AngleNet angleNet;
CrnnNet crnnNet;
std::vector<cv::Mat> getPartImages(cv::Mat &src, std::vector<TextBox> &textBoxes,
const char *path, const char *imgName);
OcrResult detect(const char *path, const char *imgName,
cv::Mat &src, cv::Rect &originRect, ScaleParam &scale,
float boxScoreThresh = 0.6f, float boxThresh = 0.3f,
float unClipRatio = 2.0f, bool doAngle = true, bool mostAngle = true);
};
#endif //__OCR_LITE_H__ 收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2316
- 用户1336
- 访客11890218
每日一句
Growing up is a gentle act of self-rebellion.
成长,是一场温柔的自我叛变。
成长,是一场温柔的自我叛变。