Skip to content

Commit bce2eae

Browse files
committed
version 1.7.0: opencv 4.6.0, ncnn 20220420, 修改c导出api,注释无用的调试输出,模型格式变化,需要重新转换模型,增加clibtest项目地址
1 parent a50ae13 commit bce2eae

13 files changed

+184
-172
lines changed

BUILD.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
* OpenCV静态库:opencv-(版本号)-平台.7z,
88
* 把压缩包解压到项目根目录,windows平台需要注意目录层次,解压后目录结构如下
9-
* windows平台请选择vs2017版本(也可以用于vs2019编译)
10-
* 程序版本v1.6.0需要opencv 4.5.4
9+
* 程序版本v1.6.0依赖opencv 4.5.4
10+
* 程序版本v1.7.0依赖opencv 4.6.0
1111
```
1212
OcrLiteNcnn/opencv-static
1313
├── OpenCVWrapperConfig.cmake
@@ -23,6 +23,7 @@ OcrLiteNcnn/opencv-static
2323
* ncnn静态库:ncnn-(版本号)-平台.7z
2424
* 注意:本demo从v1.5.1开始,去除crnn的lstm外循环改用框架的实现,需要配合ncnn>=20210124,请注意选择ncnn版本。
2525
* 程序版本v1.6.0需要ncnn 20210720
26+
* 程序版本v1.7.0依赖ncnn 20220420,此版本模型格式支持有变化,原有的db和angle模型需重新用onnx2ncnn工具转换
2627
* 把压缩包解压到项目根目录,windows平台需要注意目录层次,解压后目录结构如下
2728

2829
```

CMakeLists.txt

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ elseif (UNIX)
77
endif ()
88
project(OcrLiteNcnn)
99

10+
# Output BIN JNI CLIB
1011
if (NOT DEFINED OCR_OUTPUT)
1112
set(OCR_OUTPUT "BIN")
1213
message(STATUS "No OCR_OUTPUT, defaulting to BIN")
@@ -27,34 +28,6 @@ else ()
2728
add_definitions("-Wall")
2829
endif ()
2930

30-
# OpenMP flags for MACOS
31-
if (APPLE)
32-
if (CMAKE_C_COMPILER_ID MATCHES "Clang")
33-
set(OpenMP_C "${CMAKE_C_COMPILER}")
34-
set(OpenMP_C_FLAGS "-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include")
35-
set(OpenMP_C_LIB_NAMES "omp")
36-
set(OpenMP_omp_LIBRARY ${OpenMP_C_LIB_NAMES})
37-
endif ()
38-
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
39-
set(OpenMP_CXX "${CMAKE_CXX_COMPILER}")
40-
set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include")
41-
set(OpenMP_CXX_LIB_NAMES "omp")
42-
set(OpenMP_omp_LIBRARY ${OpenMP_C_LIB_NAMES})
43-
endif ()
44-
link_directories("/usr/local/opt/libomp/lib")
45-
endif ()
46-
47-
# OpenMP
48-
find_package(OpenMP REQUIRED)
49-
if (OPENMP_FOUND)
50-
message("OPENMP FOUND")
51-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
52-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
53-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
54-
else ()
55-
message(FATAL_ERROR "OpenMP Not Found!")
56-
endif ()
57-
5831
# NCNN
5932
if (OCR_VULKAN STREQUAL "GPU")
6033
include(${CMAKE_CURRENT_SOURCE_DIR}/ncnn-vulkan-static/NcnnWrapperConfig.cmake)
@@ -102,15 +75,15 @@ endif ()
10275
if (OCR_OUTPUT STREQUAL "JNI") # JNI
10376
add_library(OcrLiteNcnn SHARED ${OCR_COMPILE_CODE})
10477
target_compile_definitions(OcrLiteNcnn PRIVATE __JNI__)
105-
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS} ${JNI_LIBS} ${OpenMP_CXX_LIB_NAMES})
106-
elseif(OCR_OUTPUT STREQUAL "CLIB") # CLIB
78+
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS} ${JNI_LIBS})
79+
elseif (OCR_OUTPUT STREQUAL "CLIB") # CLIB
10780
add_library(OcrLiteNcnn SHARED ${OCR_COMPILE_CODE})
10881
target_compile_definitions(OcrLiteNcnn PRIVATE __CLIB__)
109-
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS} ${OpenMP_CXX_LIB_NAMES})
110-
elseif(OCR_OUTPUT STREQUAL "BIN") # BIN
82+
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS})
83+
elseif (OCR_OUTPUT STREQUAL "BIN") # BIN
11184
add_executable(OcrLiteNcnn ${OCR_COMPILE_CODE})
11285
target_compile_definitions(OcrLiteNcnn PRIVATE __EXEC__)
113-
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS} ${OpenMP_CXX_LIB_NAMES})
86+
target_link_libraries(OcrLiteNcnn ncnn ${OpenCV_LIBS})
11487
endif ()
11588

