###前提・実現したいこと
RaspberryPi2 モデルBにてpiCameraで撮影している画像をリアルタイムでWeb表示したい。
web側に画像を送る前に顔認識をして顔周辺を囲い、画像処理後の画像を送信したい。
同じネットワーク間でのみ使用しますのでセキュリティはあまり気にしていません。
現在、画像処理を加えない画像の送信およびWeb表示は成功しています。
速度は10fpsで行っています。
piCameraで撮影している画像を
stream = io.BytesIO()に入れて
WebSocket(tornado)を使用しHTMLに送っています。
ここで画像処理を加えようとすると問題が発生しました。
通常piCameraで画像処理を加える場合は
picamera.array.PiRGBArrayのようにNumPy配列を使い
python
1stream = picamera.array.PiRGBArray(camera) 2camera.capture(stream,'bgr',use_video_port=True) 3gray = cv2.cvtColor(stream.array, cv2.COLOR_BGR2GRAY)
のように処理すると思います。
ただ、WebSocket(tornado)で送ろうとする場合
python
1write_message(message, binary=False)
を使用しますが、これはバイナリか文字列しか送ることが出来ません。
画像処理を加わえる場合はNumPy配列となってしまい送信することが出来ません。
どうゆう処理を加えたら顔認識をした画像をWebSocket(tornado)で送信することができますか?
###発生している問題・エラーメッセージ
画像処理をするときと送信するときのデータの型の衝突
画像処理をするときの画像はNumPy配列
送信するメソッドが扱えるのはバイナリまたは文字データ(UTF-8)
TypeError : Expected bytes, unicode,or None; got <class 'picamera.array.PiRGBArray'>
###該当のソースコード
問題発生部のみ抽出
python
1camera = picamera.PiCamera() 2camera.resoltion = (WIDTH, HIGHT) 3camera.framerate = FPS 4time.sleep(2) 5stream = io.BytesIO() 6 7for foo incamera.capture_continuous(stream,'jpeg',use_video_port = True): 8 write_message(stream.read(),binary = True) 9 stream.seek(0) 10 stream.truncate()
受け取り側のHTMLファイル
画像撮影側
javaScript
1ws = new WebSocket("ws://000.000.0.000:0000"); 2ws.binaryType = 'Blob' 3ws.onmessage=function(e){ 4 var data = e.data; 5 var blob_url = window.URL.createObjectURL(); 6 img.src = blob_url; 7}
###補足情報(言語/FW/ツール等のバージョンなど) raspbian,python2.7 ,tornado,HTML5, openCV2.7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/01/25 12:02
2017/01/25 23:31
退会済みユーザー
2017/01/26 12:28
2017/01/26 12:35
退会済みユーザー
2017/01/26 13:38