質問編集履歴

5

修正と追加です

2021/12/05 10:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,136 @@
24
24
 
25
25
  ###
26
26
 
27
+ ```
28
+
29
+ def process(self):
30
+
31
+ # Defining world dimensions
32
+
33
+ world_size = (720, 900)
34
+
35
+ image_path ="/program/main/resize_map.jpg"
36
+
37
+     #マップの読み込み
38
+
39
+ image = cv2.imread(image_path)
40
+
41
+     #スタート地点
42
+
43
+ agent = Agent(Position(720,75), scan_radius=0.60, possible_moves=30)
44
+
45
+ #第1ゴール地点
46
+
47
+ goal = Goal(Position(588,218), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2))
48
+
49
+     #描写
50
+
51
+ agent.draw(image)
52
+
53
+ goal.draw(image)
54
+
55
+ cv2.imshow('Output', image)
56
+
57
+ cv2.moveWindow('Output', 1950, 100)
58
+
59
+ cv2.waitKey(100)
60
+
61
+
62
+
63
+ #ポテンシャル法による画像に点描写するプログラム
64
+
65
+ navi = 0
66
+
67
+ args = self.arg_parse()
68
+
69
+ confidence = float(args.confidence)
70
+
71
+ nms_thesh = float(args.nms_thresh)
72
+
73
+ CUDA = torch.cuda.is_available()
74
+
75
+ num_classes = 80
76
+
77
+ print("Loading network.....")
78
+
79
+ model = Darknet(args.cfgfile)
80
+
81
+ model.load_weights(args.weightsfile)
82
+
83
+ print("Network successfully loaded")
84
+
85
+ if CUDA:
86
+
87
+ model.cuda()
88
+
89
+ #ここまでしか来ず、「進みますがターミナルに出力されません
90
+
91
+ #whileループ内のループというのが無限ループ
92
+
93
+ # ストリーム(Color/Depth)の設定
94
+
95
+ config = rs.config()
96
+
97
+     #撮影した動画を読み込む
98
+
99
+ config.enable_device_from_file('/48A9A14C31288186/12_2_thu.bag',repeat_playback=False)
100
+
101
+ config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
102
+
103
+ config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
104
+
105
+
106
+
107
+ # ストリーミング開始
108
+
109
+ pipeline = rs.pipeline()
110
+
111
+ profile = pipeline.start(config)
112
+
113
+ align = rs.align(rs.stream.color)
114
+
115
+ print("進みます")
116
+
117
+ playsound('/home/limlab/program/voice/go_straight.mp3')
118
+
119
+ try:
120
+
121
+ #ゴールまで0.3以上の距離があるのでゴールに向かって点の描写が始まる
122
+
123
+ while Position.calculate_distance(agent.position, goal.position) > 0.3:
124
+
125
+ try:
126
+
127
+ frames = pipeline.wait_for_frames()
128
+
129
+ color_frame = frames.get_color_frame()
130
+
131
+ depth_frame = frames.get_depth_frame()
132
+
133
+ if not depth_frame or not color_frame:
134
+
135
+ continue
136
+
137
+ frames = align.process(frames)
138
+
139
+ profile = frames.get_profile()
140
+
141
+ #画像データに変換
142
+
143
+ color_image = np.asanyarray(color_frame.get_data())
144
+
145
+ depth_color_frame = rs.colorizer().colorize(depth_frame)
146
+
147
+ depth_color_image = np.asanyarray(depth_color_frame.get_data())
148
+
149
+ #これ以降,点描写がされつつ、yoloによる認識が始まり認識した場合、count_image_pathが保存されます、
150
+
151
+
152
+
153
+
154
+
155
+ ```
156
+
27
157
 
28
158
 
