Skip to content

Commit

Permalink
Get tests running in docker
Browse files Browse the repository at this point in the history
  • Loading branch information
brycedrennan committed Aug 1, 2017
1 parent 78e4da5 commit a919d8a
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 25 deletions.
13 changes: 12 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
.direnv
eulerian_magnification.egg
.git
.idea
.cache
.dockerignore
.envrc
.gitignore
dist
eulerian_magnification.egg-info
.travis.yml
MANIFEST
LICENSE.txt
Dockerfile
README.md
*/__pycache__
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ install: docker build -t eulerian .
jobs:
include:
- stage: test
script: docker run -t eulerian pylama
script: docker run -it eulerian pylama
-
script: docker run -t eulerian pytest
script: docker run -it eulerian pytest
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,3 @@ RUN mkdir eulerian_magnification
RUN pip3.6 install -r requirements.txt
COPY . /code/
RUN pip3.6 install -r requirements.txt
#RUN python replicate_study.py
2 changes: 2 additions & 0 deletions eulerian_magnification/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@


def load_image(img_path):
img_path = str(img_path)
img = cv2.imread(img_path)
return uint8_to_float(img)


def _load_video(video_filename):
"""Load a video into a numpy array"""
video_filename = str(video_filename)
print("Loading " + video_filename)
if not os.path.isfile(video_filename):
raise Exception("File Not Found: %s" % video_filename)
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# dev requirements
pytest # testing
requests # download sample videos

# linters
pydocstyle
Expand Down
37 changes: 34 additions & 3 deletions tests/base.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
import hashlib
import os
import tempfile
from pathlib import Path

import cv2
import requests

TEST_VIDEO_PATH = r"U:\Users\Bryce\Projects\python\eulerian-magnification\eulerian_source_videos\baby.mp4"
TEST_IMAGE_PATH = r"U:\Users\Bryce\Projects\python\eulerian-magnification\eulerian_source_videos\lenna.tiff"
DISPLAY_RESULTS = True
TEST_DATA_PATH = Path(tempfile.gettempdir()) / Path('eulerian-magnification')
TEST_DATA_URL = "https://s3-us-west-1.amazonaws.com/eulerian-magnify/"
TEST_VIDEO_NAME = "baby.mp4"
TEST_IMAGE_NAME = "lena.tiff"
DISPLAY_RESULTS = False


def display_image(image, title='Image', wait=False):
Expand All @@ -17,3 +25,26 @@ def display_image_pyramid(pyramid):
for i, img in enumerate(pyramid):
cv2.imshow(str(i), pyramid[i])
cv2.waitKey(0)


def get_test_media_filepath(filename):
return get_local_path_for_remote_resouce(f"{TEST_DATA_URL}{filename}")


def get_local_path_for_remote_resouce(url, data_path=TEST_DATA_PATH):
url_hash = hashlib.md5(url.encode('utf8')).hexdigest()
downloaded_path = data_path / Path(url_hash + '.txt')
if not downloaded_path.exists():
download_file(url, downloaded_path)
return downloaded_path


def download_file(url, dest_path):
os.makedirs(str(dest_path.parent), exist_ok=True)
with dest_path.open('wb') as f:
response = requests.get(url, stream=True)
if not response.ok:
raise Exception('Download Failed')

for block in response.iter_content(1024):
f.write(block)
35 changes: 23 additions & 12 deletions tests/test_pyramid.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@
from eulerian_magnification.pyramid import create_gaussian_image_pyramid, create_laplacian_image_pyramid, \
create_gaussian_video_pyramid, create_laplacian_video_pyramid, collapse_laplacian_pyramid, \
collapse_laplacian_video_pyramid
from .base import TEST_IMAGE_PATH, TEST_VIDEO_PATH, display_image, display_image_pyramid
from tests.base import DISPLAY_RESULTS
from .base import display_image, display_image_pyramid, get_test_media_filepath, TEST_IMAGE_NAME, TEST_VIDEO_NAME


def test_create_gaussian_image_pyramid():
pyramid_depth = 3

img = load_image(TEST_IMAGE_PATH)
img = load_image(get_test_media_filepath(TEST_IMAGE_NAME))
pyramid = create_gaussian_image_pyramid(img, pyramid_depth)
display_image_pyramid(pyramid)

Expand All @@ -29,7 +30,7 @@ def test_create_gaussian_image_pyramid():
def test_create_laplacian_image_pyramid():
pyramid_depth = 3

