はじめに
最近Windowsのデスクトップパソコンにusb接続したカメラを接続して、PythonのOpenCVで遊ぼうと思っていました。
しかしなぜかカメラを認識せず、動かないという問題がありました。
試行錯誤の結果、Windowsのプライバシーのカメラの設定がすべてオンにすることで解決しました。
プログラム
今回使用していたプログラムは、以下のサイトのプログラムです。
# OpenCV のインポート
import cv2
# VideoCaptureのインスタンスを作成する。
# 引数でカメラを選べれる。
cap = cv2.VideoCapture(0)
while True:
# VideoCaptureから1フレーム読み込む
ret, frame = cap.read()
# スクリーンショットを撮りたい関係で1/4サイズに縮小
frame = cv2.resize(frame, (int(frame.shape[1]/4), int(frame.shape[0]/4)))
# 加工なし画像を表示する
cv2.imshow('Raw Frame', frame)
# 何か処理(ここでは文字列「hogehoge」を表示する)
edframe = frame
cv2.putText(edframe, 'hogehoge', (0,50), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255,0), 3, cv2.LINE_AA)
# 加工済の画像を表示する
cv2.imshow('Edited Frame', edframe)
# キー入力を1ms待って、k が27(ESC)だったらBreakする
k = cv2.waitKey(1)
if k == 27:
break
# キャプチャをリリースして、ウィンドウをすべて閉じる
cap.release()
cv2.destroyAllWindows()
これを実行すると、AttributeError: 'NoneType' object has no attribute 'shape'
というエラーが出るうえ、res
という変数がFalse
となっていました。つまり画像を取得できていませんでした。
試したこと
1.PCがカメラを認識しているかの確認
winodwsの検索からデバイスマネージャーを開き、カメラの下にWebcameraがあるかを確認します。
2. カメラアプリでの確認
カメラアプリでちゃんと写っているか確認します。
3.プライバシー設定
設定からプライバシーの設定をします。
まず、このデバイスのカメラへのアクセスを許可する
をオン
にします。
次に、アプリがカメラにアクセスすできるようにする
もオン
にします。
この時、Microsoft Storeアプリは個別にオンにする必要はありません。
最後に、まず、デスクトップアプリがカメラにアクセスできるようにする
をオン
にします。
この状態でPythonでカメラを使用していると、画像のようにPython
が現れます。
まとめ
今回、カメラが使用できなかったのは、プライバシー設定でカメラのアクセスがオフになっていたからでした。
プライバシーに気を使っていると同じような問題が起きるかもしれません。