質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

2回答

796閲覧

動画を再生しながら別の関数を同時に実行したい

reiya_123

総合スコア57

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2021/11/10 09:58

編集2021/11/10 11:50

前提・実現したいこと

1つ目はリアルタイムで撮影した動画を基にopencvで自作で地図を作成しその自作地図を使いポテンシャル法により経路を点で描写しているコードです。
2つ目はmp4ファイル(リアルタイムで撮影した動画)を再生しています。

ここで質問ですが、地図と動画を対応させていきたいのですが、1つ目と2つ目のコードを同時に実行することは可能でしょうか?申し訳ございませんが宜しくおねがいします。

該当のソースコード

python3.8

1class Potential: 2 def __init__(self): 3 4 #初期スピード設定 5 self.speed = 100 6 7 8 def potential(self): 9 # Defining world dimensions 10 world_size = (600, 700) 11 image_path ="map.jpg" 12 image = cv2.imread(image_path) 13     #startの位置設定 14 agent = Agent(Position(490,45), scan_radius=10, possible_moves=30) 15 #goalの位置設定 16 goal = Goal(Position(340,180), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 17 # Defining obstacles in a list 18 #sigma_obstacles = 1 19 #obstacles = [Obstacle(Position(510, 200), sigma=sigma_obstacles, draw_radius=4*sigma_obstacles)] 20 # Drawing objects 21     #startの位置描写 22 agent.draw(image) 23     #startの位置描写 24 goal.draw(image) 25 #for obstacle in obstacles: 26 #obstacle.draw(image) 27 # Displaying initial frame and wait for intial key press 28 #opencvで自作したマップを表示 29     cv2.imshow('Output', image) 30 cv2.waitKey(1000) 31 print("進みます") 32     #ポテンシャル法により経路を連続描写により書いている 33     # <10になるまで点をループで描写 34     while Position.calculate_distance(agent.position, goal.position) > 10: 35 possible_moves = agent.get_possible_moves() 36 min_value = math.inf 37 best_move = possible_moves[0] # initializing best move with first move 38 # Finding move with the least value 39 for move in possible_moves: 40 move_value = goal.get_attraction_force(move) 41 #for obstacle in obstacles: 42 #move_value += obstacle.get_repulsion_force(move) 43 44 if move_value < min_value: 45 min_value = move_value 46 best_move = move 47 48 # Setting best move as agent's next position 49 agent.position = best_move 50 #点を書く 51 agent.draw(image) 52 # Displaying updated frame 53 cv2.imshow('Output', image) 54 key = cv2.waitKey(self.speed) 55 #print(self.speed) 56 if key & 0xFF == ord('s'): 57 self.speed -= 100 58 if self.speed <= 0: 59 self.speed += 100 60 print("これ以上速くなりません") 61 62 if key & 0xFF == ord('d'): 63 self.speed += 100 64 if self.speed >= 2100: 65 self.speed -= 100 66 print("これ以上遅くなりません") 67 if Position.calculate_distance(agent.position, goal.position)<10: 68 navi += 1 69 if navi == 1: 70 print("右に曲がります") 71 print("進みます") 72 goal = Goal(Position(40,180), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 73 74 75 if navi == 2: 76 if Position.calculate_distance(agent.position, goal.position)<10: 77 print("左に曲がります") 78 print("進みます") 79 goal = Goal(Position(40,620), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 80 81 82 if navi ==3: 83 if Position.calculate_distance(agent.position, goal.position)<10: 84 print("左に曲がります") 85 print("進みます") 86 goal = Goal(Position(320,620), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 87 88 89 if navi ==4: 90 if Position.calculate_distance(agent.position, goal.position)<10: 91 print("斜め右に曲がります") 92 print("進みます") 93 goal = Goal(Position(370,680), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 94 95 96 if navi ==5: 97 if Position.calculate_distance(agent.position, goal.position)<10: 98 print("左に曲がります") 99 print("進みます") 100 goal = Goal(Position(490,680), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 101 102 103 if navi ==6: 104 if Position.calculate_distance(agent.position, goal.position)<10: 105 print("左に曲がります") 106 print("進みます") 107 goal = Goal(Position(490,580), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) 108 109 110 if navi == 7: 111 if Position.calculate_distance(agent.position, goal.position)<10: 112 print("到着しました") 113 cv2.waitKey(0) 114 115 116 if key & 0xFF == ord('q'): 117 sys.exit() 118 # Hold on last frame 119 cv2.waitKey(0) 120 121 def video(self): 122 cap = cv2.VideoCapture('experiment.mp4') 123 if (cap.isOpened()== False): 124 print("ビデオファイルを開くとエラーが発生しました") 125 126 while(cap.isOpened()): 127 128 ret, frame = cap.read() 129 if ret == True: 130 cv2.imshow("Video",frame) 131 132 if cv2.waitKey(25) & 0xFF == ord('q'): 133 break 134 135 else: 136 break 137 138 cap.release() 139 cv2.destroyAllWindows() 140    141 142 143def main(): 144 pt = Potential() 145 th1 = threading.Thread(target=pt.potential) 146 th2 = threading.Thread(target=pt.video) 147 th1.start() 148 th2.start() 149 150 151if __name__ == '__main__': 152 main() 153

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

先に回答されている方の「マルチプロセス」以外の方法だと、
下記のようなパターンの「マルチスレッド」みたいな方法でしょうか?

「マルチプロセス」「マルチスレッド」で調べてみるとサンプル等も見つかるかと思います。

python

1import threading 2 3# もとの関数部分は省略 4 5if __name__ == "__main__": 6 7 th1 = threading.Thread(target=potential) 8 9 th2 = threading.Thread(target=video) 10 11 th1.start() 12 13 th2.start()

投稿2021/11/10 10:20

yamame

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reiya_123

2021/11/10 12:07

ご回答ありがとうございます コードを直してみたのですがサブゴールを決めゴールを更新しながらゴールに向かうコードになっているためか同時起動はしたのですが点描写が動かない状況です。 申し訳ございませんが宜しくおねがいします。
guest

0

  • 1つ目と2つ目のコードを同時に実行することは可能でしょうか?

公式ドキュメント multiprocessing --- プロセスベースの並列処理を使えば可能でしょう。

投稿2021/11/10 10:06

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問