VS Code 環境構築

 

Windows

VS Code 導入すべきアドオン

対象言語のコード補完機能、シンタックスハイライト、デバッグ等をこなすアドオン
コードをきれいにする
  • Beautify
簡単にコードを実行する
  • Code Runner
アイコンをわかりやすく、クールにする
LaTeXをつかう(やめといたほうがいい)
Gitを使う
  • Git Lens

 

AtomVimキーバインドを再利用したいならそれ専用のアドオンがあるので導入おすすめ

 

Code Runnerの設定

以下のような動作を想定する

以下の設定により、Code Runnerは原則WSLのUbuntu上で動くようになった。

言語ごとの設定はまだやってないので後で。

"code-runner.runInTerminal": true,
"terminal.integrated.shell.windows":"C:\\Windows\\System32\\bash.exe",

深いファイル階層で作業していると、WSL上(VS Code上のターミナルでは Codeと表示されるが)のcdコマンドが長くて見づらい。そもそもWSLのターミナルを開く時点で作業用ディレクトリに移動しているので、そこでわざわざcdコマンドを打つ必要はない。

"code-runner.executorMap": {

  "c": gcc $fileName -o $fileNameWithoutExt"

  "cpp": g++ $fileName -o $fileNameWithoutExt"

}

と追記することで、表示されるコマンドを短くできる。実際、このようにしても問題なく動作した。file not found 等のエラーが将来発生した場合は、この設定が原因かもしれないのでコメントを書き足しておくとよいだろう。

C#powershell, bat等を除いては、WSL上で問題なく実行できるはずである。(もちろん、WSL単体で上手く動く場合に限る。そうでなければVS Code上でも上手く動かない。)

 

 LaTeXの環境構築

われわれはかしこいのでその程度の設定は朝飯前なのです。

かしこくないのです。LaTeXは特化したエディタを使うべきなのです。

VS Codeのこのアドオンだとエラーとか見れないのですよ…

