質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

9590閲覧

Visual Studio 2017 C++ Tesseract 4.1.0 OpenCV 4.0.1 ビルド後のサンプルコードのエラーについて

omednan118

総合スコア10

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Tesseract

Tesseractは、Googleが提供しているオープンソースのOCRエンジンです。機械学習があり60以上の言語に対応でき、日本語の文字認識も可能です。さらに精度を上げることもできます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/03/11 10:10

前提・実現したいこと

Tesseract OCRをインストールして、OpenCVでサンプルコードを動かしたいです。

環境
・Windows 10 64bit
・Visual Studio 2017
・Tesseract 4.1.0
・OpenCV 4.0.1
・OpenCV_contrib 4.0.1
・CMake 3.14.0-rc3
・vcpkg

Visual StudioとOpenCVをインストールして、
OpenCVの動作確認はできています。

また、コマンドプロンプトを使い、vcpkgでTesseractをインストールし、
CMakeでOpenCV_contribを"Configure"し、
Tesseractも"Configure"した後、"Gnerate"しました。
OpenCV.slnをVS2017で開き、x64のreleaseで、
バッチビルドにより、INSTALLとALL_BUILDのビルドに成功しています。

この方法は、以下のサイトを参考にしています。
https://qiita.com/lilac0011/items/9fe6e061c3a036689a36

発生している問題・エラーメッセージ

問題はここからです。

無事ビルドが完了し、下記のサンプルコードをデバッグしたところ、
以下2つのエラーが発生してサンプルコードが動きません。

プロジェクトのプロパティは以下の通り設定しました。

■ 追加のインクルードディレクトリ
C:\opencv\vcpkg-master\installed\x64-windows\include;
C:\opencv\build\include;%(AdditionalIncludeDirectories)
■ 追加のライブラリディレクトリ
C:\opencv\build\x64\vc15\lib;%(AdditionalLibraryDirectories)
■ 追加の依存ファイル
opencv_world401d.lib;%(AdditionalDependencies)
(その他インストール直後の初期ファイル)

ググっても情報が少ないため自己解決できません。
Tesseractの導入に詳しい方、ご教授お願いします。

LNK2019 未解決の外部シンボル "public: static struct cv::Ptr<class cv::text::OCRTesseract> __cdecl cv::text::OCRTesseract::create(char const *,char const *,char const *,int,int)" (?create@OCRTesseract@text@cv@@SA?AU?$Ptr@VOCRTesseract@text@cv@@@3@PEBD00HH@Z) が関数 main で参照されました。 TesseractTest C:\Users\Taro\source\repos\TesseractTest\TesseractTest\TesseractTest.obj LNK1120 1件の未解決の外部参照 TesseractTest C:\Users\Taro\source\repos\TesseractTest\x64\Debug\TesseractTest.exe

該当のソースコード

C++

1ソースコード 2 3#include <opencv2/opencv.hpp> 4#include <opencv2/text.hpp> 5 6using namespace cv; 7using namespace cv::dnn; 8using namespace std; 9 10void main() 11{ 12 // 画像読み込み 13 auto image = cv::imread("moji.jpg"); 14 // グレースケール化 15 cv::Mat gray; 16 cv::cvtColor(image, gray, COLOR_RGB2GRAY); 17 // 文字認識クラスのインスタンス生成 18 auto ocr = cv::text::OCRTesseract::create("C:\opencv\tesseract\tessdata", "jpn"); 19 20 std::string text; 21 std::vector<cv::Rect> boxes; 22 std::vector<std::string> words; 23 vector<float> confidences; 24 // 文字認識の実行 25 ocr->run(gray, text, &boxes, &words, &confidences); 26 27 // 結果出力 28 printf("%s\n", text.c_str()); 29 // 文字のかたまりごとに出力 30 printf(" 文字 | 位置 | 大きさ | 信頼度\n"); 31 printf("-----------+------------+------------+----------\n"); 32 for (int i = 0; i < boxes.size(); i++) 33 { 34 printf("%-10s | (%3d, %3d) | (%3d, %3d) | %f\n", 35 words[i].c_str(), 36 boxes[i].x, boxes[i].y, 37 boxes[i].width, boxes[i].height, 38 confidences[i]); 39 } 40}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omednan118

