ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【python】Windowsにdlibをインストールする

 以前の記事でMacにdlibをインストールしました。

 今回はWindowsでもdlibのインストールをやってみたのでその備忘録です。

 では始めます。


0:前提条件
 以下の記事を参考にしてWindowspythonOpenCVを入れて使える状態にしておきます。
rikoubou.hatenablog.com


1:CMakeのインストール
 最初にCMakeをインストールします。

 CMakeのダウンロードページからインストーラを選択してダウンロードします(ここでは3.15.0の64bit)。
f:id:rikoubou:20190617151715p:plain

 インストーラを起動させて指示通りにインストールしていけばOKです。

 CMakeがインストールできたかはPowerShellを立ち上げ、以下のコマンドを入力します。

$ cmake --version

 エラーなくCMakeのバージョンが表示されればインストールできています。


2:Visual Studioのインストール
 次にCMakeのバージョンに合ったVisual Studioコンパイラを入れる必要があります。
 1でCMake 3.15.0をインストールしていた場合は、Visual Studio 2019のコンパイラが必要になります。

 個人利用なのでCommunityを選択してダウンロードします。
f:id:rikoubou:20190617153134p:plain

 インストーラを起動させて色々やっていくと途中で以下のような画面になりますが、コンパイラさえ入ればいいので「C++によるデスクトップ開発」にのみチェックを入れてインストールします。
f:id:rikoubou:20190617153852p:plain

 これでVisual Studio 2019のコンパイラが入ります。


3:pipを使ってdlibをインストールする
 ようやくdlibをインストールする準備ができたのでPowerShellを立ち上げて、以下のpipコマンドでdlibをインストールします。

$ pip install dlib

 インストールにしばらく時間がかかりますが、エラーなく終了していれば大丈夫です。

 PowerShellを立ち上げpythonでimportしてエラーが出なければちゃんとインストールできています。

$ python
>>> import dlib # ここでエラーがでなければOK
>>> exit()


おまけ:自分が嵌ったエラー
 dlibのインストールコマンドでエラーになる場合があります。
 自分の場合はCMakeもVisual Studioも入れているのに以下のようなエラーが出ました。

Collecting dlib
  Using cached https://files.pythonhosted.org/packages/05/57/e8a8caa3c89a27f80bc78da39c423e2553f482a3705adc619176a3a24b36/dlib-19.17.0.tar.gz
Installing collected packages: dlib
  Running setup.py install for dlib ... error
--- 中略 ---
    -- Building for: Visual Studio 16 2019
    CMake Warning (dev) in CMakeLists.txt:
      No project() command is present.  The top-level CMakeLists.txt file must
      contain a literal, direct call to the project() command.  Add a line of
      code such as
    
        project(ProjectName)
    
      near the top of the file, but after cmake_minimum_required().
    
      CMake is pretending there is a "project(Project)" command on the first
      line.
    This warning is for project developers.  Use -Wno-dev to suppress it.
--- 中略 ---
    -- Found PythonInterp: C:/xxxxx/Python/Python37-32/python.exe (found version "3.7.3")
    CMake Error at C:/xxxxx/pip-install-ykd_q9zp/dlib/dlib/external/pybind11/tools/FindPythonLibsNew.cmake:122 (message):
      Python config failure: Python is 32-bit, chosen compiler is 64-bit
--- 以下略 ---

 このエラーの中で重要なのは「Python config failure: Python is 32-bit, chosen compiler is 64-bit」の部分で、要は「Pythonは32bitだけどコンパイラは64bitなのでエラー」ということです。

 pythonのインストール時に64bitか32bitかを確認しておく必要があります。
 もちろんCMakeのインストール時にも64bitか32bitかを確認して合わせるようにしましょう。


 以上がWindowsにdlibをインストールする方法です。

 Macの時とは違ってVisual Studioのインストールが必要だったりと色々と大変でした…。


・参考資料