"latex-workshop.latex.toolchain":[{
"command": "ptex2pdf",
"args": [
"-l",
"-ot",
"-kanji=utf8 -synctex=1",
"%DOC%"
]
}

 

以上の設定をユーザー設定に追加。

Git LensまたはGit

どうしてもWSLのGitを使いたいのであれば以下を参照。

Rustで書かれてるっぽい。
github.com

ただGit for Windowsのほうが設定楽勝なのでWSLに固執しないで。

 

git-for-windows.github.io

 

Ubuntuの場合

VS Code 導入したアドオン

対象言語のコード補完機能、シンタックスハイライト、デバッグ等をこなすアドオン
コードをきれいにする
  • Beautify
簡単にコードを実行する
  • Code Runner
アイコンをわかりやすく、クールにする
Gitを使う
  • Git Lens

 

VS Codeの設定

ターミナルの設定
  • ターミナルのフォントを変更する

"terminal.integrated.fontFamily" : "TakaoGothic"

Git Lensは勝手にgitを検出してくれるので楽。

 

  • ターミナルにおけるvenvやpyenvの認識

python : select interpriter

を実行すれば、認識しているpythonのバージョン(pyenv含む)や、ワーキングディレクトリにあるvenv環境を一覧で示してくれる。

 

  • Code runner におけるvenvやpyenvの認識

いまのところできないっぽい。

 

pyenvやvenvの導入については

github.comこ↑こ↓を参照

28.3. venv — 仮想環境の作成 — Python 3.6.3 ドキュメント

ほかのenv系も多分認識してくれるはずだが試してない

 

VS Code で pyenv + venv つかうよ

VS Codeが結構よさ気だったので導入した。

ただし何も設定しないでvenvを使うには、いちいち source activateしなければならない。

これは本当にめんどくさいので設定をいじってみた。

 

pyenv については

github.comgit clone して パスをとおしてあげればよい。

pyenv install で 好みのpythonのバージョンをインストールすることができる。

pyenv global (バージョン名) で普段使いのpythonのバージョンを指定できる。

pyenv global でPythonのバージョンを決めたら以下に移る。

 

 

ここでは、「pyenvで作ったPythonのバージョン」、かつ「更にそのバージョンのvenvコマンドで作った仮想環境」を用いたい、VS Codeのプロジェクトのファイル階層を、 ~/VSCode/project0 と仮定する。

 

まずはvenvの作成。project0 以下に作成する。

python -m venv ~/VSCode/project0/venv

ここで、仮想環境を作成するフォルダ名をvenvとしたのは、あとの設定で面倒なことを起こさないようにするため。

プロジェクトごとに仮想環境を用意すれば、仮想環境の名前を区別してあげる必要はない。

 

以下を参照。

code.visualstudio.com

VS Codeで何らかのフォルダを開くと、同じディレクトリ階層に.vscodeというフォルダが生成される。

その中に、settings.jsonというファイルがある。

このファイルを開いて表示される、左右分割されたウィンドウの右側に、

"python.pythonPath" : <ゴニョゴニョ>

と表示されているはず。

これを

"python.pythonPath" : "${workspaceRoot}/venv/bin/python"

 と書きなおしてあげる。

${workspaceRoot} は現在開いて作業しているファイル階層を示す変数であるので、

どのようなフォルダを開いても、(/venv と名のついたフォルダ内にある、) venv 仮想環境を参照してくれるようになる。

Ubuntuの起動音を変更し Intel入ってるにしてみた話

 

著作権、商標権について

著作権法

elaws.e-gov.go.jp

第30条 : 私的利用

(引用:一部強調)

第三十条 著作権の目的となつている著作物(以下この款において単に「著作物」という。)は、個人的に又は家庭内その他これに準ずる限られた範囲内において使用すること(以下「私的使用」という。)を目的とするときは、次に掲げる場合を除き、その使用する者が複製することができる。
一 公衆の使用に供することを目的として設置されている自動複製機器(複製の機能を有し、これに関する装置の全部又は主要な部分が自動化されている機器をいう。)を用いて複製する場合
二 技術的保護手段の回避(第二条第一項第二十号に規定する信号の除去若しくは改変(記録又は送信の方式の変換に伴う技術的な制約による除去又は改変を除く。)を行うこと又は同号に規定する特定の変換を必要とするよう変換された著作物、実演、レコード若しくは放送若しくは有線放送に係る音若しくは影像の復元(著作権等を有する者の意思に基づいて行われるものを除く。)を行うことにより、当該技術的保護手段によつて防止される行為を可能とし、又は当該技術的保護手段によつて抑止される行為の結果に障害を生じないようにすることをいう。第百二十条の二第一号及び第二号において同じ。)により可能となり、又はその結果に障害が生じないようになつた複製を、その事実を知りながら行う場合
三 著作権を侵害する自動公衆送信(国外で行われる自動公衆送信であつて、国内で行われたとしたならば著作権の侵害となるべきものを含む。)を受信して行うデジタル方式の録音又は録画を、その事実を知りながら行う場合
2 私的使用を目的として、デジタル方式の録音又は録画の機能を有する機器(放送の業務のための特別の性能その他の私的使用に通常供されない特別の性能を有するもの及び録音機能付きの電話機その他の本来の機能に附属する機能として録音又は録画の機能を有するものを除く。)であつて政令で定めるものにより、当該機器によるデジタル方式の録音又は録画の用に供される記録媒体であつて政令で定めるものに録音又は録画を行う者は、相当な額の補償金を著作権者に支払わなければならない。
(付随対象著作物の利用)

(引用ここまで) 

商標法

elaws.e-gov.go.jp

私的利用については書かれてない(「私」で調べても検索に引っかからない)。

 

以上の2つの法律と今回の目的と行動は、著作権法第30条の

  • 「私的利用の範囲内での著作物の使用」
  • 「記録または送信の方式の変換に伴う技術的な制約による除去または改変を除く。」

に該当すると考えられます。

…が、所詮素人判断なので、大丈夫だと思ったら試してみてください。

 

Intel、入ってるのアレってカッコいい…カッコよくない?

  • ニコ動の「インテルのCMが凄すぎる件」のような、見ると「すげぇ」という印象を抱くCM
  • 「それまでパッとしなかったのにIntel入れたら(<=ここで音楽流れる)何もかもハイパフォーマンスになる」MAD

で結構強烈な印象があるIntel、入ってる。やっぱりカッコいい…カッコよくない?

 

そんな音楽の音源が今回商標登録され、公式かつ正式な元音源が公開されました。

音楽的要素のみからなる音商標について初の登録を行いました | 経済産業省 特許庁

 

先の著作権や商標に関する個人的な判断を踏まえたうえで、OS起動時にこの音楽流せたらカッコいいよね、という考えから以下のようにして実際にやってみました!

 

 

Windowsじゃできないの?

A. 今のところできないみたいです。

起動時に音を再生することはできても、任意の音源を再生することはできそうにありません。

やるにしてもレジストリをいじる必要があるらしく、面倒そうです。

 

本編:Ubuntuでやってみよう

音源を入手しよう

先ほど示した特許庁のサイトからMP3がダウンロードできるのでダウンロードしよう。

(というかこれダウンロードできるようにしている時点で私的利用OKなのでは?)

ちなみにここで音源を再配信すると著作権法違反に該当する、はず。

音楽的要素のみからなる音商標について初の登録を行いました | 経済産業省 特許庁

 

音源の拡張子変換

Ubuntuが起動した時のデフォルト音源(何という打楽器なんだろうか?)は、 .ogg 形式で保存されている。

ダウンロードした音源はmp3で、再生には専用のコーデックが必要になる。

起動時にmp3の再生に対応しているかわからないので、 .ogg に変換してあげる必要がある。

 

sudo apt-get install soundconverter

 

このコマンドを実行したあと、soundcoverterを起動して2015-029981.mp3をogg形式に変換される、つまり2015-029981.oggが出力される。

法的にこの変換は、先程の著作権法の例外に該当すると判断できる。

 

ファイルの保存

続いて変換したファイルを指定の場所に保存する。

もちろん、元のファイルのバックアップをとることも忘れない。

  • バックアップの作成

cp /usr/share/sounds/ubuntu/stereo/system-ready.ogg /usr/share/sounds/ubuntu/streo/system-ready.ogg.old

cp /usr/share/sounds/ubuntu/stereo/dialog-question.ogg /usr/share/sounds/ubuntu/streo/dialog-question.ogg.old

Ubuntuは起動時にsystem-ready.oggを参照する。続いてsystem-ready.oggはdialog-question.oggを参照する。つまりこれら2ファイルの間にはシンボリックリンクが貼られている。

とりあえず両方バックアップを作成。

 

  • ファイルの名前変更と移動

mv ~/Downloads/2015-029981.ogg dialog-question.ogg

sudo cp dialog-question.ogg /usr/share/sounds/ubuntu/stereo/dialog-question.ogg

 

作業完了。再起動してみよう。

君のパソコンもきっと、「Intel、入ってる!」

え、arm? AMD? powerPC? MIPS? いや〜、それらは流石に…

 

参考サイト

askubuntu.com

 

 

 問題点
  • 音量がめっちゃデカイ…だれか調整方法を…

最大の問題点:

ポップアップで警告出るたびに大音量でポーンポポポポーン!!!!とBGMが流れてしまうので(Firefoxの複数タブを閉じますか?警告のときなど)、やはりこの方法は賢くないやり方だった。

やめておくことをおすすめします。

XTermの設定

まえがき

XTermに対して何も設定を加えずに起動すると、

一時代前のMac OSのような文字が表示される。

 

個人的にはGNOME-terminal の見た目がお気に入りなので、

できる限り似たような見た目に近づけたく、色々調べて設定してみた。

 

今回設定を行う環境は以下の通り。

openSUSE Tumbleweed , GNOME 3

 

XTermの設定ファイル

  • 場所: ~/.Xresources
  • 記法: XTerm*<オプション>      :  <オプションの値>

例: XTerm*utf8 : 1

  • 設定ファイルの読み込み

xrdb .Xresources

 

以下のような設定で、色とメニューバー、スクロールバーの太さ以外はGNOME-terminalに近い見た目になった。

XTerm*locale : true
XTerm*selectToClipboard : true
XTerm*faceName : 'Monospace'
XTerm*forcePackedFont : false
XTerm*faceSize : 12
XTerm*saveLines : 2000
XTerm*cjkWidth : true
XTerm*rightScrollBar : true
XTerm*scrollBar : true

各オプションについての詳細は、以下を参照してください。

  : 上記マニュアルのリンク元。 

Ctrl + F キーを利用してサイト内検索を実行。 "The XTerm Manual" で すぐ見つかる。

これからの予定

  • メニューバーの追加

どうもそういう設定欄はない様子。Ctrlキーを押しながらマウスクリックでメニューが出てくる。

マウスのボタンを押し続ける限りは表示され、指定した位置で離すと、その位置にある設定項目を選択した扱いに成る。

  • スクロールバーの見た目調整

thicknessという設定項目があるが、確認した限りでは設定変更が何ら影響力を持ってなかった。

  • 背景色・文字色変更

誰かGNOME-terminalのシステム背景色のRGBを解析していないかな、なんて思っている。

スクリーンショットを撮った上で、そこからGIMPでRGB値を取得できた。

しかし色合いが微妙に異なりさほど役に立つとは思えなかった。

~/.Xresourcesに以下の設定を追加した。背景は黒色、文字は白色。RGBの値は任意にいじれる。カラープリセットも存在するので、whiteといった指定も可能。

XTerm*background : rgb:20/20/20
XTerm*foreground : white 

 

各オプションの説明

文字コード

XTerm*locale : true

XTermはUTF-8文字コードを採用している。

このオプションにより、XTermがUTF-8の規則に則ってすべての文字の入出力を行うようになる。

フォント

XTerm*faceName : 'Monospace'
XTerm*forcePackedFont : false
XTerm*faceSize : 12

XTerm*cjkWidth : true

XTermのデフォルトフォントはやや見づらい。

faceName : フォントファミリーの指定

forcePackedFont : trueにすると文字と文字の間隔が大きく広がってしまい、悲惨。

faceSize : フォントサイズの指定

cjkWidth : Chinese, Japanese, Korean の cjk。 だが、true/falseしたところで変化がないように見受けられる。

スクロールバー

XTerm*rightScrollBar : true
XTerm*scrollBar : true 

scrollBar : スクロールバーの表示

rightScrollBar : スクロールバーを右側に表示

クリップボード

XTerm*selectToClipboard : true

selectToClipboard : 選択範囲をクリップボード

色関係

XTerm*background : rgb:20/20/20
XTerm*foreground : white 

background : ふつうの背景色指定。rgbで指定可能。 rgb:rr/gg/bbで。

foreground : 文字色やハイライト表示時の背景色を指定する。ハイライト時の文字は色反転する。

 

 

もとはAtomのgpp-compilerが、GNOME-terminalに実行結果を表示しようとするとなぜか落ちるという問題を抱えていたので、GNOME-terminal風に近づけようとしたのだが、なんとなくplatformioのほうがいいと思うようになってきたので、これ以上の改良は行わないことにした。

WSLを導入してみた

結論:

1. WSLの導入はストアからでは駄目(戒め)。コマンドプロンプトからやりなさい。

 

WSLの導入

WSL とは何ぞ?

Bash on Ubuntu on Windows という長ったらしい名前の、要は「Windows上で動く、Ubuntuが備えるbashというシェル環境のエミュレータ、のような何か」が Windows Subsystem for Linux というなんかカッコイイ名前に変わり、「UbuntuのみならずFedoraopenSUSEも動くようになった」凄いやつ。

2017年のWindows Fall Creators Update という、1年に2回開催される大型アップデート祭りのようなものをきっかけに脱βバージョン化した。今までInsider Previewでないと動かせなかったものが正式にWSLとしてお披露目され、一般ユーザーにも広く提供されることになった。

 

WSL有効化のための参考資料

msdn.microsoft.com 

掻い摘んでWSL導入の説明

Cortanaの検索欄に「機能の」と入れると、おそらく検索候補に「Windowsの機能の有効化または無効化」と出てくるのでそれを選択。

そこから「Windows Subsystem for Linux」のチェックボックスにチェックマークを入れて閉じる。

再起動を求められるので再起動。

再起動後コマンドプロンプトを起動。

lxrun /install

Ubuntuのインストールが開始される。

openSUSEFedoraをインストールしたい場合は各自調べてね。

万一環境を弄くりすぎてわけわかめな状態に陥った場合は、以下のようにしてリセットできる。これは気軽でよいリセット。

lxrun /uninstall /full

ちなみにlxrun だけを入力するとヘルプが出現する。

lxrunにはオプションを付けないと実行できない。

 

なぜストアからではなくコマンドプロンプトからなのか?と疑問に対する答えは先頭で述べた通りで、「手間を掛けずに日本語環境をインストールできるから」である。コマンドプロンプトから起動するとWindows側のロケールを検出し、それに合わせてWSL上のロケールも勝手に設定してくれるのだ。

暫く待つとインストールが終わる。HDDやSSDを読み込んでいないのになかなかコマンドラインが変化しない場合は、単にファイルのダウンロード中か、それともコマンドプロンプトそのものがポンコツだからエンターキーを押さないと次の画面状態に変化してくれない、という状態にある。エンターキーを押してとりあえずコマを進めよう。

以上の点は意外と時間を無駄に使ってしまう罠ポイントなので注意。

 

以下コマンドプロンプトに表示された文字列

 

Microsoft Windows [Version 10.0.16299.19]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>lxrun /uninstall /full
警告: lxrun.exe は、Linux ディストリビューションのためにレガシ Windows サブシステムを構成するだけに使用されます。
ディストリビューションは次の Windows ストアを訪問してインストールすることができます:
https://aka.ms/wslstore

これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境およびすべての変更内容、新しいアプリケーション、およびユーザー データが削除されます。
続行するには、"y" を入力してください: y
アンインストールしています...
Windows Subsystem for Linux でインストール、アンインストール操作が保留中です。

C:\WINDOWS\system32>lxrun /install
警告: lxrun.exe は、Linux ディストリビューションのためにレガシ Windows サブシステムを構成するだけに使用されます。
ディストリビューションは次の Windows ストアを訪問してインストールすることができます:
https://aka.ms/wslstore

これにより WindowsUbuntu がインストールされます。UbuntuCanonical によって配布される製品であり、次のサイトに示さ れる条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
UbuntuロケールWindowsロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y

既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: <ユーザー名>
Enter new UNIX password: <パスワード>
Retype new UNIX password: <パスワード再入力>
passwd: password updated successfully
インストールに成功しました!
ドキュメントはこちらで参照できるます: https://aka.ms/wsldocs

C:\WINDOWS\system32>

 

 「ドキュメントはこちらで参照できるます」うーん、愛らしい間違い。

 

aptのミラーサーバ選択

早速apt-get install で…と行きたいところだが、UbuntuDebianといった、aptを使っている人にとっては恒例のapt-getのミラーサーバ選択・更新を行う。やるべきことは 「" /etc/apt/sources.list" にかかれているミラーサーバの問い合わせ先の変更」、または 「 " /etc/apt/sources.list.d/ "ディレクトリに、 sources.list と同じ形式で日本のapt-getミラーサーバについて書いたファイルを置く」かのどちらか。

何言ってるかわからないと思うので以下を見てみてほしい。

mstn.hateblo.jp

 

で、apt-get update。

 

WSLとVisual Studioの連携

 

blogs.msdn.microsoft.com

この点はここに従っておくべし。公式だから。

 

とりあえず、MSDNのブログに書かれていることを続けていけば問題なく動作してくれるはずなので後は任せた。

 

とりあえず試してみる。

上記のサイトのとおりに設定したあとにとりあえずデバッグを行ってみると、以下のようなエラーが得られた。

=thread-group-added,id="i1"
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-mingw32 --target=x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
=cmd-param-changed,param="pagination",value="off"
Loaded 'shared libraries loaded at this time.'. Cannot find or open the symbol file.
Stopped due to shared library event:
Inferior loaded /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
Loaded '/lib/x86_64-linux-gnu/libc.so.6'. Cannot find or open the symbol file.
Loaded '/lib64/ld-linux-x86-64.so.2'. Cannot find or open the symbol file.
[Inferior 1 (process 943) exited normally]
プログラム '' はコード 0 (0x0) で終了しました。

 

問題の詳細とその解決方法は以下に書かれている。

github.com

曰く、"gdbserver"の代わりに"gdb"を利用するといいとのこと…

なんだかなぁ…シンボリックリンクが上手く機能していないだけなように思えるのだけど…(<-これは素人目の意見です)

 

2017/12/28 更新

gdbserverの場合でも、ブレークポイントを設定してあげればエラーを吐かないことが確認されました。

 

 

(じゃぁ一体何が原因なの…)

 

この問題対処にかなり時間を溶かしてしまったので、

この問題には以降一切触れない。

OpenCVとQtとCMakeの扱い

OpenCVはQtと連携できる。

長時間かけてQtをインストールしたらCMakeで一緒にビルド。

基本的には以下のCMakeを使った方法に従う。

www.buildinsider.net

Qt : 

www.qt.io

 

CMake : Download | CMake

 

CMake Guiを起動したら

Add Entry をクリック、CMAKE_PREFIX_PATHという名前で、Qtのギリギリ bin とか libとか見えるファイル階層までのパスを渡す。例:C:/Qt/5.9.2/msvc2017_64

 

Configure をクリック。エラー出たらその都度対処。

NVIDIAGPUを積んでいないならWITH_CUDAとWITH_CUFFTのチェックボックスは必ず外す。外すのを忘れるとビルドに無駄に時間がかかるだけ。

MATLABを持ってないならWITH_MATLABチェックボックスは外す。

 

Qtを使うことを想定しているので、WITH_QTのチェックボックスにチェックマークをつけるのを忘れずに。

 

INSTALL_C_EXAMPLES、INSTALL_PYTHON_EXAMPLES、INSTALL_TESTSのチェックマークはお好みで。

今回は試験的にOPENCV_ENABLE_NONFREE や BUILD_opencv_world もチェックつけてみた。

 

CMAKEは、もととなるものが入ってないのに なぜか

WITH_CUDA

WITH_CUFFT

WITH_OPENCLAMDBLAS

WITH_OPENCLAMDFTT

WITH_JASPER

WITH_GSTREAMER

WITH_1394

WITH_EIGEN

のライブラリ関係にチェックボックスが入ってたりする。

時間がかかるだけなのでチェックは外そう。

CMake Guiの下部に出てくる結果をテキストエディタに貼り付けるなどして、WITH_以降の単語で検索する。そこでNot foundと表示されていたり、 ○○ : No と表示されているもののチェックマークを外すべし。

 

あとは最初の記事に従ってビルドしよう。

夜も遅いので今日はここまで。また後日本記事を更新予定。

openCV3.3.0 を Ubuntu 16.04.3 LTS にインストールするよ

せっかくなので可能な限り Not found の文字を叩き潰しに行く方針に切り替えてみた

 

必要なパッケージはインストール済としているよ

ここの記事とか見とくといい

shibafu3.hatenablog.com

openCVのソースをダウンロードするよ

形式は .zip なり tar.gzなりお好みで (普通は後者)

github.com

 

ダウンロードしたファイルを unzip コマンドだったり、

tarコマンドと、雰囲気で入力するオプションことxvzfとで解凍してあげましょう

 

opencv_contrib というものもあるのでそちらもダウンロードしましょう

wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.3.0.zip

で、openCVディレクトリに移動してそこでbuildディレクトリを作成。要は

cd opencv-<バージョン>

mkdir build

する。

 

CMakeのGUI版を使いたかったので、次のコマンドでインストール。

sudo apt-get install cmake-qt-gui

あともろもろ必要らしいパッケージを全部インストール。AnacondaとQtをインストールしている場合、WITH_QTオプションを有効化するといろんなファイルのディレクトリを聞いてくるが、よく確認して必要に応じて修正を入れること。

WITH_CUDAはNVIDIAの製品持ってないのでチェックを外す。

sudo apt-get install cmake ecm extra-cmake-modules fcitx-libs-dev fcitx-libs-qt5 mesa-utils build-essential git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev x264 libxvidcore-dev yasm libjasper-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg libpng12-dev libdc1394-22 libdc1394-22-dev libpng12-dev libtiff5-dev libjasper-dev unzip qt5-default libeigen3-dev libeigen3-doc tesseract-ocr tesseract-ocr-jpn vtk6 tcl-vtk6 python-vtk6 libvtk5-dev libgflags-dev autoconf automake libtool autoconf-archive libleptonica-dev libtesseract-dev gphoto2 libgstreamer-plugins-base1.0-dev liblapacke-dev libgoogle-glog-dev libprotobuf-dev libprotoc-dev protobuf-compiler ccache python-vtk libgphoto2-dev libavresmple-dev libvtk6-dev libvtk6-qt-dev

また、いくつかシンボリックリンクをはらなきゃいけないらしい

sudo ln -s /usr/include/linux/lib4l1-videodev.h videodev.h

なんかエラーがやかましいので、apt-get したけど vtkは削除した。

-> なんとか対処してみた。

 

CMakeの変数を以下のように指定。

Tesseract_INCLUDE_DIR  :   /usr/include/tesseract

Tesseract_LIBRARY  :  /usr/lib/libtesseract.so.3

あとはQt関係の変数をお好みで編集すればOK、なはず。

あとで環境を再構築する際に問題が出たら、この記事に加筆修正を行う予定。

 

sys/videoio.h について 

長い間苦闘したが、Githubのissueにcontributerからこんな発言があった

Again, "sys/videoio.h not found" is not an error - it is just a check result. So this it is not a problem at all.

github.com

要は sys/videoio.h not found のエラーはガン無視して進めてOK 

 

うまくいくとnot foundが極限まで消えていく。

だれかテトリスとかぷよぷよみたいにNot Foundとかエラーを消すチャレンジをしてください

tiny_dnn の類

vtkの

libvtkRenderingPythonTkWidgets.so

がないというエラーは支障なさそうなので無視。

 

まっさら環境からスタートして。

Detected version of GNU GCC: 54 (504)
Looking for ccache - found (/usr/bin/ccache)
Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found suitable version "1.2.8", minimum required is "1.2.3")
Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.8")
Checking for module 'gtk+-3.0'
No package 'gtk+-3.0' found
Checking for module 'gtkglext-1.0'
No package 'gtkglext-1.0' found
Looking for linux/videodev.h
Looking for linux/videodev.h - found
Looking for linux/videodev2.h
Looking for linux/videodev2.h - found
Looking for sys/videoio.h
Looking for sys/videoio.h - not found
Checking for module 'libavresample'
No package 'libavresample' found
Checking for module 'libgphoto2'
No package 'libgphoto2' found
found Intel IPP (ICV version): 2017.0.2 [2017.0.2]
at: /home/<username>/Build/opencv-3.3.0/build/3rdparty/ippicv/ippicv_lnx
found Intel IPP IW binaries: 2017.0.2
at: /home/<username>/Build/opencv-3.3.0/build/3rdparty/ippicv/ippicv_lnx/../ippiw_lnx/
LAPACK(OpenBLAS): LAPACK_LIBRARIES: /usr/lib/libopenblas.so
LAPACK(OpenBLAS): Support is enabled.
Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY JAVA_INCLUDE_PATH JAVA_INCLUDE_PATH2 JAVA_AWT_INCLUDE_PATH)
The imported target "vtkRenderingPythonTkWidgets" references the file
"/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
"/usr/lib/cmake/vtk-6.2/VTKTargets.cmake"
but not all the files it references.

