【python】raspiでwebカメラとpicameraの両対応コードを実装
モチベーション
カメラをフラグ(PICAM = True )で切り替えられるようにしたい。
[カメラ初期化] cv2.VideoCaptureの置き換え
これはpicameraだと動かないはず。
カメラのイニシャライズをcap取得のwebカメラ、piカメラ両対応する関数を作成。
def initCamera(): cap = None res = False while res is False: if PICAM: cap = picamera.PiCamera() # cap.start_preview() cap.resolution = (640, 480) cap.framerate = 33 cv2.waitKey(1000) res = True else: cap = cv2.VideoCapture(DEVICE_ID) res, _ = cap.read() #pass cv2.waitKey(1000) print('retry ..') return cap
そしてcv2.VideoCaptureを置き換え。
cap = cv2.VideoCapture(device_id) ↓ cap = initCamera()
[画像取得] cap.readの置き換え
こちらもpicameraだと動かない気がする。
picameraはstreamから取ってくるので、次のようなwebカメラpiカメラ両対応の関数を作成する。
def getImage(cap): c_frame = None if PICAM: with picamera.array.PiRGBArray(cap, size=(640, 480)) as stream: c_frame = cap.capture(stream, 'bgr') c_frame = stream.array if c_frame is None: exit else: end_flag, c_frame = cap.read() if end_flag is False or c_frame is None: exit return c_frame
そして置き換え。
img = cap.read() ↓ img = getImage(cap)
以上。