【python/OpenCV】Windows10にpythonとOpenCVの環境を構築する

 今まで以下のようにDebianMacOSでのOpenCVの環境構築をやってきました。

 今回はタイトルにある通りWindows10でもpythonOpenCVを入れるところまでやってみたのでその備忘録です。

 では始めます。


1:pythonのインストール

※2019/06/17:色々間違っていたので修正しました。

 まずは公式ページからpythonをインストールします。

 公式ページのDownloadのところからWindowsを選択します。
f:id:rikoubou:20190617144610p:plain

 Downloadのページにある中からバージョンと32bitか64bitかを選んでダウンロードします(今回は3.7.3の64bitを選択しました)。
f:id:rikoubou:20190617144834p:plain

 ダウンロードしたインストーラを起動させると以下のような画面になるので、左下のチェックボックス2つにチェックを入れます。
f:id:rikoubou:20190617145251p:plain

 あとはインストーラーの指示に従っていけばpythonのインストールは終了します。

 インストールが終了したらPower Shellを起動させて、以下のバージョン確認コマンドでエラーがなければインストールが完了しています。

$ python -V

 エラーが出た場合はチェックボックスの両方にチェックが入ってなかった(環境変数のパス設定をしていない)可能性が高いので、一度アンインストールしてからやり直すと良いかと思います。


2:pipの最新化
 実は公式のインストーラにはpipも含まれています。なのでOpenCVなどもpipで入れることができます。

 はじめに以下のコマンドでpipのバージョンを確認します。

$ pip --version

 最新化されてない場合があるので、以下のコマンドでpipを最新化します。

$ python -m pip install --upgrade pip

 もう一度pipのバージョン確認のコマンドを実行してバージョンアップされていることを確認します。


3:OpenCVのインストール
 pythonとpipが入ったので、以下のコマンドでOpenCVをインストールします。

拡張機能なしの場合

$ pip install opencv-python

拡張機能ありの場合

$ pip install opencv-contrib-python

 上記のどちらかのコマンドを実行したあと、Power Shellからpythonを起動させてimport cv2をやってエラーが出なければインストールできています。

$ python
>>> import cv2
>>> exit()


 以上がWindows10でpythonOpenCVの環境を構築する方法です。

 思っていた以上に環境構築が楽だったので少し感動しました。


おまけ:その他pipでインストールしたもの
・matplotlib

$ pip install matplotlib


・参考資料

【VSCode】ファイルを比較して差分表示させる方法

 VSCodeを使っていて「ファイルの差分を表示させたい」と思って調べたら簡単にできたのでそのメモです。


・ファイル差分表示方法
 最初に比較したいファイルをVSCodeで開いておきます。

 メニューの「表示」→「コマンドパレット」を選択します。
f:id:rikoubou:20190609144609p:plain

 入力欄に「>compare」と入力して一番最初に出てくる「Compare Active File With...」を選択します。
f:id:rikoubou:20190609144754p:plain

 比較したい対象のファイルを選択します。(ここではsave.csvとnew.csvを比較)
f:id:rikoubou:20190609145034p:plain

 すると結果画面で差分のあるところが色付きで表示されます。
f:id:rikoubou:20190609145327p:plain


 以上がVSCodeでファイルの差分を表示させる方法です。

 デフォルトでこのような機能があるのはとても便利ですね。


・参考資料

【git】よく使うコマンド集

 普段からgitを使っているのですが、そういえばgitについての記事を一切書いていないことに気がついたので今回は備忘録として自分がよく使うコマンドをまとめておこうと思った次第です。

 ほぼコマンドを羅列していくだけになります。

 では始めます。


■コマンド

$ git init
$ git clone [リモートリポジトリのアドレス]
  • 変更のあったファイル一覧を確認
$ git status
  • ブランチ一覧を確認
$ git branch # ローカルブランチの一覧
$ git branch -a # リモートブランチの一覧
  • ローカルブランチの新規作成
$ git branch [ブランチ名]
  • ローカルブランチの切り替え
$ git checkout [ブランチ名]
  • ローカルブランチを切り替えてリモートブランチの内容にする
