前提・実現したいこと
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++
ソースコード #include <opencv2/opencv.hpp> #include <opencv2/text.hpp> using namespace cv; using namespace cv::dnn; using namespace std; void main() { // 画像読み込み auto image = cv::imread("moji.jpg"); // グレースケール化 cv::Mat gray; cv::cvtColor(image, gray, COLOR_RGB2GRAY); // 文字認識クラスのインスタンス生成 auto ocr = cv::text::OCRTesseract::create("C:\opencv\tesseract\tessdata", "jpn"); std::string text; std::vector<cv::Rect> boxes; std::vector<std::string> words; vector<float> confidences; // 文字認識の実行 ocr->run(gray, text, &boxes, &words, &confidences); // 結果出力 printf("%s\n", text.c_str()); // 文字のかたまりごとに出力 printf(" 文字 | 位置 | 大きさ | 信頼度\n"); printf("-----------+------------+------------+----------\n"); for (int i = 0; i < boxes.size(); i++) { printf("%-10s | (%3d, %3d) | (%3d, %3d) | %f\n", words[i].c_str(), boxes[i].x, boxes[i].y, boxes[i].width, boxes[i].height, confidences[i]); } }
まだ回答がついていません
会員登録して回答してみよう