人工知性を作りたい

私が日々、挑戦したことや学んだことなどを紹介していく雑記ブログです。 (新しいAI技術HTM, 専門の音声信号処理, 趣味のアニメ等も書いてます。)

UbuntuのPython仮想環境venvでcv2.imshowが表示されない件(エラーログも表示されない)#OpenCV

 

f:id:hiro-htm877:20210522192950p:plain

 

本記事では私がvenv環境でopencvをインストールして使用したときになんのエラーも出ずに固まっていた問題の解決方法を記載します。

 

本記事のテーマ

「Ubuntuのvenv環境でcv2.imshowを動かせるようにする」

 

[結論]

・ローカルでopencvをBuildし、venv環境から使う時はsys.path.appendで使用したいopencvのライブラリを追加する。

 

問題が起きたときの環境

・python3.8

・python3 -m venv venv_testで環境を作成

・source venv_test/bin/activate後、pip install opencv-pythonでインストール

・下記コードを実行したが画像が表示されず、処理が終了されない

img = cv2.imread('cat.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 解決方法

1. opencvのソースコードを取得してビルドする

手順は下記リンクのQuick start - Build core modulesを参照。

 

docs.opencv.org

私が実際に実行したコマンド

sudo apt update && sudo apt install -y cmake g++ wget unzip
cd /usr/local/src/
sudo wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
sudo unzip opencv.zip
sudo mkdir -p build && cd build
sudo cmake ../opencv-master
sudo cmake --build . -j10

 

 2. ローカルPythonにインストールされたopencvのPathを確認する

端末を開き、python3を入力 、下記で確認できる

>>> import cv2
>>> print(cv2)
<module 'cv2' from '/usr/lib/python3/dist-packages/cv2.cpython-38-x86_64-linux-gnu.so'>
>>> 

 

3. Pythonスクリプトにローカルのopencvライブラリのパスを追加する

sys.path.append()で追加できる。

実際に画像を表示できるようになったスクリプトが以下です。

import sys
sys.path.append('/usr/lib/python3/dist-packages/')
import cv2
 
img = cv2.imread('cat.jpg')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

 以上で問題解決となります。

なにか質問などあれば是非コメントください!

 

私事ですが、今回はエラーログが出ないこともあり、調査が難しかったです。

また仮想環境を使わなければ出会わなかった問題かもしれませんが、ローカルのPython環境を汚すことなく目的が達成できたので良かったです!

同じような問題を抱えた人の助けになれば良いなと思います。 

 

 

 ※引用

・猫の画像

Free-PhotosによるPixabayからの画像