質問編集履歴

4

追加で試したことを記入

2023/03/30 08:55

投稿

kakakatokyoeki
kakakatokyoeki

スコア85

test CHANGED
File without changes
test CHANGED
@@ -193,3 +193,83 @@
193
193
  やがては動画をフレームに分割し、一枚一枚の画像に分割したものを解析し、センサーのデータと時間を用いて照らし合わせる予定です。
194
194
  動画での時間とarduinoからのtimestampが合わないと(実験の性質上誤差0.05秒程度で)、困ります。
195
195
 
196
+ ### 追加で行った実験
197
+ ```python
198
+ # -*- coding: utf-8 -*-
199
+ """
200
+ Created on Mon Mar 27 19:18:37 2023
201
+
202
+ @author: kawashima
203
+ """
204
+ import os
205
+ os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0"
206
+ import cv2
207
+ import time
208
+
209
+ # 録画時間(秒)
210
+ record_time = 360
211
+ # カメラの設定
212
+ cap1 = cv2.VideoCapture(0)
213
+ cap2 = cv2.VideoCapture(1)
214
+ cap1.set(cv2.CAP_PROP_FPS, 30)
215
+ cap2.set(cv2.CAP_PROP_FPS, 30)
216
+
217
+ # 動画保存の設定
218
+ fourcc = cv2.VideoWriter_fourcc(*'XVID')
219
+ out1 = cv2.VideoWriter('output1.avi', fourcc, 30.0, (640, 480))
220
+ out2 = cv2.VideoWriter('output2.avi', fourcc, 30.0, (640, 480))
221
+
222
+ # 録画フラグの初期化
223
+ recording = False
224
+
225
+ # 録画開始時間の初期化
226
+ start_time = None
227
+
228
+ while True:
229
+ # フレームの取得
230
+ ret1, frame1 = cap1.read()
231
+ ret2, frame2 = cap2.read()
232
+
233
+ # キー入力の取得
234
+ key = cv2.waitKey(1)
235
+
236
+ # sキーが押された場合の処理
237
+ if key == ord('s'):
238
+ recording = True
239
+ start_time = time.time()
240
+ print("Recording started")
241
+
242
+ # 録画中の場合の処理
243
+ if recording:
244
+ # 動画にフレームを追加
245
+ out1.write(frame1)
246
+ out2.write(frame2)
247
+
248
+ # 指定した録画時間が経過した場合の処理
249
+ if time.time() - start_time > record_time:
250
+ recording = False
251
+ print("Recording stopped")
252
+ break
253
+
254
+ # 画面表示
255
+ cv2.imshow('camera1', frame1)
256
+ cv2.imshow('camera2', frame2)
257
+
258
+ # qキーが押された場合の処理
259
+ if key == ord('q'):
260
+ break
261
+
262
+ # 終了処理
263
+ cap1.release()
264
+ cap2.release()
265
+ out1.release()
266
+ out2.release()
267
+ cv2.destroyAllWindows()
268
+ ```
269
+ 動画を撮るシステムだけを残して動かしてみました。
270
+ record_time を360にすると
271
+ 動画のフレーム数: 10800
272
+ 動画のFPS: 30.0
273
+ 動画の長さ: 360.00秒
274
+ と正常でした。やはり、途中で処理を挟むと負荷がかかりすぎてダメなのでしょうか
275
+

3

訂正

2023/03/30 08:36

投稿

kakakatokyoeki
kakakatokyoeki

スコア85

test CHANGED
File without changes
test CHANGED
@@ -181,7 +181,7 @@
181
181
  1.録画した動画が、倍速になることがあります。
182
182
 
183
183
  2.arduinoから最後に出された時間とカメラの録画時間が一緒になりません。
184
-  arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを60に設定すると57秒、400に設定すると243秒程度の動画になります。
184
+  arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを20に設定すると13秒、400に設定すると243秒程度の動画になります。
185
185
 
186
186
   
187
187
  ### 試したこと

2

情報を追加

2023/03/30 05:18

投稿

kakakatokyoeki
kakakatokyoeki

スコア85

test CHANGED
File without changes
test CHANGED
@@ -181,12 +181,13 @@
181
181
  1.録画した動画が、倍速になることがあります。
182
182
 
183
183
  2.arduinoから最後に出された時間とカメラの録画時間が一緒になりません。
184
-  arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを60に設定すると57秒、400に設定すると243秒程度の動画になります
184
+  arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを60に設定すると57秒、400に設定すると243秒程度の動画になります
185
185
 