Found VTK ver. 6.2.0 (usefile: /usr/lib/cmake/vtk-6.2/UseVTK.cmake)
Caffe: NO
Protobuf: YES
Glog: YES
tiny-dnn: Download: v1.0.0a3.tar.gz
Looking for tiny_dnn.h
Looking for tiny_dnn.h - found
Found tiny-dnn in: /home/<username>/Build/opencv-3.3.0/build/3rdparty/tinydnn/tiny-dnn-1.0.0a3
Performing Test COMPILER_SUPPORTS_CXX11
Performing Test COMPILER_SUPPORTS_CXX11 - Success
Looking for pthread.h
Looking for pthread.h - found
Looking for pthread_create
Looking for pthread_create - found
Found Threads: TRUE
Performing Test COMPILER_HAS_SSE_FLAG
Performing Test COMPILER_HAS_SSE_FLAG - Success
Performing Test COMPILER_HAS_AVX_FLAG
Performing Test COMPILER_HAS_AVX_FLAG - Success
Performing Test COMPILER_HAS_AVX2_FLAG
Performing Test COMPILER_HAS_AVX2_FLAG - Success
Checking for one of the modules 'freetype2'
Checking for one of the modules 'harfbuzz'
freetype2: YES
harfbuzz: YES
Found HDF5: /usr/lib/x86_64-linux-gnu/hdf5/serial/lib/libhdf5.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so (found version "1.8.16")
Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF
Performing Test HAVE_CXX_WNO_INVALID_OFFSETOF - Success
No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
Failed to find gflags - Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
Performing Test GFLAGS_IN_GOOGLE_NAMESPACE
Performing Test GFLAGS_IN_GOOGLE_NAMESPACE - Success
Checking SFM deps... TRUE
CERES support is disabled. Ceres Solver for reconstruction API is required.
Excluding from source files list: /home/<username>/Build/opencv-3.3.0/build/modules/imgproc/accum.neon.cpp
Torch importer has been enabled. To run the tests you have to install Torch ('th' executable should be available) and generate testdata using opencv_extra/testdata/dnn/generate_torch_models.py script.
Looking for tiny_dnn.h
Looking for tiny_dnn.h - found
Found tiny-dnn in: /home/<username>/Build/opencv-3.3.0/build/3rdparty/tinydnn/tiny-dnn-1.0.0a3
Performing Test HAVE_CXX_WNO_NON_VIRTUAL_DTOR
Performing Test HAVE_CXX_WNO_NON_VIRTUAL_DTOR - Success
freetype2: YES
harfbuzz: YES
Checking for modules 'tesseract;lept'
Found tesseract, version 3.04.01
Found lept, version 1.73
Tesseract: YES
xfeatures2d/boostdesc: Download: boostdesc_bgm.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
xfeatures2d/boostdesc: Download: boostdesc_bgm_hd.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_064.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_128.i
xfeatures2d/boostdesc: Download: boostdesc_binboost_256.i
xfeatures2d/boostdesc: Download: boostdesc_lbgm.i
xfeatures2d/vgg: Download: vgg_generated_48.i
xfeatures2d/vgg: Download: vgg_generated_64.i
xfeatures2d/vgg: Download: vgg_generated_80.i
xfeatures2d/vgg: Download: vgg_generated_120.i
No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
Failed to find gflags - Failed to find an installed/exported CMake configuration for gflags, will perform search for installed gflags components.
Checking SFM deps... TRUE
CERES support is disabled. Ceres Solver for reconstruction API is required.
Performing Test HAVE_CXX_WNO_UNUSED_BUT_SET_VARIABLE
Performing Test HAVE_CXX_WNO_UNUSED_BUT_SET_VARIABLE - Success

