Tesseract-ocr gemstones issue on mac os x

I installed the tesseract-ocr gem (0.1.5).

Dependencies are also established (tesseract / 3.04.00 and leptonica / 1.72)

Mac OS X Yosemity

When I do rake db:migrate an error appears:

 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)>' 

In the magazine:

 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); ^ . 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); ^ 

How can I solve it?

Update: This does not duplicate the question. This does not help. Error setting OCR Tesseract in gems in rails

+5
source share
3 answers

Tesseract developers changed some things in version 3.0.4, and tesseract-ocr gem lost compatibility with it. The best solution that I see is to downgrade at the moment. You may have previous versions of Tesseract installed on your mac, use brew info tesseract to find out. If so, just use the brew switch . I recently did a brew cleanup , so I had to remove tesseract and install it from the old formula, for example:

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

This will install Tesseract 3.02.02_3d, which seems to work. You can find more information and track this issue in the tesseract-ocr repo .

+8
source

If you don't want to downgrade Tesseract, an alternative quick and dirty method would be to execute Tesseract as a shell command and open the file it saves in order to access the content (note: string interpolation works in shell commands)

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

From the generated log, it showed that I was missing the header file, the problem with me was that I was referencing the wrong version, therefore, adding this code to the gem file solved the problem for me

 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' 

also check out your own version of tesseract and leptonica

0
source

All Articles