competition_experiments/eval_LED.py

59 lines
1.9 KiB
Python

import pandas as pd
import numpy as np
import sys
import os
import matplotlib.pyplot as plt
from IPython import embed
import cv2
import glob
def main(folder):
sr = 20000
video_path = glob.glob(os.path.join(folder, '2022*.mp4'))[0]
cap = cv2.VideoCapture(video_path)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
times = np.load(os.path.join(folder, 'times.npy'))
LED_idx = pd.read_csv(os.path.join(folder, 'led_idxs.csv'), sep=',', encoding = "utf-7")
led_idx = np.array(LED_idx).T[0]
led_frame = np.load(os.path.join(folder, 'LED_frames.npy'))
led_vals = np.load(os.path.join(folder, 'LED_val.npy'))
led_idx_span = led_idx[-1] - led_idx[0]
led_frame_span = led_frame[-1] - led_frame[0]
led_frame_to_idx = ((led_frame-led_frame[0]) / led_frame_span) * led_idx_span + led_idx[0]
frame_idxs = np.arange(frame_count)
frame_times = (((frame_idxs - led_frame[0]) / led_frame_span) * led_idx_span + led_idx[0]) / sr
if not os.path.exists(os.path.join(folder, 'analysis')):
os.mkdir(os.path.join(folder, 'analysis'))
np.save(os.path.join(folder, 'analysis', 'frame_times.npy'), frame_times)
########################################################################################
fig, ax = plt.subplots()
ax.plot(led_vals)
ax.plot(led_frame, np.ones(len(led_frame))*100, '.', color='firebrick')
########################################################################################
fig, ax = plt.subplots()
ax.plot(led_idx / sr, np.ones(len(led_idx)), '.', color='k')
ax.plot(led_frame_to_idx / sr, np.ones(len(led_frame_to_idx))+.1, '.', color='firebrick')
ax.plot([times[0], times[0]], [0.5, 1.5], 'k', lw=1)
ax.plot([times[-1], times[-1]], [0.5, 1.5], 'k', lw=1)
ax.plot(frame_times, np.ones(len(frame_times))*0.5)
ax.set_ylim(0, 2)
plt.show()
embed()
quit()
pass
if __name__ == '__main__':
main(sys.argv[1])