General configuration for OpenCV 3.3.0 =====================================
Version control: unknown

Extra modules:
Location (extra): /home/<username>/Build/opencv_contrib-3.3.0/modules
Version control (extra): unknown

Platform:
Timestamp: 2017-10-25T16:15:58Z
Host: Linux 4.10.0-37-generic x86_64
CMake: 3.5.1
CMake generator: Unix Makefiles
CMake build tool: /usr/bin/make
Configuration: Release

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
SSE4_1 (2 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 (7 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

C/C++:
Built as dynamic libs?: YES
C++ Compiler: /usr/bin/c++ (ver 5.4.0)
C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Winit-self -Wno-narrowing -Wno-delete-non-virtual-dtor -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
C Compiler: /usr/bin/cc
C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Winit-self -Wno-narrowing -Wno-comment -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -msse -msse2 -msse3 -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG
Linker flags (Release):
Linker flags (Debug):
ccache: YES
Precompiled headers: NO
Extra dependencies: /usr/lib/libopenblas.so gtk-x11-2.0 gdk-x11-2.0 pangocairo-1.0 atk-1.0 cairo gdk_pixbuf-2.0 gio-2.0 pangoft2-1.0 pango-1.0 fontconfig gthread-2.0 /usr/lib/x86_64-linux-gnu/libwebp.so /usr/lib/x86_64-linux-gnu/libjasper.so gstbase-1.0 gstreamer-1.0 gobject-2.0 glib-2.0 gstvideo-1.0 gstapp-1.0 gstriff-1.0 gstpbutils-1.0 dc1394 avcodec-ffmpeg avformat-ffmpeg avutil-ffmpeg swscale-ffmpeg vtkRenderingOpenGL vtkImagingHybrid vtkIOImage vtkCommonDataModel vtkCommonMath vtkCommonCore vtksys vtkCommonMisc vtkCommonSystem vtkCommonTransforms vtkCommonExecutionModel vtkDICOMParser vtkIOCore vtkmetaio /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libtiff.so vtkImagingCore vtkRenderingCore vtkCommonColor vtkFiltersExtraction vtkFiltersCore vtkFiltersGeneral vtkCommonComputationalGeometry vtkFiltersStatistics vtkImagingFourier vtkalglib vtkFiltersGeometry vtkFiltersSources vtkInteractionStyle vtkRenderingLOD vtkFiltersModeling vtkIOPLY vtkIOGeometry /usr/lib/x86_64-linux-gnu/libjsoncpp.so vtkFiltersTexture vtkRenderingFreeType /usr/lib/x86_64-linux-gnu/libfreetype.so vtkftgl vtkIOExport vtkRenderingAnnotation vtkImagingColor vtkRenderingContext2D vtkRenderingGL2PS vtkRenderingContextOpenGL /usr/lib/libgl2ps.so vtkRenderingLabel freetype harfbuzz /usr/lib/x86_64-linux-gnu/hdf5/serial/lib/libhdf5.so /usr/lib/x86_64-linux-gnu/libpthread.so /usr/lib/x86_64-linux-gnu/libsz.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/libm.so /usr/lib/x86_64-linux-gnu/libglog.so /usr/lib/x86_64-linux-gnu/libgflags.so tesseract lept dl m pthread rt
3rdparty dependencies:

OpenCV modules:
To be built: core flann hdf imgproc ml objdetect phase_unwrapping photo plot reg surface_matching video viz xphoto bgsegm dnn dnn_modern face freetype fuzzy img_hash imgcodecs shape videoio xobjdetect highgui superres ts bioinspired dpm features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow sfm stitching
Disabled: world contrib_world
Disabled by dependency: -
Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3 cnn_3dobj cvv matlab

Non-free algorithms are enabled

GUI:
QT: NO
GTK+ 2.x: YES (ver 2.24.30)
GThread : YES (ver 2.48.2)
GtkGlExt: NO
OpenGL support: NO
VTK support: YES (ver 6.2.0)

Media I/O:
ZLib: /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.8)
JPEG: /usr/lib/x86_64-linux-gnu/libjpeg.so (ver )
WEBP: /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x0202)
PNG: /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.2.54)
TIFF: /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.6)
JPEG 2000: /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
OpenEXR: build (ver 1.7.1)
GDAL: NO
GDCM: NO