29
159
  ```python3.8
@@ -44,29 +174,45 @@
44
174
 
45
175
  m = Main()
46
176
 
47
- r = Run_image()
48
-
49
177
  executor = concurrent.futures.ProcessPoolExecutor(max_workers=2)
50
178
 
51
-
52
-
53
179
  executor.submit(m.process)
54
180
 
55
-
181
+ r_running = False
182
+
183
+
56
184
 
57
185
  while True:
58
186
 
59
-
187
+ print("ループ")
188
+
60
-
189
+ # プロセスrが動作していなくて、プロセスmの情報ができたらプロセスrを起動
190
+
61
- if os.path.exists(count_image_path)== True:
191
+ if not r_running and os.path.exists(count_image_path)== True:
192
+
193
+ r = Run_image()
62
194
 
63
195
  executor.submit(r.run)
64
196
 
197
+ r_running = True
198
+
199
+
200
+
201
+ # プロセスrが終了したら、フラグを落す。
202
+
65
- os.remove(count_image_path)
203
+ if os.path.exists(text_reading_image_path):
204
+
66
-
205
+ r_running = False
206
+
207
+
208
+
209
+
210
+
67
-
211
+ # プロセスmが終章したらループを抜ける
212
+
68
-
213
+ #if not r_running and #プロセスmの終了検知:
214
+
69
-
215
+ #break
70
216
 
71
217
 
72
218
 

4

修正

2021/12/05 10:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -30,27 +30,35 @@
30
30
 
31
31
  def main():
32
32
 
33
+ if os.path.exists(count_image_path):
34
+
35
+ print("count_image_pathが存在するので削除します")
36
+
37
+ os.remove(count_image_path)
38
+
39
+ if os.path.exists(text_reading_image_path):
40
+
41
+ print("text_reading_image_pathが存在するので削除します")
42
+
43
+ os.remove(text_reading_image_path)
44
+
33
45
  m = Main()
34
46
 
35
47
  r = Run_image()
36
48
 
37
-
38
-
39
- if os.path.exists(count_image_path):
40
-
41
- print("ファイルが存在するので削除します")
42
-
43
- os.remove(count_image_path)
44
-
45
- executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
49
+ executor = concurrent.futures.ProcessPoolExecutor(max_workers=2)
46
50
 
47
51
 
48
52
 
49
- if not os.path.exists(count_image_path):
53
+ executor.submit(m.process)
50
54
 
51
- executor.submit(m.process)
55
+
52
56
 
57
+ while True:
58
+
59
+
60
+
53
- if os.path.exists(count_image_path):
61
+ if os.path.exists(count_image_path)== True:
54
62
 
55
63
  executor.submit(r.run)
56
64
 

3

修正

2021/12/05 07:31

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -14,9 +14,11 @@
14
14
 
15
15
 
16
16
 
17
- executor.submit(m.process)は動画再生のため、1回の実行だけでよいのですがexecutor.submit(r.run)は動画の結果に応じて何度も実行する必要があります。解析するときだけ並列処理になるというプログラムを書くことはできますでしょうか。
17
+ executor.submit(m.process)は動画再生のため、1回の実行だけでよいのですがexecutor.submit(r.run)は動画の結果(count_image_pathは動画から得られた画像のパス)に応じて何度も実行する必要があります。解析するときだけ並列処理になるというプログラムを書くことはできますでしょうか。
18
18
 
19
19
 
20
+
21
+ 申し訳ございませんが宜しくおねがい致します。
20
22
 
21
23
 
22
24
 

2

修正

2021/12/03 07:49

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 1つのプログラム内で並列処理をするしないを条件分岐したい
1
+ 1つのプログラム内で並列処理をするタイミングを決め、並列処理をしないときは1つの関数だけ動かしたい
test CHANGED
@@ -8,11 +8,13 @@
8
8
 
9
9
 
10
10
 
11
+
12
+
11
- 並列処理に関する質問ですが、基本的にexecutor.submit(m.process)を起動し、必要なときにexecutor.submit(r.run)を動し並列処理していきたいと思っています。また、executor.submit(r.run)の処理が終了したらexecutor.submit(m.process)だけの処理していきたいです。
13
+ executor.submit(m.process)では1回のみ動画ていてその動画から得られた結果からexecutor.submit(m.process)を動つつexecutor.submit(r.run)で動画解析をしています。また、動画の解析が終わったら終了しexecutor.submit(m.process)だけにしていきたいです。
12
14
 
13
15
 
14
16
 
15
- 現状、executor.submit(m.process)だけの起動となっており、count_image_path(画像ファイル)は存在します並列処理に移ってくれていない状態です。こちらのコードにどのよな誤りがある教えていただきたいです申し訳ございませんが宜しくおねがい致します。
17
+ executor.submit(m.process)は動画再生のため、1回の実行だけでよいですがexecutor.submit(r.run)は動の結果に応じて何度も実行する必要があります。解析するときだけ並列処理になるとうプログラムを書くことはきまでしょうか。
16
18
 
17
19
 
18
20
 

1

修正

2021/12/03 07:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- 現状、executor.submit(m.process)だけの起動となっており、count_image_path(画像ファイル)は存在しますが並列処理に移ってくれていない状態です。申し訳ございませんが宜しくおねがい致します。
15
+ 現状、executor.submit(m.process)だけの起動となっており、count_image_path(画像ファイル)は存在しますが並列処理に移ってくれていない状態です。こちらのコードにどのような誤りがあるか教えていただきたいです。申し訳ございませんが宜しくおねがい致します。
16
16
 
17
17
 
18
18