LoginSignup
5
6

More than 5 years have passed since last update.

Python + OpenCVを使いたかった (失敗録)

Last updated at Posted at 2017-10-27

やりたかったこと

  • 大量の顔写真データから顔の部分の位置を検出して切り取りたい
  • 何やらOpenCVなるものを使うと簡単に顔検出できるらしい
  • Pythonって触ったことないけどなんとかなるでしょ

顔検出以前に環境構築でハマった失敗録です。

(失敗) Windows 10 + Visual Studio 2017 + Python 3.6 + pip install

Visual Studio 2017はPythonを入れることができるのなら、それが早いかな。
Visual StudioインストーラでPythonを選択してインストール、IDEを起動してソリューションエクスプローラーを右クリックしPython環境メニューからopencv-pythonと入力すれば・・・

image.png

出力
----- '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を起動してディレクトリを指定すれば・・・・ってエラーが出て進まないんだけど。

image (1).png

CMakeError.log
  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をインストールできた。

  1. 管理者としてPowerShellを起動
  2. PythonのインストールパスにあるScriptsディレクトリに移動(VS2017のデフォルトではC:\Program Files\Python36\Scripts)
  3. PowerShellからpip install--trusted-hostオプション付きで実行
PowerShell
cd C:\Program Files\Python36\Scripts
.\pip.exe install opencv-python --trusted-host pypi.python.org

Python 3.6とOpenCV 3.3がインストールできた。
image (2).png

numpyパッケージも含めてインストールされたことをVisual StudioのIDEでも確認。
image (3).png

顔検出に使う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'
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6