186
186
   
187
187
  ### 試したこと
188
188
  1.一様プログラム2を使って調べてみましたが、プロパティと同じです。
189
- 2.record_timeを400にしたとき、タイムスタンプをプログラム1の77行目のように追加しました。すると398秒でした。398秒撮影して243秒の動画を構成していることになります。
189
+ 2.record_timeを400にしたとき、タイムスタンプをプログラム1の77行目のように追加しました。すると398秒でした。398秒撮影して243秒の動画を7311フレームで構成しています。
190
+ 400秒程度撮影して400秒程度の動画を12000フレームで構成してもらう必要があります。
190
191
 
191
192
  ### 補足情報(FW/ツールのバージョンなど)
192
193
  やがては動画をフレームに分割し、一枚一枚の画像に分割したものを解析し、センサーのデータと時間を用いて照らし合わせる予定です。

1

情報を追加

2023/03/30 05:15

投稿

kakakatokyoeki
kakakatokyoeki

スコア85

test CHANGED
@@ -1 +1 @@
1
- opencv出力される画が倍速になることがある
1
+ arduinoについたセンサーと、pythonで動かすカメラを時間を使って同期を取りたい
test CHANGED
@@ -75,7 +75,9 @@
75
75
 
76
76
  # データを保存
77
77
  data.append([elapsed_time, x, y, z])
78
-
78
+    **# 現在のタイムスタンプを取得し、リストに追加する**
79
+ timestamp = time.time()
80
+ timestamps.append(timestamp)
79
81
  # 指定した録画時間が経過した場合の処理
80
82
  if elapsed_time > record_time:
81
83
  recording = False
@@ -132,19 +134,61 @@
132
134
  cap.release()
133
135
  cv2.destroyAllWindows()
134
136
  ```
137
+ ```arduino
138
+ void setup() {
139
+ Serial.begin(9600);
140
+ }
141
+
142
+ void loop() {
143
+ uint8_t i;
144
+ long x=0;
145
+ long y=0;
146
+ long z=0;
147
+ long t=0;
148
+ for (i=0;i< 100;i++){
149
+ x=x+analogRead(0);
150
+ y=y+analogRead(1);
151
+ z=z+analogRead(2);
152
+
153
+ }
154
+ x=x/100;
155
+ y=y/100;
156
+ z=z/100;
157
+ t=millis();
158
+
159
+ Serial.print(x);
160
+ Serial.print(",");
161
+ Serial.print(y);
162
+ Serial.print(",");
163
+ Serial.print(z);
164
+ Serial.print(",");
165
+ Serial.print(t); // タイムスタンプ
166
+ Serial.print('\n');
167
+ delay(20);
168
+ }
169
+
170
+ ```
135
171
  ### コードの説明
136
172
  コード1
137
173
  arduinoから送られてきたセンサーの値と時間のセットを拾いながら録画をするものです。
174
+ arduinoとwebカメラ二台をusbでつなげています。
138
175
  コード2
139
176
  動画のフレーム数、fps、長さ、を調べるものです
177
+ コード3
178
+ arduinoに書かれているプログラムです
140
179
 
141
180
  ### 発生している問題・エラーメッセージ
142
- 1.録画した動画が、倍速になってしいます。
181
+ 1.録画した動画が、倍速になることがあります。
143
182
 
183
+ 2.arduinoから最後に出された時間とカメラの録画時間が一緒になりません。
144
- 2.プロパティで見た動画の長さはrecord_timeよりも20秒ほどいです。ですが、センサーから計算した値はほぼrecord_timeと同じでした。
184
+  arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを60に設定する57秒、400に設定すると243秒程度の動画になります
185
+
186
+  
145
187
  ### 試したこと
146
- 一様プログラム2を使って調べてみましたが、プロパティと同じです。
188
+ 1.一様プログラム2を使って調べてみましたが、プロパティと同じです。
189
+ 2.record_timeを400にしたとき、タイムスタンプをプログラム1の77行目のように追加しました。すると398秒でした。398秒撮影して243秒の動画を構成していることになります。
147
190
 
148
191
  ### 補足情報(FW/ツールのバージョンなど)
149
192
  やがては動画をフレームに分割し、一枚一枚の画像に分割したものを解析し、センサーのデータと時間を用いて照らし合わせる予定です。
193
+ 動画での時間とarduinoからのtimestampが合わないと(実験の性質上誤差0.05秒程度で)、困ります。
150
194