2018年9月25日火曜日

OpenCV(3.4.3)-pythonのコンフィグレーションを調べてみた

どのようコンフィグレーションなのか下記コマンドで表示させてみた。
結果は、長いので一部省略

当然のことながらcudaは未対応

>>> import cv2
>>> print(cv2.getBuildInformation())

General configuration for OpenCV 3.4.3 =====================================
  Version control:               3.4.3

  CPU/HW features:
    Baseline:                    SSE SSE2 SSE3
      requested:                 SSE3
    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
      SSE4_1 (3 files):          + SSSE3 SSE4_1
      SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
      FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
      AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
      AVX2 (9 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

    Extra dependencies:          /opt/Qt4.8.7/lib/libQtGui.so /opt/Qt4.8.7/lib/libQtTest.so /opt/Qt4.8.7/lib/libQtCore.so /lib64/libz.so /opt/libjpeg-turbo/lib64/libjpeg.a avcodec avformat avutil swscale dl m pthread rt
    3rdparty dependencies:       ittnotify libprotobuf libwebp libpng libtiff libjasper IlmImf

  OpenCV modules:
    To be built:                 calib3d core dnn features2d flann highgui imgcodecs imgproc java_bindings_generator ml objdetect photo python3 python_bindings_generator shape stitching superres video videoio videostab
    Disabled:                    js world
    Disabled by dependency:      -
    Unavailable:                 cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 ts viz
    Applications:                -
    Documentation:               NO
    Non-free algorithms:         NO

  GUI:
    QT:                          YES (ver 4.8.7 EDITION = OpenSource)
      QT OpenGL support:         NO
    GTK+:                        NO
    VTK support:                 NO

  Media I/O:
    ZLib:                        /lib64/libz.so (ver 1.2.3)
    JPEG:                        /opt/libjpeg-turbo/lib64/libjpeg.a (ver 62)
    WEBP:                        build (ver encoder: 0x020e)
    PNG:                         build (ver 1.6.34)
    TIFF:                        build (ver 42 - 4.0.9)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)
    HDR:                         YES
    SUNRASTER:                   YES
    PXM:                         YES

  Video I/O:
    DC1394:                      NO
    FFMPEG:                      YES
      avcodec:                   YES (ver 58.21.104)
      avformat:                  YES (ver 58.17.101)
      avutil:                    YES (ver 56.18.102)
      swscale:                   YES (ver 5.2.100)
      avresample:                NO
    GStreamer:                   NO
    libv4l/libv4l2:              NO
    v4l/v4l2:                    linux/videodev.h linux/videodev2.h

  Parallel framework:            pthreads

  Trace:                         YES (with Intel ITT)

  Other third-party libraries:
    Lapack:                      NO
    Eigen:                       NO
    Custom HAL:                  NO
    Protobuf:                    build (3.5.1)

  OpenCL:                        YES (no extra features)
    Include path:                /io/opencv/3rdparty/include/opencl/1.2
    Link libraries:              Dynamic load

  Python 3:
    Interpreter:                 /opt/python/cp35-cp35m/bin/python (ver 3.5.5)
    Libraries:                   libpython3.5m.a (ver 3.5.5)
    numpy:                       /opt/python/cp35-cp35m/lib/python3.5/site-packages/numpy/core/include (ver 1.11.1)
    packages path:               lib/python3.5/site-packages

  Python (for build):            /opt/python/cp35-cp35m/bin/python

  Java:                         
    ant:                         NO
    JNI:                         NO
    Java wrappers:               NO
    Java tests:                  NO

  Matlab:                        NO

OpenCV-pythonの開発用にVisual Stuidio Codeをインストールした



Visual Stuidio Codeはここにアクセスしダウンロードする

Ubunutは、 .debの64bitを
Windows10は、UserInstallerの64bitをそれぞれダウンロードした

拡張機能のインストール

あると便利なので上記画像のものを使用している

日本語化
Japanese Language Pack for Visual Studio Code が必要

インストール後に、[Ctrl]+[Shift]+[P] でコマンドパレットを表示させ「configure」を入力
下記画面の様に、ロケールをjaに変更し再起動すればよい


メモ 
pylintを有効にすると、cv2の警告がうるさいので向こうとしている
pylintには、ホワイトリストの設定で警告を回避できるが、VSCのpylintはその機能がない

以上

Windows10 64bit上にOpenCV(3.4.3)-Python の環境を構築してみた


 最近Pythonを使う頻度が増えてきたので、Windows10 ノートPC上にOpenCV(3.4.3)-Pythonの環境を構築してみた


最初にWindows10上にPython環境を構築する。そのためにAnacondaをダウンロードしインストールする
ここにアクセスし、Python 3.6 version 64-Bit Graphical Installer (631 MB) を選択する

