はじめに
やり方のガイドではなく個人的に苦しんだところのメモです。同じところで苦しんでいる方は参考になるかもしれません。
やろうとしていたこと
OpenCVとOpenCV-contribを使っていろいろやろうと思い環境構築しました。OpenCVそのもののBuildは配布されているのでダウンロードしてくるだけでよいのですが、contribの追加モジュールを使うためには自前でビルドする必要があります。やり方は調べると詳しいものが色々出てくるので難しくはないのですが、今回想定外のエラーを吐かれまくり苦しむことになりました。
うまくいったやり方
この記事の通りです。一点注意としてはVisual Studioで使うことが前提です。(Pythonなどで使う場合はpipでうまくやる方法があるらしいです。)
以下に苦しみの記録を残しておくので、同じ苦しみを背負うことのないように上のやり方をお勧めします。
結局できなかったやり方
多くのサイトで紹介されているやり方の流れを簡単にまとめると
- 各種必要データ(OpenCV, OpenCV-contrib)をダウンロードしてくる
- 各種必要ツールを準備しておく(CMake, Visual Studio)
- CMakeでビルドの用意
- Visual Studioでビルド
このようになります。より詳しくは
このページが参考になると思います。ただ、ほとんどのサイトが数年前の古い情報で最近の環境とは異なる点があることが多いです。
苦しんだところその1
最初いつぞやに入れた古いバージョンのCMakeでやろうとして失敗しました。これが一番質が悪くて、一見CMakeは問題なく完了しているように見えたのですが、Visual Studioでビルドすると失敗してしまいました。
続いてCMakeをアップデートしてやり直そうと思ったのですが、何も考えずに CMakeダウンロードページ の一番上のものを選択してしまいました。よくみるとRelease Candidate
でよくわからないエラーが大量に発生しました。よくlatest版はバグがあることがあるので~という説明を見ますが実際これで苦しんだのは初めてだったかもしれません。ちなみにこちらはCMakeの段階でエラーが出るので比較的まだマシだったかもしれません。
ツールは基本的に最新のRecommendedを使いましょう。
苦しんだところその2
Visual Studioでの設定についてですが、Debug構成でビルドする際にリリース版であるopencv_world460.libを指定したところランタイムエラーで落ちました。opencv_world460d.libに指定し直して解決。
苦しんだところその3
同じくVisual Studioでの設定についてですが、どうもデバッグを行う際には環境変数をうまく読み込んでくれないらしくプロジェクトのConfigで環境変数を上書きしてやる必要があるみたいです。
苦しんだ上に解決しなかったこと
OpenCV自体は使えるようになったのですが、Tesseract-OCRを使おうとしたところエラーの沼にはまりました。症状としては実行時にtesseract not found
と言われてしまうというものでした。調べるとCMakeの段階でCan't use tesseract
というエラーを吐かれていました。赤文字にもならずしれっとログに書いてあったので見逃していました。TesseractのコンパイルでC++11が要求されており手元のVCコンパイラがC++14であったことでエラーを吐いていたようです。
というところまでは分かったのですが、バージョンを変えてみたりENABLE_CXX11
オプションを試してみたりソースを一部書き換えてみたりしましたが解決できず。結局この方法は諦めました。未だにすこしもやもやしているので詳しい方いらっしゃったら教えてください。