$ git checkout -b [ローカルブランチ名] [リモートブランチ名]
  • 変更差分を確認
$ git diff [ファイル名] # ファイル単体の差分
$ git diff [ローカルリポジトリ名] # ローカルリポジトリの最新との差分
  • 差分のあったファイルをコミットできるようにする
$ git add [ファイルパス] # ファイルパスを「folder/*」のように指定も可能
$ git add -A # 差分のあるファイル全て
  • git addしたファイルをコミット
$ git commit -m "コミットコメント" # ""の文字列部分でコミットコメントをつけられる
  • コミットログの確認
$ git log
  • ローカルブランチの直前コミットを取り消してコミット前の状態にする
$ git reset --hard HEAD^
  • コミット内容をリモートブランチにプッシュ
$ git push -u origin [リモートブランチ名] # 現在のローカルブランチのコミット内容をリモートブランチに追加
  • ブランチのマージ
$ git merge [対象ローカルブランチ名] # 現在のローカルブランチに対象のローカルブランチをマージ
$ git merge [マージされるローカルブランチ名] [対象ローカルブランチ名] # マージされるローカルブランチに対象ローカルブランチをマージ
  • 現在のローカルブランチをリモートブランチの最新のものに更新
$ git pull
  • ローカルブランチの内容をリモートブランチで強制上書き
$ git fetch origin
$ git reset --hard [リモートブランチ名]
$ git pull # リモートブランチの一番最初の状態なのでgit pullで最新化


 以上が個人的によく使うコマンド一覧です。

 特にローカルブランチの強制上書きなどは時々必要になったりするので、知っておくとよいと思います。


・参考資料

【映画鑑賞】プロメアの感想(ネタバレあり)

www.youtube.com

 キルラキルで有名なTRIGGERの劇場アニメ最新作である「プロメア」を初日に鑑賞してきました。

 ものすごく面白く、映像的にもすごかったので感想や見所などを書いていきます。

 基本的に「ネタバレを気にしない」方向でいくので注意してください。

 また記事中に出てくる画像は全て参考資料の動画からキャプチャしたものです。

 では始めます。


1:全体的な感想
 とにかく熱い!
 アクションシーンがすごい!
 なんかむちゃくちゃだけど理屈抜きに面白い!

 いつものTRIGGER作品の純度をさらに高めてアクションシーンばかり詰め込んでぶちまけました、みたいな作品でした。
 ただひたすらに気持ちがいいアニメーションとビビッドでかっこいい色合いの画面の連続で見ている方が熱量にやられてしまうほどでした。

 TRIGGER作品好きならもちろんのこと、気持ちの良いアニメーションが見たいという人には絶対おすすめの作品です。

 作品自体の個人的な感想をTRIGGER作品に対して語るのは野暮だと思うので「めちゃくちゃいいぞ!」というぐらいで留めておきます。


2:プロメアの演出について
 ※ここからはネタバレありで進めます。

 頭を空っぽにした状態で最高に楽しめる作品であることは間違いないのですが、ちょっと引いた目線で見ると、実はかなりテーマにより沿った細かい演出もなされている作品でもあると感じました。

 それは△、□、そして後半に出てくる◯という3つの単純かつ基本的な図形による演出です。

 映画の一番最初でバーニッシュが生まれた経緯が語られますが、そこで印象的に△のマークが出てきます。
 これはバーニッシュのシンボルが「△」であることを示しています。
 同様にバーニングレスキュー、フリーズフォースなどのいわゆる火消し側、体制側のシンボルは「□」、物語の後半に出てくるそれ以外であるデウス・プロメスは「◯」がシンボルになっています。

 簡単にまとめると以下のようになります。

