前提・実現したいこと
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/10 11:48
退会済みユーザー
2021/11/10 12:07