<概要>
DJI社のドローン「Tello」のSDKを用いた動画のストリーム表示がうまくできなくて困っています。
<詳細>
「tello」のSDKに従い、PCにUDPサーバーを立てて「tello」から動画を受信し、opencvでウィンドウ表示させることができない状況です。
(※UDPクライアントを使った「Tello」の離陸と着陸はできています。初心者のため、IPアドレスやポートの設定が間違っていると思うのですが、どのように直して良いのか全くわかりません…お助けいただけると非常に助かりますorz)
<参考にしているページ>
[DJI社の公式SDKガイドPDF]
https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf
[類似の開発ブログ]
http://kodamap.hatenablog.com/entry/2018/12/08/000000
https://qiita.com/mozzio369/items/8e0fb12dc30c493f5cc4
[ソケット通信の勉強]
https://qiita.com/__init__/items/5c89fa5b37b8c5ed32a4
<OSなど>
OS:Windows10
Opencvバージョン:4.0.0
Pythonバージョン:3.7
<エラー内容>
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:901)
warning: udp://192.168.10.2:11111 (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:902)
Traceback (most recent call last):
File "tello_demo.py", line 36, in <module>
cv2.imshow('frame', frame)
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:350: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
<コード内容>
python
1# tello操作用 2import socket 3import time 4 5# 画像処理用 6import cv2 7 8# telloへのアクセス用 9tello_ip = '192.168.10.1' 10tello_port = 8889 11tello_address = (tello_ip, tello_port) 12 13# telloからのデータ受領用 14host = '192.168.10.2' 15port = 11111 16mypc_address = (host, port) 17 18# 通信用のソケットを作成 19# ※アドレスファミリ:AF_INET(IPv4)、ソケットタイプ:SOCK_DGRAM(UDP) 20socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 21 22# リッスン状態にする 23socket.bind(mypc_address) 24 25# コマンドモードを使うため'command'というテキストを投げる 26socket.sendto('command'.encode('utf-8'), tello_address) 27 28# ビデオストリーミングを開始させるため、'streamon'というテキストを投げる 29socket.sendto('streamon'.encode('utf-8'), tello_address) 30print("ストリーミング開始") 31 32# ビデオストリーミングを取得して、ウィンドウに表示 33capture = cv2.VideoCapture('udp://192.168.10.2:11111') 34while True: 35 ret, frame = capture.read() 36 cv2.imshow('frame', frame) 37 if cv2.waitKey(1) & 0xFF == ord('q'): 38 break 39capture.release() 40cv2.destroyAllWindows() 41 42# ビデオストリーミングを停止させるため、'streamoff'というテキストを投げる 43socket.sendto('streamoff'.encode('utf-8'), tello_address) 44
どうぞ、よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/02 05:19