シンボル図形 勢力
バーニッシュ側(マッドバーニッシュ)
火消し側、体制側(バーニングレスキュー、フリーズフォース)
それ以外(デウス・プロメス)

 バーニッシュ側のシンボルが△なのは冒頭のところでわかりやすいと思います。

 体制側のシンボルが□というのはわかりやすくは語られてはいませんが、クレイの拠点であるプロメポリスの塔は四角形のみで構成されていますし、クレイがガロに箱舟計画を教える時に乗っているエレベータは四角形のキューブのような形をしています。
 このようにデザインを通じて各勢力の表現をきちんと変えています。
 それはエフェクトにも適用されています。

 マッドバーニッシュとバーニングレスキューの戦闘シーンでは、以下のようにバーニングレスキューが扱う武器(氷)の形はちゃんと四角形になっています。
f:id:rikoubou:20190524212204p:plain
 対してマッドバーニッシュ側の炎のエフェクトはいわゆる「ローポリ風」の3DCGが使われており、飛び散る炎が三角形になっています。
f:id:rikoubou:20190524213209p:plain

 そして物語の後半で出てくる新しい勢力であるデウス・プロメス側の「◯」というシンボル。
 湖の底に落ちてからは◯がいくつも出てきますし、アイナが水玉コラみたいになっているようなカットまであるのでわかりやすいと思います。
 デウス・プロメスが開発したバーニッシュ側のリオと体制側のガロ(△と□)が乗り込むデウス・X・マキナも今まで出てきたメカとは全く違い、見た目が丸っこくデザインされています。
 △と□が調和した形としての「◯」としても描かれていると思います。

 このように各勢力のシンボルがそのままエフェクトやデザインとして取り込まれて表現されています。

 今回3DCGのエフェクトについては「あえてローポリ風を意識している」とパンフレットでも語られています。
 3DCGは三角形や四角形を最小単位とした「ポリゴン」の集合体であるので、この「ポリゴンを全面に押し出した画面づくり」をすることにより△のバーニッシュ側と□の体制側をより深く表現することができていると個人的には思っています。

 このローポリである△と□の組み合わせで表現される3DCG=「デウス・X・マキナ(◯)」であり、調和の象徴であるとも読み取れます。
 パンフレットのネタバレ注意の部分でコヤマシゲトさんのコメントにもそのようにデザインしたとコメントがあります。

 このように各シンボルと物語のテーマをデザインやエフェクト面でもしっかりと演出されている、とても丁寧な作品であるとも言えると思います。


 以上、演出面を中心に色々書いてきましたが、まだ1回しか観てないので色々見落としているところなどもあるかと思います。

 個人的にかなり面白く、映像面も本当にすごかったのでもう一回どこかで見直したいです。


・参考資料

【MacOS/Raspberry Pi】SCPコマンドを使ったファイルのアップロードとダウンロード

rikoubou.hatenablog.com
 以前の記事でSSHを使ってリモートログインする方法を説明しました。

 SSHでログインしていると「ファイルのやりとりもしたい」となってくるので、今回はSCPコマンドを使ったファイルのアップロードとダウンロードの方法についてです。

 では始めます。


1:SCPコマンドでのファイルのアップロード
 ファイルのアップロードはMacOS側でターミナルを立ち上げ、以下のコマンドを実行すればできます。

$ scp [対象ファイルパス] [ユーザ名]@[IPアドレス]:[アップロード先ディレクトリパス]

 例えばMacOS側で「/Users/hoge.txt」ファイルをRaspberry Piのpiユーザ(IPアドレスが192.168.0.0)の「/home/pi/」配下にアップロードする場合は以下のコマンドになります。

$ scp /Users/hoge.txt pi@192.168.0.0:/home/pi/

 このコマンドを実行するとログインしようとしたユーザのパスワードを尋ねられるので、piユーザならデフォルトの「raspberry」と入力すればOKです。


2:SCPコマンドでのファイルのダウンロード
 ファイルのダウンロードはMacOS側でターミナルを立ち上げ、以下のコマンドを実行すればできます。

$ scp [ユーザ名]@[IPアドレス]:[対象ファイルパス] [ダウンロード先ディレクトリパス]

 例えばRaspberry Piのpiユーザ(IPアドレスが192.168.0.0)の「/home/pi/hoge.txt」ファイルをMacOS側の「/Users/」配下にダウンロードする場合は以下のコマンドになります。