ダウンロードしたファイルを実行し、指示通りに進めていく
インストールタイプを選択する画面があるが、ここでは、JustMeを選択し、使用しているアカウントのみをインストールの対象とする
(インストールの仕方は、Google先生に聞くと画面付きの手順が多々みつかる)

インストールの途中で、Visual Studio Codeのインストールを聞かれるが、インストール時はパスした (結局後で、自分でインストールを行った)

インストールが完了すると、
Windows のスタートメニューに、Anaconda3 (64-bit)が作成される
その中のAnaconda Promptを選択するとPythonが使用できるコンソールが起動される

事前にcondaを最新にしておく(インストールしたばかりは、環境は、Base(root)しかない)

conda update -n base conda
conda update -y --all


メモ
pythonは、以下のものが使用される
C:\Users\hogehoge\AppData\Local\Continuum\anaconda3\python.exe
(hogehogeはユーザネーム )

新規環境を構築するとC:\Users\hogehoge\AppData\Local\Continuum\anaconda3\envの下に、関連ファイルが一式保存される

pip関連
pipのバージョン確認
pip -V
pip 18.0

pipでインストールした物
pip list

pip の更新
python -m pip install --upgrade pip (--proxy=proxy.hogohoge.co.jp:8080)

pipでインストール
pip install opencv-python==3.4.3.18
pip install ipython
pip install matplotlib
pip install jupyter

参考にしたページ

Windows で Anaconda 5.2.0 のインストールと Python 3.6 の設定(パッケージのインストールなど)

2018年9月24日月曜日

OpenCV3.4.3のDNNのサンプルを眺めてみた

4.0のアルファが公開されているので今さらだがメモ

3.4.2との比較



mask_rcnn.py tf_text_graph_common.py tf_text_graph_mask_rcnn.pyが追加されている

tf_textは、モデルのネットワーク構成を図にするサンプルであるが、実行にはtfパッケージが必要なので、OpenCVで描画する必要性は疑問である。

mask_rcnnは、4.0の更新に記載されているが、3.4.3の時からサポートされている


後で試した結果を掲載する

Ubuntu 16.04.5上にOpenCV-pythonの環境を構築した

初期状態のUbuntu上にOpenCv-Python(3.4.3)の環境を構築した時のメモ

お決まりコマンド
sudo apt-get -qq update && apt upgrade -y

必要なパッケージのインストール
sudo apt install --no-install-recommends -y wget unzip libglib2.0-0 libsm6 libxrender1 libxext6 python3 python3-dev python3-numpy

PIPのインストール(認証エラーが生じたので、オプションを追加)
wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

OpenCV-pythonをインストール

pip install matplotlib opencv-python

最後に
echo 'alias python="python3"' > .bashrc

確認




メモ
cv2をインポートした時にライブラリがないとの警告が出た場合、
apt-cache search libXrender
でパッケージ名を探し、apt-get install すればよい

使用できるOpenCVを調べる
pip install opencv-python==5
存在しないバージョンを指定する

Could not find a version that satisfies the requirement opencv-python==5 (from versions: 3.1.0.0, 3.1.0.1, 3.1.0.2, 3.1.0.3, 3.1.0.4, 3.1.0.5, 3.2.0.6, 3.2.0.7, 3.2.0.8, 3.3.0.9, 3.3.0.10, 3.3.1.11, 3.4.0.12, 3.4.0.14, 3.4.1.15, 3.4.2.16, 3.4.2.17, 3.4.3.18)
No matching distribution found for opencv-python==5

以上

2018年9月21日金曜日

カーネルを更新したらログインループとなり困ってしまった。


Ubunt16.04LTSを使用しているので、カーネルを更新する必要はなかったが、魔がさしてしまい更新したところ、ログインループと呼ばれる現象が生じ、GUI環境が使用できなくなってしまった

Google先生で調べてみると、nVidiaのドライバー特有の問題で、様々な対策方法が見つかった。
(何回、ドライバーのインストールと削除を繰り返したか忘れた)


最終的には、以下のコマンドを実行し、rebootしたらGUI環境に戻っていた。

sudo apt-get install --install-recommends linux-generic-hwe-16.04 xserver-xorg-hwe-16.04


uname -a
旧 4.4.0-135-generic    新 4.15.0-34-generic

nvidia-smi
Driver Version: 390.87


設定を見ると、396.54も選べそうだが、しばらく様子見とする

OpenCV4.0 アルファのchange logを訳してみた

昨日、リリース予定の件を書いたら、翌日には4.0アルファがリリースされていた。
当初は、ベータだったのに、アルファに後退している。あと、数回中間でのリリースがされることが予想される

