質問編集履歴
4
追加で試したことを記入
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
訂正
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を
|
184
|
+
arduinoの時間はrecord_timeとほぼ同じになりますが、撮影した動画の長さはrecord_timeよりも短くなります。record_timeを20に設定すると13秒、400に設定すると243秒程度の動画になります。
|
185
185
|
|
186
186
|
|
187
187
|
### 試したこと
|
2
情報を追加
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
情報を追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
op
|
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
|
-
|
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
|
|