機体:ラズベリーパイ
OS:Raspberry Pi OS ver10.8
言語:python3
したいこと:
ラズベリーパイ(とAruduino)を使って遠隔操作カメラを用意する。
プログラムの内容:
・ライブカメラ映像を表示する
・キーボード入力によりAruduinoとi2c通信をする。Aruduinoでカメラに付けたモーターを回転させて視界を移すことができる
問題:
”カメラ映像を表示するプログラム” と "キーボード入力を受け付けてAruduinoとi2c通信を行うプログラム" の二つのプログラムファイルを用意してそれぞれ実行して動作を確認した。さらに二つのファイルを個別に同時に動作させることで一応の監視カメラを用意することができた。ここまではよかった。この後二つのプログラムをまとめた一つのプログラムファイルを作ってみたところAruduinoとの通信はできるがカメラ映像が表示されないものができてしまった。何がいけないのか意見を聞きたい。
下に元の二つのプログラムとそれらを合わせたプログラムを載せる。
エラーメッセージ:
エラーメッセージは出ていない。
お願いいたします。m(_ _)m
ライブカメラのプログラム
python3
1import cv2 2 3capture = cv2.VideoCapture(0) 4if capture.isOpened() is False: 5 raise IOError 6 7while(True): 8 try: 9 ret, frame = capture.read() 10 if ret is False: 11 raise IOError 12 cv2.imshow('frame',frame) 13 cv2.waitKey(1) 14 except KeyboardInterrupt: 15 # 終わるときは CTRL + C を押す 16 break 17 18capture.release() 19cv2.destroyAllWindows() 20
キーボード入力を取得してAruduinoとi2c通信をするプログラム
python3
1# -*- coding: utf-8 -*- 2import smbus 3from time import sleep 4import readchar 5 6bus = smbus.SMBus(1) 7 8SLAVE_ADDRESS = 0x04 9print("a:left, d:right, o;up, k:down ") 10 11def writeCommand(cmd): 12 bus.write_byte(SLAVE_ADDRESS, cmd) 13 print("send: ",cmd) 14 15while True: 16 command = readchar.readkey() 17 if str(command) == "a": 18 command = 1 19 elif str(command) == "d": 20 command = 2 21 elif str(command) == "o": 22 command = 3 23 elif str(command) == "k": 24 command = 4 25 elif command == ('q'): 26 break 27 else: 28 command = 5 29 if command >= 0 and command <= 180: 30 writeCommand(command) 31 else: 32 print("Error") 33 34
上の二つを合わせた問題のプログラム (カメラ映像が表示されない)
python3
1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3import cv2 4import smbus 5from time import sleep 6import readchar 7 8bus = smbus.SMBus(1) 9SLAVE_ADDRESS = 0x04 10print("a:left, d:right, o;up, k:down ") 11 12 13cap = cv2.VideoCapture(0) 14if cap.isOpened() is False: 15 raise IOError 16# デフォルト画面サイズ横幅 17W = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 18# デフォルト画面サイズ縦、高さ 19H = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) 20# デフォルトfps 21fps = cap.get(cv2.CAP_PROP_FPS) 22#デフォルトの画面サイズとfpsを確認 23print('W,H,fps: ', W , H , fps) 24#メモ W,H,fps: 640.0 480.0 30.0 25 26 27def writeCommand(cmd): 28 bus.write_byte(SLAVE_ADDRESS, cmd) 29 print("send: ",cmd) 30 31while(True): 32 33 #画面取得 34 ret, frame = cap.read() 35 36 #反転frame=cv2.flip(frame, 0) 37 if ret == True: 38 #画面への描写 39 cv2.imshow('frame',frame) 40 #2.waitKey(5) 41 42 command = readchar.readkey() 43 if str(command) == "a": 44 command = 1 45 elif str(command) == "d": 46 command = 2 47 elif str(command) == "o": 48 command = 3 49 elif str(command) == "k": 50 command = 4 51 elif command == ('q'): 52 break 53 else: 54 command = 5 55 if command >= 0 and command <= 180: 56 writeCommand(command) 57 else: 58 print("Error") 59 60 61 62cap.release() 63cv2.destroyAllWindows() 64 65
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/01 03:15