やりたかったこと
- 大量の顔写真データから顔の部分の位置を検出して切り取りたい
- 何やらOpenCVなるものを使うと簡単に顔検出できるらしい
- Pythonって触ったことないけどなんとかなるでしょ
顔検出以前に環境構築でハマった失敗録です。
(失敗) Windows 10 + Visual Studio 2017 + Python 3.6 + pip install
Visual Studio 2017はPythonを入れることができるのなら、それが早いかな。
Visual StudioインストーラでPythonを選択してインストール、IDEを起動してソリューションエクスプローラーを右クリックしPython環境メニューからopencv-python
と入力すれば・・・
----- 'opencv-python==3.3.0.10' をインストールしています -----
Collecting opencv-python==3.3.0.10
Could not fetch URL https://pypi.python.org/simple/opencv-python/: There was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) - skipping
Could not find a version that satisfies the requirement opencv-python==3.3.0.10 (from versions: )
No matching distribution found for opencv-python==3.3.0.10
----- 'opencv-python==3.3.0.10' をインストールできませんでした -----
あれ、SSLエラーでインストールできないってメッセージが・・・。
--trusted-host
オプションで解決できるよ、という情報は見つけたけど、Visual StudioのIDEから実行する方法がわからん。別のやり方にしよう。
(失敗) Windows 10 + Visual Studio 2017 + CMake + OpenCV 3.3
ふむ、Visual Studioでビルドする手順もあるのか。そっちやってみよう。
参考: VisualStudio2013のPython3.4でOpenCVを使う
- まずVisual Studio 2017にC++を追加でインストール
- CMakeのWindows版をダウンロードしてきてインストール
あとはGUI版のCMakeを起動してディレクトリを指定すれば・・・・ってエラーが出て進まないんだけど。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.11.25503\bin\HostX86\x64\link.exe /ERRORREPORT:QUEUE /OUT:".\CompilerIdC.exe" /INCREMENTAL:NO /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /PDB:".\CompilerIdC.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:".\CompilerIdC.lib" /MACHINE:X64 Debug\CMakeCCompilerId.obj
LINK : fatal error LNK1181: 入力ファイル 'gdi32.lib' を開けません。 [C:\opencv\build\CMakeFiles\3.10.0-rc3\CompilerIdC\CompilerIdC.vcxproj]
プロジェクト "C:\opencv\build\CMakeFiles\3.10.0-rc3\CompilerIdC\CompilerIdC.vcxproj" (既定のターゲット) のビルドが終了しました -- 失敗。
ビルドに失敗しました。
gdi32.lib
が見つからないから失敗?64ビット環境だとダメなのかな?
Visual Studio 2017のインストール選択画面にはそれっぽいの見つからなかったけど・・・。
Windowsはよく分からないな。
(失敗) Ubuntu 16.04(LXC) + Python 3.6 + OpenCV 3.3
WindowsよくわからないならLinuxでやろう。
今ある環境を汚したくないから、LXCコンテナ上でやればいいか。
lxc launch images:ubuntu/xenial/amd64 test
lxc run test bash
あとは参考サイトに従ってにビルドに必要なパッケージをインストールして、最新版のOpenCVをgit clone
してビルドすればいいんだな。
よし、ビルドも通った。
あれ〜〜、cv2.soができてないんだけど。
どこで間違えたんだろう?
(失敗) Ubuntu 16.04(docker) + Python 3.6 + OpenCV 3.3
LXCがダメだったのか?なら1コンテナ1アプリケーションの原則には反するけど、dockerでやってみるか。
docker run -it ubuntu test
以下、LXCと同様にビルドしてみたが、やっぱりcv2.soがないよ〜。
(とりあえず成功) Ubuntu + apt-get
PythonもOpenCVもバージョン古いけど、apt-getだけでできることに今さらながら気づく。
sudo apt-get install python-opencv
python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'2.4.9.1'
>>>
できた。
最新バージョンにこだわらず、Python 2.7 + OpenCV 2.4なら何の苦労もせずにすんだのか・・・。
(成功) Windows 10 + Visual Studio 2017 + Python 3.6 + OpenCV 3.3
結局、Windows 10で最新のPythonとOpenCVをインストールできた。
- 管理者としてPowerShellを起動
- PythonのインストールパスにあるScriptsディレクトリに移動(VS2017のデフォルトでは
C:\Program Files\Python36\Scripts
) - PowerShellから
pip install
を--trusted-host
オプション付きで実行
cd C:\Program Files\Python36\Scripts
.\pip.exe install opencv-python --trusted-host pypi.python.org
Python 3.6とOpenCV 3.3がインストールできた。
numpyパッケージも含めてインストールされたことをVisual StudioのIDEでも確認。
顔検出に使うHaar検出器のデータはインストールされないので、別途ダウンロードが必要。
感想
いや〜ハマった。
環境構築した後は、先人たちのサンプルプログラムのおかげで顔検出は簡単だった。
Pythonって初めて触るけど、インタプリタがあるからMathematicaライクに使えて良いかも。
後日追加
(成功) Ubuntu 16.04(docker) + Python 3.6 + OpenCV 3.3
Pythonの公式イメージを起動して、pipでインストールするだけでした。
なんでdocker上でビルドしようと頑張っていたのか、コレガワカラナイ。
docker run -it python:3.6.3 /bin/bash
コンテナ上でpip install opencv-python
。
root@bc1ffc65c5a6:/# pip install opencv-python
Collecting opencv-python
Downloading opencv_python-3.3.0.10-cp36-cp36m-manylinux1_x86_64.whl (15.4MB)
100% |████████████████████████████████| 15.5MB 134kB/s
Collecting numpy>=1.11.3 (from opencv-python)
Downloading numpy-1.13.3-cp36-cp36m-manylinux1_x86_64.whl (17.0MB)
100% |████████████████████████████████| 17.0MB 124kB/s
Installing collected packages: numpy, opencv-python
Successfully installed numpy-1.13.3 opencv-python-3.3.0.10
root@bc1ffc65c5a6:/# python3
Python 3.6.3 (default, Oct 10 2017, 02:29:16)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.3.0'