$ scp pi@192.168.0.0:/home/pi/hoge.txt /Users/

 このコマンドも実行するとログインしようとしたユーザのパスワードを尋ねられるので、piユーザならデフォルトの「raspberry」と入力すればOKです。


 以上がSCPコマンドを使ったファイルのアップロードとダウンロードの方法です。

 こういうのも覚えてるとファイルのやりとりや更新が楽にできるのでどんどん使っていきたいです。


・2019/05/24追記:SCPコマンドでのディレクトリのアップロード/ダウンロード
 ファイルではなくディレクトリを丸ごと指定してアップロードやダウンロードをしたい場合は、以下のように「-r」オプションをつけます。

ディレクトリのアップロード

$ scp -r [対象ディレクトリパス] [ユーザ名]@[IPアドレス]:[アップロード先ディレクトリパス]
$ scp -r /Users/hoge/ pi@192.168.0.0:/home/pi/

ディレクトリのダウンロード

$ scp -r [ユーザ名]@[IPアドレス]:[対象ディレクトリパス] [ダウンロード先ディレクトリパス]
$ scp -r pi@192.168.0.0:/home/pi/ /Users/


・参考資料

【MacOS/Raspberry Pi】sshを使ってリモートログイン

 いちいちRaspberry Piにマウスやモニターやキーボードをくっつけて動かすのも面倒な場合、リモートログインして色々やりたくなる場合があります。
 調べれば出てきますが自分用に簡単にまとめたいと思ったので、今回はタイトルにある通り「sshを使ってリモートログイン」する方法です。

 では始めます。


1:Raspberry Pi側のSSHを有効にする
 Raspberry Piを立ち上げて「Raspberry Piの設定」を選択します。
f:id:rikoubou:20190520170724p:plain

インターフェイス」タブを選択して「SSH」の項目を「有効」に切り替えて「OK」ボタンをクリックします。
f:id:rikoubou:20190520170834p:plain

 SSHの設定が完了したら、設定を有効にするためにRaspberry Piを再起動させます。
f:id:rikoubou:20190520171111p:plain
f:id:rikoubou:20190520171136p:plain

 これでRaspberry Pi側でのSSHの設定は完了です。


2:Raspberry Pi側のIPアドレスを確認する
 IPアドレスを確認するには以下のどちらかのコマンドで確認できます。

$ ifconfig
$ ip a

 これで「192.168.0.0」のようなIPアドレスが確認できるので、それをメモしておきます(画像の赤枠部分)。
f:id:rikoubou:20190520171742p:plain


3:sshコマンドでリモートログインする
 IPアドレスがわかったら、MacOS側でターミナルを立ち上げて以下のコマンドでリモートログインします。

$ ssh [ユーザ名]@[IPアドレス]

 例えば2で確認したIPアドレスが「192.168.0.0」であり、Raspberry Piのデフォルトユーザである「pi」でログインする場合は以下のようになります。

$ ssh pi@192.168.0.0

 するとユーザのパスワードを求められるのでログインユーザのパスワードを入力すればログインできます。
 デフォルトユーザpiであれば、初期パスワードである「raspberry」を入力すればログインできます。


・おまけ:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!が出た場合
 3の手順でログインした際、以下のようなエラーメッセージが表示される場合があります。
f:id:rikoubou:20190520165956p:plain
 過去に同じIPアドレスで別の端末にログインしていた場合などにこのエラーが発生することがあります。

 その場合は以下のコマンドで過去の情報を削除します。

$ ssh-keygen -R [IPアドレス]

 対象のIPアドレスが「192.168.0.0」の場合は以下のようになります。

$ ssh-keygen -R 192.168.0.0

 このコマンドを実行した後、もう一度3のコマンドを実行するとエラーなくログインできます。


 以上がsshを使ってリモートログインする方法です。

 使ってない時期があると割と忘れてしまうので、こういうのもメモしていきたいですね…。


・参考資料