VS Codeでvenvがうまく動作しなくなった話

結論 venvをあきらめて、Pipenvを導入すればなぜか解決した。 経緯 Pythonの開発環境にVS Codeを使っていましたが、ある日突然、venvで作った環境が見えなくなりました。 PowerShellからは切り替えができるので、venv自体は正しく動いているようでした。 PythonとVS Codeをクリーンインストールしても状況は変わりませんでした[1]。 Pipenvの使い方 最近はPipenvというものがあるらしいので、それを導入することとしました[2][3]。 pip install pipenv 以下のように環境変数を設定することで、プロジェクトのフォルダ直下に仮想環境を構築してくれます。 PIPENV_VENV_IN_PROJECT=true VS Code上にフォルダを作成し、その直下で仮想環境を作成します。 コマンドはVS Code上のPowerShellで行いました。 例えば以下のようになります。パスやPythonのバージョンはご自身の環境に合わせてください。 *pythonの後に半角スペースがあるのでうっかり詰めないでください。 *venvファイルが作成されるという情報もありますが、私の場合はPipfileのみ作られました。 PS PS C:\Users\User Name\Documents\CODE\Python\Test> pipenv install --python 3.8 VS Code上でF1キーを押して、「reload」を検索して実行します。 これで左下のPythonのバージョンセレクトから環境選択できるはずです。 仮想環境から抜けるときは以下のコマンドを使います。 deactivate 参考文献 [1] sota0726 「VScodeを完全にアンインストールする方法(windows10)「拡張機能のホストが予期せずに終了しました。」を改善するために」閲覧日:2020/09/13 https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html [2] KRiver1 「pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。」閲覧日:2020/09/13 h

Python版OpenCVでWebカメラの画像を取得する

OpenCVを使うときは主にC++を使っているのですが,Pythonでも使えると何かと便利なので使い方を調べてみました.

今回は,Webカメラから画像を取得する方法をメモしておきます.
ちなみにPython 2.6を使っている関係で,OpenCV 2.4.6を使っています.

それでは早速スクリプトを見ていきます.
import cv2

if __name__=="__main__":

    capture = cv2.VideoCapture(0)
    
    if capture.isOpened() is False:
        raise("IO Error")

    cv2.namedWindow("Capture", cv2.WINDOW_AUTOSIZE)

    while True:

        ret, image = capture.read()

        if ret == False:
            continue

        cv2.imshow("Capture", image)
       
        if cv2.waitKey(33) >= 0:
            cv2.imwrite("image.png", image)
            break

    cv2.destroyAllWindows()

まずは,0番のカメラを引数にしてVideoCaptureクラスをインスタンス化します.
capture = cv2.VideoCapture(0)
次に,isOpenedメソッドを使ってWebカメラに接続できているか確認します.
もしできていなければIOエラーをだします.
if capture.isOpened() is False:
        raise("IO Error")
Webカメラで取得した画像を表示するCaptureという名前のウィンドウを設定します.
cv2.WINDOW_AUTOSIZEを指定すると,表示する画像に応じてウィンドウの大きさが自動的に決まります.
cv2.namedWindow("Capture", cv2.WINDOW_AUTOSIZE)
この先の処理は後ほど説明するキー入力があるまで,処理をwhileループで繰り返します.
まずは,画像をWebカメラから取得します.
取得できればimageにnumpyのndarray形式で画像が,retにbool形式でTrueが格納されます.
ret, image = capture.read()
もし,retにFalseが入っていればこの後の処理を飛ばします.
if ret == False:
            continue
取得した画像を先ほど生成したウィンドウCaptureに表示します.
cv2.imshow("Capture", image)
最後に,cv2.waitKeyを呼び出します.引数はウェイト時間 msです.0を指定すると無限にキー入力を待ちます.
ちなみにcv2.watiKeyはイベント処理を扱うので定期的に呼び出す必要があることに注意してください.
これを書かないとキー入力を受け取れないだけでなく,画像もウィンドウに表示されません.
ここでは,何かキー入力があった場合,image.pngというPNGファイルに画像を保存します.
if cv2.waitKey(33) >= 0:
            cv2.imwrite("image.png", image)
            break
キーが押された場合に,全てのウィンドウを破壊して終わります.
cv2.destroyAllWindows()
以上でWebカメラの画像取得方法の説明を終わります.  

Python版OpenCV関連の記事:
Python版OpenCVでWebカメラの画像を取得する
Python版OpenCVで色抽出を行う

参考文献:
「User Interface」『OpenCV 2.4.9.0 documentation』<http://docs.opencv.org/modules/highgui/doc/user_interface.html> (2015/02/14アクセス)
「Reading and Writing Images and Video」『OpenCV 2.4.9.0 documentation』<http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html> (2015/02/14アクセス) 

コメント

  1. OpenCVを使うときは主にC++を使っているのですが,Pythonでも使えると何かと便利なので使い方を調べてみました. 今回は,Webカメラから画像を取得する方法をメモしておきます. ちなみにPython 2.6を使っている関係で,OpenCV 2.4.6 ... 1カメラ.blogspot.com

    返信削除

コメントを投稿

このブログの人気の投稿

C++11のためにGCCの最新版をインストールする

分解:Logicool M570

MOCO'Sキッチンのフォントに似せるβ版