Video I/O:
DC1394 1.x: NO
DC1394 2.x: YES (ver 2.2.4)
FFMPEG: YES
avcodec: YES (ver 56.60.100)
avformat: YES (ver 56.40.101)
avutil: YES (ver 54.31.100)
swscale: YES (ver 3.1.101)
avresample: NO
GStreamer:
base: YES (ver 1.8.3)
video: YES (ver 1.8.3)
app: YES (ver 1.8.3)
riff: YES (ver 1.8.3)
pbutils: YES (ver 1.8.3)
OpenNI: NO
OpenNI PrimeSensor Modules: NO
OpenNI2: NO
PvAPI: NO
GigEVisionSDK: NO
Aravis SDK: NO
UniCap: NO
UniCap ucil: NO
V4L/V4L2: YES/YES
XIMEA: NO
Xine: NO
Intel Media SDK: NO
gPhoto2: NO

Parallel framework: pthreads

Trace: YES (with Intel ITT)

Other third-party libraries:
Use Intel IPP: 2017.0.2 [2017.0.2]
at: /home/<username>/Build/opencv-3.3.0/build/3rdparty/ippicv/ippicv_lnx
Use Intel IPP IW: prebuilt binaries (2017.0.2)
Use Intel IPP Async: NO
Use VA: NO
Use Intel VA-API/OpenCL: NO
Use Lapack: YES (/usr/lib/libopenblas.so)
Use Eigen: YES (ver 3.2.92)
Use Cuda: NO
Use OpenCL: YES
Use OpenVX: NO
Use custom HAL: NO