img = load_image(TEST_IMAGE_PATH)
img = load_image(get_test_media_filepath(TEST_IMAGE_NAME))
pyramid = create_laplacian_image_pyramid(img, pyramid_depth)
display_image_pyramid(pyramid)

Expand All @@ -44,27 +45,34 @@ def test_create_laplacian_image_pyramid():


def test_play_video():
play_video(TEST_VIDEO_PATH)
if DISPLAY_RESULTS:
play_video(get_test_media_filepath(TEST_VIDEO_NAME))


def test_create_gaussian_video():
orig_vid, fps = load_video_float(TEST_VIDEO_PATH)
orig_vid, fps = load_video_float(get_test_media_filepath(TEST_VIDEO_NAME))
pyramid = create_gaussian_video_pyramid(orig_vid, 3)
play_pyramid(pyramid)
if DISPLAY_RESULTS:
play_pyramid(pyramid)
del pyramid


def test_laplacian_video():
orig_vid, fps = load_video_float(TEST_VIDEO_PATH)
orig_vid, fps = load_video_float(get_test_media_filepath(TEST_VIDEO_NAME))
pyramid = create_laplacian_video_pyramid(orig_vid, 3)
play_pyramid(pyramid)
if DISPLAY_RESULTS:
play_pyramid(pyramid)
recomposed_video = collapse_laplacian_video_pyramid(pyramid)
assert (recomposed_video == orig_vid).all()
del pyramid
del recomposed_video


def test_collapse_laplacian_pyramid():
img = load_image(TEST_IMAGE_PATH)
img = load_image(get_test_media_filepath(TEST_IMAGE_NAME))
pyramid = create_laplacian_image_pyramid(img, 5)
display_image_pyramid(pyramid)
if DISPLAY_RESULTS:
display_image_pyramid(pyramid)
img_collapsed = collapse_laplacian_pyramid(pyramid)
display_image(img, "Original")
display_image(img_collapsed, "Recomposed", wait=True)
Expand All @@ -73,6 +81,9 @@ def test_collapse_laplacian_pyramid():

def test_eulerian_magnification():
# ('baby', 10, 16, 0.4, 3, 30),
orig_vid, fps = load_video_float(TEST_VIDEO_PATH)
orig_vid, fps = load_video_float(get_test_media_filepath(TEST_VIDEO_NAME))
enhanced_vid = eulerian_magnification(orig_vid, fps=30, freq_max=0.77, freq_min=0.4, amplification=30)
play_vid_data(enhanced_vid)
if DISPLAY_RESULTS:
play_vid_data(enhanced_vid)

del enhanced_vid
17 changes: 11 additions & 6 deletions tests/test_transforms.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from eulerian_magnification.base import show_frequencies
from eulerian_magnification.io import _load_video, play_vid_data, load_image, load_video_float
from eulerian_magnification.transforms import uint8_to_float, float_to_uint8
from .base import TEST_IMAGE_PATH, TEST_VIDEO_PATH
from tests.base import DISPLAY_RESULTS

from .base import get_test_media_filepath, TEST_VIDEO_NAME, TEST_IMAGE_NAME


def test_uint8_to_float_and_back():
img = load_image(TEST_IMAGE_PATH)
img = load_image(get_test_media_filepath(TEST_IMAGE_NAME))
img_float = uint8_to_float(img)
img_uint8 = float_to_uint8(img_float)
img_diff = img - img_uint8
Expand All @@ -14,16 +16,19 @@ def test_uint8_to_float_and_back():


def test_uint8_to_float_and_back_for_video():
vid_data, fps = _load_video(TEST_VIDEO_PATH)
vid_data, fps = _load_video(get_test_media_filepath(TEST_VIDEO_NAME))
vid_float = uint8_to_float(vid_data)
vid_unit8 = float_to_uint8(vid_float)
vid_diff = vid_data - vid_unit8

play_vid_data(vid_float)
if DISPLAY_RESULTS:
play_vid_data(vid_float)

assert vid_diff.max() <= 1
del vid_float


def test_fourier_transform_video():
vid_data, fps = load_video_float(TEST_VIDEO_PATH)
show_frequencies(vid_data, fps)
vid_data, fps = load_video_float(get_test_media_filepath(TEST_VIDEO_NAME))
if DISPLAY_RESULTS:
show_frequencies(vid_data, fps)

0 comments on commit a919d8a

Please sign in to comment.