2019/03/11 11:02

コメントありがとうございます。 上記URLの質問者は、ビルドまでたどり着いていないので、私の問題とは少し違いますね。
iwanote

2019/03/12 08:26

環境変数大丈夫ですか?
iwanote

2019/03/14 12:39

tesseractを使用するには、vcpkgの「\installed\x64-windows\bin」以下にあるdllも必要。環境変数にここも含めるか、丸々コピーして使ってください。当然opencv_world400.dllも。 らしいですが大丈夫ですか?
omednan118

2019/03/14 13:27

環境変数も含めることも丸々コピーも両方やりましたが、ダメでした。 参考サイトに書いてあることは一通り試したはずです。
iwanote

2019/03/14 14:01

全然的外れかもしれないですけどreleaseビルドしてるのになんで401d.libなんだろうかと疑問があります
omednan118

2019/03/14 14:17

書き忘れましたが、追加の依存ファイルには「opencv_world401d.lib」と「opencv_world401.lib」を両方入れてあります。 確かに、ビルドするときにReleaseしかしていなかったと思うので、Debugもビルドしてみます。
omednan118

2019/03/16 09:00

Debugでビルドするとエラーが大量に発生します。 Debugで実行しても2つのエラーは残ったままです。 まだ解決していないので、回答募集中です。
t_obara

2019/03/25 01:31

未解決の外部シンボルということは、利用したいライブラリのリンクをしようとしているが、シンボルが見当たらないという意味です。インポートライブラリが適切に指定されていないあるいは、ライブラリパスの指定が適切でない可能性が高いです。特にTesseract_LIBRARYに関する環境変数が適切かよくご確認ください。
omednan118

2019/03/25 12:56

Cmakeの「Tesseract_LIBRARY」は C:\opencv-4.0.1\vcpkg-master\installed\x64-windows\lib を設定しています。このフォルダには、 pkgconfig, gif.lib, icudt.lib, icuin.lib, icuio.lib, icutu.lib, icuuc.lib, jpeg.lib, leptonica-1.76.0.lib, libpng16.lib, lzma.lib, pkgconfig, tesseract40.lib, tiff.lib, tiffxx.lib, turbojpeg.lib, zlib.lib の1個のフォルダと15個のファイルがあります。 Tesseract_LIBRARYに関する環境変数とは、具体的に何を指すのでしょうか?
omednan118

2019/03/25 13:06

ちなみに、CMake 3.14.0-rc3は使用できなくなり、現在はCMake 3.14.0を使用しています。 vcpkgは1週間程度で更新され、常に最新版をダウンロードしてインストールしないと、エラーになります。 C#のTesseractSharp(Nuget)とAndroid StudioのTess-Twoは、インストールに成功しましたが、C++では未だにTesseractのインストールに成功していません。 まだまだ回答募集中です。
t_obara

2019/03/26 01:49

Tesseract_LIBRARYはパスではなくインポートライブラリtesseract40.libをフルパスで設定する様です。
omednan118

2019/03/26 03:45

コメントありがとうございます。 すみません、上記は書き間違えで、 Cmakeの「Tesseract_LIBRARY」は C:\opencv\vcpkg-master\installed\x64-windows\lib\tesseract40.lib で設定していましたので、別の原因があるようです。
guest

回答1

0

同じ問題遭遇しました。
原因はおそらくOCRTesseractモジュールのビルドがちゃんとできてないからと思います。
下記リンクの手順でOpenCVをビルドしなおしたら解決しました。
https://answers.opencv.org/question/171470/opencv-ocrtesseractcreate-v305/
ポイントとしては、
・先にtesseractとleptonicaをインストールし(INSTALLプロジェクトのビルドを忘れずに)、lib、includeなどのフォルダ、ファイルがコピーされたこと
・opencvをインストール時には、OPENCV_EXTRA_MODULES_PATHを設定して、Configureボタン押したら、Tesseract: YESといわれること

投稿2019/06/12 12:23

QQ357393480

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問