3.4.3の変更点は、9/21の時点では、TBDになったいるが、4.0アルファ版は、変更点が掲載されていたので、ざっくり訳してみた(一部分からないところは、省略している)

原文は、ここ

4.0前の最初の中間リリースである

 OpenCV 4.0 は現在C ++ 11ライブラリであり、そのため、C ++ 11準拠のコンパイラが必要。
OpenCV 3.xは、 - DENABLE_CXX11=ONflagをCMakeに渡すことでC ++ 11ライブラリとして構築することができる
しかし、いまでは、そのフラグは不要で、りようできない。

拡張されたC ++ 11標準ライブラリのおかげで、独自のcv::String and cv::Ptrを取り除くことができる
現在、cv::String と std::string は同じで、cv::Ptr は、std::shared_ptrのラッパーである。
Linux/BSD parallel_for_ のデフォルトは、pthreadsの代わりに、std::threadsを使用します

DNN の改良

Mask-RCNN モデルサポート
ONNXパーサーの統合により、多くの分類用ネットワークを読み込むことができる。
ONNX 版の YOLOは、 最終領域情報を出力する最終層がサポートされていない。
Intel DLDTサポートを組み込んだDNNモジュールのパフォーマンスをさらに向上させた。

パフォーマスの改良

ワイドユニバーサル組み込み関数により、多くの基本カーネルを書き直した。
ターゲットプラットフォームとコンパイルフラグに応じて、これらの関数は、SSE2, SSE4, AVX2, NEON or VSXにMAPされている。
CPU_BASELINE=AVX2 CMake flagを設定してコンパイルすれば、特定の画像処理操作で、15から30%速度が向上する
OpenCV 4.0では、より多くのカーネルをこのような組み込み関数に変換し、ダイナミックディスパッチメカニズムを採用する予定。
実際のハードウェアが、AVX2命令をサポートしている場合、AVX2最適化カーネルが実行時に選択される

QRコード検出が、サンプルとともに、物体検出モジュールに追加された。

人気のあるKinect Fusionが、CPUとGPU(OpenCL)用に最適化されて実装され、opencv_contrib/rgbd モジュールに統合された
ライブサンプルを作成するために、opencv/videoioモジュールに、 Kinect 2サポートを行った。


CUDAのcontribへの移動は触れられていない

以上

2018年9月19日水曜日

数日以内にOpenCV 4.0ベータがリリースされる予定である。


先週の会議メモによると今週水曜日(日本時間だと木曜)に4.0のベータ版のリリースが予定されている

4.0アルファ(午前の記述はベータだった)のIssuesは、23時の時点で2個Openなっている。これが0になったらリリースされるのか、そのままリリースされるのかは分からない

公式リリースを待たなくてもmasterのファイルを調べてみると、いくつかの追加機能が確認できる。

力を入れているdnnモジュールは、ONNX対応になっている。リリースされたら、試してみる予定である。

2018年9月5日水曜日

OpenCV 3.4.3でYolo V3を試してみた (I tried Yolo V3 with OpenCV 3.4.3)


3.4.2の時の話はここ。

3.4.2でためした時から以下の変更あり

1. サンプルのtipoが修正されている

  issueへの報告により、line 23の変数がnmsに

2 windowサイズの問題

縮小表示される原因がわかり対処
 オリジナルのサイズで結果が表示されるようになった。

 原因
 スクロールバーを表示するために事前にwindwoを作成していたため

 対処
 line 92から94をコメントアウト

3 関連データの場所

configファイルはここ
  Weightファイルはここ
 クラス名はここ

 これらは、dnn サンプルページの下段のここからたどる
 

コマンドは、以下のもの
(オリジナルを修正しているため、ファイル名を買えている)

 ./yolov3_object_detection -config=yolov3.cfg -model=yolov3.weights -input=train1.png -width=416 -height=416 -scale=0.00392 -classes=object_detection_classes_yolov3.txt -rgb=true


OpenCV 3.4.3 がリリースされた (OpenCV 3.4.3 was released)




3.4.2同様に公式発表はありませんが、3.4.3が8/29にリリースされました

リリース情報 なし

ドキュメント
変更点 (書きかけ)
github

また、予定日は記載されて以内が、3.4.4の準備が進んでいる


以上

2018年7月18日水曜日

ubuntuの各種ツール、ライブラリのバージョン確認方法 2018/07/18

はじめに

環境構築時に影響を及ぼす、各種ツール、ライブラリのバージョンの確認方法をメモしたものである
2018/7/18版
 
ubuntu
 cat /etc/lsb-release
    DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"
    DISTRIB_DESCRIPTION="Ubuntu 16.04.5 LTS" (9/19)

