hiroi-sora / PaddleOCR-json

OCR离线图片文字识别命令行windows程序,以JSON字符串形式输出结果,方便别的程序调用。提供各种语言API。由 PaddleOCR C++ 编译。
Apache License 2.0
983 stars 129 forks source link

需要修改帮助信息里的路径名吗? #123

Closed Gavin1937 closed 5 months ago

Gavin1937 commented 5 months ago

PaddleOCR-json 的 -help 命令会自动输出这些命令的源码文件路径。像这样:

>PaddleOCR-json.exe -help
PaddleOCR-json v1.3.1 dev
PaddleOCR-json.exe: Warning: SetUsageMessage() never called

  Flags from C:\cache_release\third_party\cpu\3ad0da47b86006a7bf40b5685bc39f90\gflags\src\extern_gflags\src\gflags.cc:
    -flagfile (load flags from file) type: string default: ""
...

  Flags from C:\cache_release\third_party\cpu\3ad0da47b86006a7bf40b5685bc39f90\gflags\src\extern_gflags\src\gflags_completions.cc:
    -tab_completion_columns (Number of columns to use in output for tab
      completion) type: int32 default: 80
    -tab_completion_word (If non-empty, HandleCommandLineCompletions() will
      hijack the process and attempt to do bash-style command line flag
      completion on this value.) type: string default: ""

  Flags from C:\cache_release\third_party\cpu\3ad0da47b86006a7bf40b5685bc39f90\gflags\src\extern_gflags\src\gflags_reporting.cc:
    -help (show help on all flags [tip: all flags can have two dashes])
      type: bool default: false currently: true
    -helpfull (show help on all flags -- same as -help) type: bool
      default: false
...

  Flags from D:\MyCode\CppCode\PaddleOCR-json\cpp\src\args.cpp:
    -addr (Socket server addr, the value is selected in ['loopback','any'].)
      type: string default: "loopback"

这些路径一是很丑,二也有一定的暴露隐私的风险。我觉得应该将它们去掉。


这些帮助信息是由 paddle_inference 文件夹自带的 google::gflags 库自动生成的。

可惜的是它已经两年没有更新了,并且也没有功能去隐藏这些路径

不过好在这也不是什么很复杂的功能。我fork并魔改了一下代码,已经实现这个功能了。在我仓库的mod branch下

可以通过设置CMake参数来隐藏路径名

# 隐藏整个路径名(比较丑)
set(GFLAGS_HIDE_PATH_IN_HELP "All")

# 或者

# 隐藏路径名但保留最末尾的文件名(推荐这个)
set(GFLAGS_HIDE_PATH_IN_HELP "Basename")

因为这个项目底层的PaddleOCR有大量使用gflags,即使之后重构这个项目也无法轻易的更换其他C++参数解析库。 所以我建议可以更新一下gflags库,只需要更改一下CMakeLists.txt来更换所link的gflags库就行了。

使用”Basename“选项改完之后长这样:

  Flags from gflags.cc:
    -flagfile (load flags from file) type: string default: ""
    -fromenv (set flags from the environment [use 'export FLAGS_flag1=value'])
      type: string default: ""
...

  Flags from gflags_completions.cc:
    -tab_completion_columns (Number of columns to use in output for tab
      completion) type: int32 default: 80
    -tab_completion_word (If non-empty, HandleCommandLineCompletions() will
      hijack the process and attempt to do bash-style command line flag
      completion on this value.) type: string default: ""

  Flags from gflags_reporting.cc:
    -help (show help on all flags [tip: all flags can have two dashes])
      type: bool default: false currently: true
    -helpfull (show help on all flags -- same as -help) type: bool
      default: false
...

  Flags from args.cpp:
    -addr (Socket server addr, the value can be 'loopback', 'any', or other
      IPv4 address.) type: string default: "loopback"
...
hiroi-sora commented 5 months ago

目前 gflag 相关文件是放在 paddle_inference 压缩包里的。你打算如何替换为新的文件?或者直接将更改后的 gflag 放在本仓库中?

Gavin1937 commented 5 months ago

paddle_inference 文件夹里的 gflags 没有任何cmake文件,只有头文件和库文件。所以PaddleOCR是直接让cmake去把文件找出再直接链接进项目里的。

我们可以直接弃用这些文件。把新的gflags当成一个新的库用cmake加载并链接进来。CMake会自动寻找到gflags、编译、并链接进整个项目里。

  1. 可以直接用CMake FetchContent从GitHub上抓
  2. 或者是把gflags以submodule(或者直接就放在一个文件夹里)的形式放在本仓库里然后用add_subdirectory来加载。

具体需要修改的是,把下面两行去掉

https://github.com/hiroi-sora/PaddleOCR-json/blob/fe697e6a8c2226ca32bab0643ef1dd4444e488b3/cpp/CMakeLists.txt#L179

https://github.com/hiroi-sora/PaddleOCR-json/blob/fe697e6a8c2226ca32bab0643ef1dd4444e488b3/cpp/CMakeLists.txt#L200

接着在第二行的下面加上加载gflags的代码:

https://github.com/Gavin1937/gflags/blob/bc7cacf90a02e481a4d0adbe671008aac031838e/examples/CMakeLists.txt#L20-L47

(可选)最后可以在整个CMakeLists的开头加上一个调整cmake policy的设置。

CMake Warning (dev) at CMakeLists.txt:1 (project):
  Policy CMP0048 is not set: project() command manages VERSION variables.
  Run "cmake --help-policy CMP0048" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.

  The following variable(s) would be set to empty:

    CMAKE_PROJECT_VERSION
    CMAKE_PROJECT_VERSION_MAJOR
    CMAKE_PROJECT_VERSION_MINOR
    CMAKE_PROJECT_VERSION_PATCH
This warning is for project developers.  Use -Wno-dev to suppress it.

如果你觉得没问题我就发个PR加上它

hiroi-sora commented 5 months ago

OK,感觉可行,麻烦加上吧。

尽量用离线的方式吧,直接将文件放在仓库里,避免构建的过程中依赖网络。