add mask test python code

This commit is contained in:
caternuson 2020-10-07 08:37:53 -07:00
parent 2773887a7f
commit c68de18588
2 changed files with 94 additions and 0 deletions

54
Mask_Efficacy/process_run.py Executable file
View file

@ -0,0 +1,54 @@
import time
import imageio
from skimage.color import rgb2gray
import matplotlib.pyplot as plt
import numpy as np
THRESH = 0.3
RUN = int(input('Enter run number: '))
vid = imageio.get_reader('run_{:03d}.mp4'.format(RUN), 'ffmpeg')
#----------------
# MAIN PROCESSING
#----------------
frame_data = []
start = time.monotonic()
# go through video frame by frame
print("Processing", end='')
for frame in vid:
print('.', end='', flush=True)
frame_bin = rgb2gray(frame) > THRESH
frame_count = np.count_nonzero(frame_bin == True)
frame_percent = 100 * frame_count / (1920*1080)
frame_data.append((frame_count, frame_percent))
# overall stats
avg_count = sum([x[0] for x in frame_data]) / len(frame_data)
avg_percent = 100 * avg_count / (1920*1080)
end = time.monotonic()
print("\nProcessing done in {} secs.".format(end - start))
print("Average Count = {}".format(avg_count))
print("Average Percent = {}".format(avg_percent))
#-------------
# SAVE TO FILE
#-------------
print("Saving data to file...")
with open('run_{:03d}.csv'.format(RUN), 'w') as fp:
for frame, data in enumerate(frame_data):
fp.write('{},{},{}\n'.format(frame, data[0], data[1]))
#---------
# PLOTTING
#---------
print("Generating plots...")
fig, ax = plt.subplots(1, figsize = (10,5))
ax.set_title("RUN {:03d}\nTHRESH = {}, AVG_CNT = {:4.2}, AVG_PER = {:.3}".format(RUN, THRESH,avg_count, avg_percent))
ax.set_xlabel("FRAME")
ax.set_ylabel("COUNT")
ax.plot([x[0] for x in frame_data])
fig.savefig('run_{:03d}_plot.png'.format(RUN))
print("DONE.")

40
Mask_Efficacy/take_video.py Executable file
View file

@ -0,0 +1,40 @@
import time
import math
import os
import RPi.GPIO as GPIO
import simpleaudio as sa
import picamera
camera = picamera.PiCamera()
camera.resolution = (1920, 1080)
VIDEO_LENGTH = 10
BUTTON = 4
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)
SIN_LENGTH = 500
SIN_AMPLITUDE = 127
SIN_OFFSET = 128
DELTA_PI = 2 * math.pi / SIN_LENGTH
sine_wave = bytes([
int(SIN_OFFSET + SIN_AMPLITUDE * math.sin(DELTA_PI * i)) for i in range(SIN_LENGTH)
])
def play_tone(length):
play_back = sa.play_buffer(sine_wave*length, 2, 2, 44100)
play_back.wait_done()
run_number = int(input("Enter run number:"))
print("Press button when ready.")
while GPIO.input(BUTTON):
pass
play_tone(100)
camera.start_recording("run_{:03d}.h264".format(run_number))
camera.wait_recording(VIDEO_LENGTH)
camera.stop_recording()
play_tone(100)
err = os.system("MP4Box -add run_{0:03d}.h264 run_{0:03d}.mp4".format(run_number))