kernel
 uname -r
    4.4.0-130-generic
    4.4.0-135-generic (9/19)


gcc
 gcc --version
    gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609

docker

 docker --version
    Docker version 17.05.0-ce, build 89658be

GPUボード情報

 nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 105...  Off  | 00000000:01:00.0  On |                  N/A |
| 43%   28C    P8   ERR! /  75W |    399MiB /  4037MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                              
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1036      G   /usr/lib/xorg/Xorg                           221MiB |
|    0      2538      G   compiz                                        98MiB |
|    0      3686      G   ...-token=FBE45A9952681D539215C61CB0298B6B    75MiB |
+-----------------------------------------------------------------------------+

2018年7月14日土曜日

OpenCV 3.4.3のリリースが予定されている



7/4に3.4.2がリリースされたばかりであるが、3.4.3が既に計画されている。(リリース日は未定)
マイルストーン情報はここ 

この情報を知ったのは、一昨日にissueとして報告したbugの修正版が、3.4.3にマージされたとの報告があったため。

どこのコードに反映されているのかGitHubの運用方法をよく理解していなく、いろいろ見て見たところブランチ3.4にマージされていた

サイト主は、GitHUBには疎いので、自分でPRをすることができない。今後、この辺の仕組みを調べて自分でPR出きるようにしたい。

OpenCV 3.4.2 for windows Prebuild版のConfigrationを表示させてみた (I displayed a configration of OpenCV 3.4.2 for windows prebuild version.)


Windows版のOpenCVは、ソースだけでなく、ビルドされたバイナリーファイルも同梱されている。
同梱されているバイナリーのConfigrationは、cv::getBuildInformation() APIで取得できる

上記APIを表示されるソースファイルを作成し、Windowsコンソールで実行させ、出力をファイルとしてここに保存した。

・有効モジュール
    calib3d core dnn features2d flann highgui imgcodecs imgproc java_bindings_generator ml objdetect photo python_bindings_generator shape stitching superres video videoio videostab world

CPU/HW 最適化
    Baseline:                    SSE SSE2 SSE3
      requested:                 SSE3
    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
      SSE4_1 (3 files):          + SSSE3 SSE4_1
      SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
      FP16 (1 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
      AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
      AVX2 (9 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2


気になったオプション
    JPEG:                        build-libjpeg-turbo (ver 1.5.3-62)
  Parallel framework:            Concurrency
  OpenCL:                        YES (no extra features)


2018年7月12日木曜日

OpenCV 3.4.2でYolo V3を試してみた (I tried Yolo V3 with OpenCV 3.4.2)



3.4.1の時からYoloのV3がサポートされてたようである
使用したサンプルファイルは、これ

ただし、1ヶ所間違い(line 25)があり、issueとして報告中

 誤 "{ thr         | .4 | Non-maximum suppression threshold. }"
 正 "{ nms         | .4 | Non-maximum suppression threshold. }"

ビルドして下記コマンドを実行
./object_detection -config=yolov3.cfg -model=yolov3.weights -input=train1.png -width=416 -height=416 -scale=0.00392 -classes=coco.names -rgb=true

configファイルはここに
Weightファイルはここに
(サイズが248Mあり、サーバが細いのでダウンロードに約30分かかる)

結果は冒頭の画像(色は変更している)
trainのconfidenceが1となっており、V2と比較して向上していると思われる

トラックバーは動かしても再計算されないので、修正が必要
(カメラストリームの場合は有効、静止画には意味ない)

なぜか結果が縮小されて表示されるので調査中

Open CV 3.4.2のdnnのsampleを眺めてみた (I looked through the sample of dnn of Open CV 3.4.2)



サンプルはここ
build の時間短縮のため、sample ファイルの build は行わず、必要に応じて個々にビルドしている
最近では python のサンプルもあるので、手軽にためせる。

最近OpenCV.orgがフォーカスしているのが dnn まわりで、サンプルも修正され、3.4.1と比較すると、モデル別のサンプルが、classification と object_detection に集約されている

集約されたためサンプルファイル数は減少したが、ソースが肥大化(結果のデータの取得方法と描画がifで記載されている)しているのは、いただけない。
また、windowにトラックバーがつくようになり、しきい値の調整ができる。

各種のWeightデータは、pythonのスクリプトで一括ダウンロード行うようになっているが、時間がかかるため、スクリプトを修正して必要なものだけダウンロードすればよい

OpenCV 3.4.2 がリリースされた (OpenCV 3.4.2 was released)



公式発表はありませんが、3.4.2が7/4にリリースされました

リリース情報 なし
ドキュメント
変更点は記載なし
github

以上