PythonにてOpenCVを用いて画像処理をしています。
処理結果を用いて、別装置(マイコン)にシリアル通信でデータのやり取りを行い
その別装置を動かそうとしていいるのですが、どうも通信に遅れが生じてしまいます(マイコンからは「py,0000,0000,0000」のような信号を送っています。
送れなく、リアルタイムで通信ができるやり方があれば教えてください。
Pythonのコードは下記のものになります
python
1import sys 2import serial 3from cv2 import cv2 4 5comport = serial.Serial("COM1", baudrate=115200, parity=serial.PARITY_NONE, timeout=None) 6 7def data_send(buf): 8 while True: 9 if comport.out_waiting == 0: 10 break 11 12 data = buf +'\r\n' 13 send_data = data.encode('UTF-8') 14 comport.write(send_data) 15 return 16 17def data_recieve(): 18 19 if(comport.in_waiting > 0): 20 recieve_data = comport.readline() 21 22 try: 23 recieve_data_disp = recieve_data.strip().decode('UTF-8') 24 return str(recieve_data_disp) 25 except: 26 return 27 28def main(): 29 30 cap = cv2.VideoCapture(0) 31 32 while True: 33 ret, frame = cap.read() 34 recieve_data = data_recieve() 35 36 print(recieve_data) 37 data_send(recieve_data) 38 39 40 cv2.imshow('img',frame) 41 42 if cv2.waitKey(1) & 0xFF == ord('q'): 43 break 44 45 comport.close() 46 47if __name__ == '__main__': 48 main() 49
どこで遅延が発生しているか測定してみましたか?ものによっては根本的に解決が不可能な場合もあります。
通信のみ部分のプログラム(OpenCVでの画像処理なし)では送受信ともに遅延はありませんでした。
また、送信側に関しても遅延なく、受信側でのみ遅延が発生していました。
もちろんマイコン側の送信を見ても遅延なく遅れているため、python側の受信のみで遅れが発生していました
> また、送信側に関しても遅延なく、受信側でのみ遅延が発生していました。
送受信のみ部分ということでしょうか。それとも画像処理を載せてからでしょうか。ちょっと曖昧でよくわからなかったです。(あと今更だけどコードは前後を ``` で囲ってインデントも入れてね)
```Python
def example(x):
return x
```
```で囲むの知りませんでした
ありがとうございます。
画像処理を載せる前は遅延はなかったのですが、
載せてから受信で数秒の遅れが発生しました。
ただし、遅れが蓄積されているような様子がなかったことも気になります
回答1件
あなたの回答
tips
プレビュー