QRコードを正しく読み込むためにopencv4nodejsを入れてみる
最近nodejsでシステム開発しているのだが、QRコードのスキャンをZBarでやっている。
しかし、現場で撮影した写真からQRコードをスキャンすると結構認識率が悪い。
ボケているのやら、斜めになっているのやらがあるせいだと思うのだが...
そこで、OpenCVで画像処理したらうまくいくのでは?と思いopencv4nodejsを入れてみることにした。
とりあえずは、QRコードの部分を切り出して、グレースケールに変換ができればOKかな。顔検出とかもできるかも。
ということで、さっそくnpmでインストール。
npm install --save opencv4nodejs
あーん、即エラー。先は長そう。
エラーをよく見ると「cmakeが無い」だけのよう。
sudo yum install cmake
でサクッとインストール。
再度、npm installすると
npm install --save opencv4nodejs
コンパイルしているが、警告が山のように出ている。大丈夫かこれ...
しばらくすると、案の定、致命的エラーでビルドできず。あーんもう。
調べると、gccのバージョンが古いとダメっぽい。CentOS7ってもう古いよね(Macでやればよかったか)。
sudo yum install centos-release-scl sudo yum install devtoolset-7-gcc* scl enable devtoolset-7 bash
てな感じでgccをバージョンアップ。
一度、npm uninstall opencv4nodejsで削除してから、もう一度トライ。
今度は、警告は出ないみたい。
[ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/glob.cpp.o [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/hal_internal.cpp.o [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/kmeans.cpp.o [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/lapack.cpp.o Linking CXX static library ../lib/liblibprotobuf.a [ 51%] Built target libprotobuf [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/lda.cpp.o [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/logger.cpp.o [ 51%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/src/lpsolver.cpp.o
よしよし、順調に進んでいる。
とおもいきや、おしくも最後の方(と思われる)でエラー。
ERR! In file included from /home/asai/crevia/node_modules/opencv-build/opencv/build/include/opencv2/ml.hpp:1967:0, from ../cc/machinelearning/machinelearning.h:3, from ../cc/opencv4nodejs.cc:25: /home/asai/crevia/node_modules/opencv-build/opencv/build/include/opencv2/ml/ml.inl.hpp: In function ‘int cv::ml::simulatedAnnealingSolver(SimulatedAnnealingSolverSystem&, double, double, double, size_t, double*, cv::RNG&)’: /home/asai/crevia/node_modules/opencv-build/opencv/build/include/opencv2/ml/ml.inl.hpp:55:0: note: -Wmisleading-indentation is disabled from this point onwards, since column-tracking was disabled due to the size of the code/headers return exchange;
もう、何言ってるのかよくわからん。
エラーの内容が出てないじゃん。
どうも、-Wmisleading-indentationが無効になってるよ。ということらしいのだが...
ミスリードインデンテーションって何?と思って、ソースコードを開いてみる。
53: if (lastTemperature) 54: *lastTemperature = Ti; 55: return exchange; // ここでエラーが発生している 56:}
ああ、そういうことか。インデントの付け方が、ミスリード(誤解を招く)ということなのね。
if文の後がブロックになっておらず、1ステートメントだけなので、55行目のインデントとしては正しいと思うのだが...
コンパイラのバグか?
まぁ、いいや。以下のように修正してみた。
53: if (lastTemperature) { 54: *lastTemperature = Ti; 55: } 56: return exchange; 57:}
これなら文句ないでしょう。
同じようなエラーがもう一つ出たので同じように修正して、再度ビルド。
CXX(target) Release/obj.target/opencv4nodejs/cc/features2d/detectors/SimpleBlobDetectorParams.o CXX(target) Release/obj.target/opencv4nodejs/cc/xfeatures2d/xfeatures2d.o CXX(target) Release/obj.target/opencv4nodejs/cc/xfeatures2d/SIFTDetector.o CXX(target) Release/obj.target/opencv4nodejs/cc/xfeatures2d/SURFDetector.o SOLINK_MODULE(target) Release/obj.target/opencv4nodejs.node COPY Release/opencv4nodejs.node make: ディレクトリ '/home/asai/crevia/node_modules/opencv4nodejs/build' から出ます + opencv4nodejs@5.6.0 updated 1 package and audited 580 packages in 366.42s 18 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
やった!
できたっぽい。
使い方についてはまた今度。
投稿者プロフィール

最新の投稿
コンピューター関係の記事2025年4月26日アイキャッチ画像にSQLアイコンとJSONアイコンが欲しい
コンピューター関係の記事2025年4月23日AdSense審査に無事パス
コンピューター関係の記事2025年4月22日SSブログ復活
コンピューター関係の記事2025年4月22日SSブログが無くなった余波は大きい