OpenCL: <Dynamic loading of OpenCL library>
Include path: /home/<username>/Build/opencv-3.3.0/3rdparty/include/opencl/1.2
Use AMDFFT: NO
Use AMDBLAS: NO

Python 2:
Interpreter: /usr/bin/python2.7 (ver 2.7.12)

Python 3:
Interpreter: /usr/bin/python3 (ver 3.5.2)

Python (for build): /usr/bin/python2.7

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

Matlab: NO

Documentation:
Doxygen: NO

Tests and samples:
Tests: YES
Performance tests: YES
C/C++ Examples: NO

Install path: /usr/local

cvconfig.h is in: /home/<username>/Build/opencv-3.3.0/build
-----------------------------------------------------------------

Configuring done

 

<以下過去の内容>

次にcmake。オプションをちゃんと追加しないとえらい目にあう

INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules -D BUILD_EXAMPLES=ON -D WITH_CUDA=OFF -D BUILD_TIFF=ON ..

INSTALL_C_EXAMPLES=OFFは読んで字のごとくCのサンプルをインストールしないオプション。ぶっちゃけC版のサンプルっている?

INSTTALL_PYTHON_EXAMPLES=ONも上に同じ。

OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/については、さっきwgetでダウンロードして展開したファイルを参照する。そこら辺に転がってるオプションのコードだと、3.3.0のバージョン部分がかけててエラー吐くことがあるので注意。

BUILD_EXAMPLES=ON よくわからない。

WITH_CUDA=OFF もちろん僕はGPUなんていう大層なものを今はまだ持ってないのでOFFにした。持ってるならONにしよう。

BUILD_TIFF=ON こいつが結構曲者。このオプションがないとmakeのときに文句言ってくる。

make -j $(nproc)

sudo make install

して終了。めでたしめでたし。

あとはg++でコンパイルするときにオプションを忘れなければ未定義どうこうと文句を言われることはなくなる。

g++ -o <出力ファイル名> <コンパイル対象ファイル名>.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

 で黙ってていただく。

 

終了!優勝!お疲れ!解散!

こんどキネクト買って遊ぶぞ!

yad2kっていうの実際使ったけども結構強力そう…