【问题标题】:Tesseract-ocr gem issue on mac os xmac os x 上的 Tesseract-ocr gem 问题
【发布时间】:2015-08-24 09:57:07
【问题描述】:

我已经安装了一个 tesseract-ocr (0.1.5) gem。

还安装了依赖项(tesseract/3.04.00 和 leptonica/1.72)

Mac OS X Yosemity。

当我执行rake db:migrate 时出现错误:

rake aborted!
CompilationError: compile error: see logs at /var/folders/xg/g9n7qvns5z1gsr_yjh09n1nm0000gn/T/.ffi-inline-501/d2f8bb8a1867b800ff8ad69a3b850c91521b3760.log
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/compilers/gcc.rb:35:in `compile'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/builders/c.rb:114:in `shared_object'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/builders.rb:90:in `block in build'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/builders.rb:87:in `instance_eval'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/builders.rb:87:in `build'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/inline.rb:54:in `singleton_inline'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/ffi-inline-0.0.4.3/lib/ffi/inline/inline.rb:39:in `inline'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:30:in `<module:BaseAPI>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:27:in `<module:C>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:25:in `<module:Tesseract>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:25:in `<top (required)>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `block in require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c.rb:83:in `<top (required)>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `block in require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/api.rb:26:in `<top (required)>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `block in require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:274:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract-ocr.rb:35:in `<top (required)>'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `each'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:72:in `block in require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `each'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler/runtime.rb:61:in `require'
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/bundler-1.10.6/lib/bundler.rb:134:in `require'
/Users/user/work/project/config/application.rb:17:in `<top (required)>'
/Users/user/work/project/Rakefile:4:in `<top (required)>'

在日志中:

g++ -dynamic -bundle -fPIC    -o /var/folders/xg/g9n7qvns5z1gsr_yjh09n1nm0000gn/T/.ffi-inline-501/d2f8bb8a1867b800ff8ad69a3b850c91521b3760.dylib /var/folders/xg/g9n7qvns5z1gsr_yjh09n1nm0000gn/T/.ffi-inline-501/d2f8bb8a1867b800ff8ad69a3b850c91521b3760.cpp -ltesseract 2>>/var/folders/xg/g9n7qvns5z1gsr_yjh09n1nm0000gn/T/.ffi-inline-501/d2f8bb8a1867b800ff8ad69a3b850c91521b3760.log
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:171:10: error: no matching member function for call to 'SetImage'
                                api->SetImage(pix);
                                ~~~~~^~~~~~~~
/usr/local/include/tesseract/baseapi.h:354:8: note: candidate function not viable: 1st argument ('const Pix *') would lose const qualifier
  void SetImage(Pix* pix);
       ^
/usr/local/include/tesseract/baseapi.h:341:8: note: candidate function not viable: requires 5 arguments, but 1 was provided
  void SetImage(const unsigned char* imagedata, int width, int height,
       ^
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:183:49: error: cannot initialize a parameter of type 'tesseract::TessResultRenderer *' with an lvalue of type 'STRING *'
                                return api->ProcessPages(filename, NULL, 0, output);
                                                                            ^~~~~~
/usr/local/include/tesseract/baseapi.h:542:63: note: passing argument to parameter 'renderer' here
                    int timeout_millisec, TessResultRenderer* renderer);
                                                              ^
/Users/user/.rvm/gems/ruby-2.2.2@project/gems/tesseract-ocr-0.1.5/lib/tesseract/c/baseapi.rb:189:65: error: cannot initialize a parameter of type 'tesseract::TessResultRenderer *' with an lvalue of type 'STRING *'
                                return api->ProcessPage(pix, page_index, filename, NULL, 0, output);
                                                                                            ^~~~~~
/usr/local/include/tesseract/baseapi.h:558:40: note: passing argument to parameter 'renderer' here
                   TessResultRenderer* renderer);
                                       ^

我该如何解决?

更新:这不是重复的问题。没用Error setting up the tesseract OCR in gem in rails

【问题讨论】:

    标签: ruby-on-rails macos rubygems tesseract


    【解决方案1】:

    Tesseract 开发人员在 3.0.4 版本中更改了相当多的内容,并且 tesseract-ocr gem 失去了与它的兼容性。我看到的最好的解决方案是现在降级。您可能在您的 Mac 上安装了以前版本的 Tesseract,请使用 brew info tesseract 找出答案。如果是这样,只需使用brew switch。我最近做了brew cleanup,所以我不得不卸载tesseract并从旧公式中安装它,如下所示:

    $ brew uninstall tesseract
    $ brew install https://raw.githubusercontent.com/Homebrew/homebrew/8ba134eda537d2cee7daa7ebdd9f728389d9c53e/Library/Formula/tesseract.rb
    

    这将安装似乎工作的 Tesseract 3.02.02_3d。 您可以在tesseract-ocr repo 找到更多信息并跟踪此问题。

    【讨论】:

    • 这不起作用。抛出一堆警告和不推荐使用的错误
    • @MaheshMesta 抱歉,帮不上忙,从那时起就没有使用 tesseract。我想你必须自己解决它,也许在that repo 中大肆宣传
    【解决方案2】:

    如果您不想降级 Tesseract,另一种快速而肮脏的方法是将 Tesseract 作为 shell 命令执行并打开它保存的文件以访问内容(注意:字符串插值在 shell 命令中有效)

    input_image = 'input.tif'
    `tesseract #{input_image} output -l eng`
    file = File.open('output.txt')
    

    【讨论】:

      【解决方案3】:

      从生成的日志显示我缺少头文件,我的问题是我引用了错误的版本,所以, 将这些代码添加到 gem 文件解决了我的问题

      ENV['CFLAGS'] = '-I/usr/local/Cellar/tesseract/3.02.02_3/include -I/usr/local/Cellar/leptonica/1.71_1/include'
      ENV['LDFLAGS'] = '-L/usr/local/Cellar/tesseract/3.02.02_3/lib -L/usr/local/Cellar/leptonica/1.71_1/lib'
      

      还要检查你自己的 tesseract 和 leptonica 版本

      【讨论】:

      • 我写道,这个旧修复没有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多