11689
install(TARGETS OcrLiteNcnn EXPORT OcrLiteNcnn)
@@ -133,7 +106,7 @@ if (OCR_BENCHMARK AND (OCR_OUTPUT STREQUAL "BIN"))
133106
src/getopt.cpp
134107
src/OcrLite.cpp
135108
src/OcrUtils.cpp)
136-
target_link_libraries(benchmark ncnn ${OpenCV_LIBS} ${OpenMP_CXX_LIB_NAMES})
109+
target_link_libraries(benchmark ncnn ${OpenCV_LIBS})
137110
target_compile_definitions(benchmark PRIVATE __EXEC__)
138111

139112
if (OCR_VULKAN STREQUAL "GPU")

README.md

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
* 各平台可执行文件:linux-bin.7z、macos-bin.7z、windows-bin.7z
2222
* 用于java的jni库:linux-jni.7z、macos-jni.7z、windows-jni.7z
2323
* 用于C的动态库:linux-clib.7z、macos-clib.7z、windows-clib.7z
24+
* C动态库调用范例:[OcrLiteNcnnLibTest](https://github.com/benjaminwan/OcrLiteNcnnLibTest)
2425
* 注意:linux编译平台为ubuntu18.04,如果你的linux版本无法运行demo,请自行从源码编译依赖库和完整项目。
2526

2627
### 介绍
@@ -37,16 +38,22 @@ ChineseOcr Lite Ncnn,超轻量级中文OCR PC Demo,支持ncnn推理
3738

3839
### 更新说明
3940

41+
#### 2021-10-13 update
42+
43+
* opencv 4.5.4
44+
* ncnn 20210720
45+
* 优化编译脚本和测试脚本
46+
4047
#### 2021-10-25 update
4148

4249
* fix:win编译打包C动态库缺少lib文件
4350
* 编译c动态库添加打包include
4451

45-
#### 2021-10-13 update
52+
#### 2021-10-25 update
4653

47-
* opencv 4.5.4
48-
* ncnn 20210720
49-
* 优化编译脚本和测试脚本
54+
* opencv 4.6.0
55+
* ncnn 20220420,模型格式变化,需重新转换db和angle模型
56+
* 修改c lib导出方法,支持C调用
5057

5158
### 模型下载
5259

@@ -75,7 +82,7 @@ OcrLiteNcnn/models
7582

7683
### FAQ
7784

78-
#### macOS缺少openmp
85+
#### macOS缺少openmp(从1.7.0开始已不再依赖openmp)
7986

8087
```brew install libomp```
8188

include/OcrLiteCApi.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#ifdef __cplusplus
2+
#ifndef __OCR_LITE_C_API_H__
3+
#define __OCR_LITE_C_API_H__
4+
extern "C"
5+
{
6+
7+
#ifdef WIN32
8+
#ifdef __CLIB__
9+
#define _QM_OCR_API __declspec(dllexport)
10+
#else
11+
#define _QM_OCR_API __declspec(dllimport)
12+
#endif
13+
#else
14+
#define _QM_OCR_API
15+
#endif
16+
17+
typedef void *OCR_HANDLE;
18+
typedef char BOOL;
19+
20+
#ifndef NULL
21+
#define NULL 0
22+
#endif
23+
#define TRUE 1
24+
#define FALSE 0
25+
26+
typedef struct __ocr_param {
27+
int padding;
28+
int maxSideLen;
29+
float boxScoreThresh;
30+
float boxThresh;
31+
float unClipRatio;
32+
int doAngle; // 1 means do
33+
int mostAngle; // 1 means true
34+
} OCR_PARAM;
35+
36+
/*
37+
* nThreads should be the number of threads
38+
* gpuIndex: -1 means use cpu, 0 means use gpu0...
39+
*/
40+
_QM_OCR_API OCR_HANDLE
41+
OcrInit(const char *szDetModel, const char *szClsModel, const char *szRecModel, const char *szKeyPath, int nThreads,
42+
int gpuIndex);
43+
44+
_QM_OCR_API BOOL
45+
OcrDetect(OCR_HANDLE handle, const char *imgPath, const char *imgName, OCR_PARAM *pParam);
46+
47+
_QM_OCR_API int OcrGetLen(OCR_HANDLE handle);
48+
49+
_QM_OCR_API BOOL OcrGetResult(OCR_HANDLE handle, char *szBuf, int nLen);
50+
51+
_QM_OCR_API void OcrDestroy(OCR_HANDLE handle);
52+
53+
};
54+
#endif //__OCR_LITE_C_API_H__
55+
#endif //__cplusplus

include/OcrLiteCaller.h

Lines changed: 0 additions & 40 deletions
This file was deleted.

include/OcrLitePort.h

Lines changed: 0 additions & 45 deletions
This file was deleted.

include/OcrStruct.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
#include "opencv2/core.hpp"
55
#include <vector>
66

7-
#include "OcrLitePort.h"
8-
97
struct ScaleParam {
108
int srcWidth;
119
int srcHeight;
@@ -32,7 +30,7 @@ struct TextLine {
3230
double time;
3331
};
3432

35-
struct OCRLITE_PORT TextBlock {
33+
struct TextBlock {
3634
std::vector<cv::Point> boxPoint;
3735
float boxScore;
3836
int angleIndex;
@@ -44,7 +42,7 @@ struct OCRLITE_PORT TextBlock {
4442
double blockTime;
4543
};
4644

47-
struct OCRLITE_PORT OcrResult {
45+
struct OcrResult {
4846
double dbNetTime;
4947
std::vector<TextBlock> textBlocks;
5048
cv::Mat boxImg;

include/version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#ifndef __OCR_VERSION_H__
22
#define __OCR_VERSION_H__
33

4-
#define VERSION "1.6.0.20211013"
4+
#define VERSION "1.7.0"
55

66
#endif //__OCR_VERSION_H__

src/AngleNet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ std::vector<Angle> AngleNet::getAngles(std::vector<cv::Mat> &partImgs, const cha
9898
} else {//all angle set to 1
9999
mostAngleIndex = 1;
100100
}
101-
printf("Set All Angle to mostAngleIndex(%d)\n", mostAngleIndex);
101+
//printf("Set All Angle to mostAngleIndex(%d)\n", mostAngleIndex);
102102
for (int i = 0; i < angles.size(); ++i) {
103103
Angle angle = angles[i];
104104
angle.index = mostAngleIndex;

src/CrnnNet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ bool CrnnNet::initModel(const std::string &pathStr, const std::string &keysPath)
4646
fprintf(stderr, "missing keys\n");
4747
return false;
4848
}
49-
printf("total keys size(%lu)\n", keys.size());
49+
//printf("total keys size(%lu)\n", keys.size());
5050
return true;
5151
}
5252

0 commit comments

Comments
 (0)