Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
optv / test / test_framebuf.py
Size: Mime:
"""
Check that the bindings do what they are expected to.
The test expects to be run from the py_bind/test/ directory for now,
using the nose test harness [1].

References:
[1] https://nose.readthedocs.org/en/latest/
"""

import unittest, os, numpy as np
from optv.tracking_framebuf import read_targets, Target, TargetArray, Frame

class TestTargets(unittest.TestCase):
    def test_fill_target(self):
        t = Target(pnr=1, tnr=2 ,x=1.5, y=2.5, n=20, nx=4, ny=5, sumg=30)
        self.failUnlessEqual(t.pnr(), 1)
        self.failUnlessEqual(t.tnr(), 2)
        self.failUnlessEqual(t.pos(), (1.5, 2.5))
        self.failUnlessEqual(t.count_pixels(), (20, 4, 5))
        self.failUnlessEqual(t.sum_grey_value(), 30)
        
    def test_fill_target_array(self):
        tarr = TargetArray(2)
        tarr[0].set_pos((1.5, 2.5))
        tarr[1].set_pos((3.5, 4.5))
        
        self.failUnlessEqual(tarr[0].pos(), (1.5, 2.5))
        self.failUnlessEqual(tarr[1].pos(), (3.5, 4.5))

    def test_read_targets(self):
        """Reading a targets file from Python."""
        targs = read_targets("../../liboptv/tests/testing_fodder/sample_", 42)

        self.failUnlessEqual(len(targs), 2)
        self.failUnlessEqual([targ.tnr() for targ in targs], [1, 0])
        self.failUnlessEqual([targ.pos()[0] for targ in targs], [1127., 796.])
        self.failUnlessEqual([targ.pos()[1] for targ in targs], [796., 809.])
    
    def test_sort_y(self):
        """sorting on the Y coordinate in place"""
        targs = read_targets("testing_fodder/frame/cam1.", 333)
        revs = read_targets("testing_fodder/frame/cam1_reversed.", 333)
        revs.sort_y()
        
        for targ, rev in zip(targs, revs):
            self.failUnless(targ.pos(), rev.pos())
    
    def test_write_targets(self):
        """Round-trip test of writing targets."""
        targs = read_targets("../../liboptv/tests/testing_fodder/sample_", 42)
        targs.write("testing_fodder/round_trip.", 1)
        tback = read_targets("testing_fodder/round_trip.", 1)
        
        self.failUnlessEqual(len(targs), len(tback))
        self.failUnlessEqual([targ.tnr() for targ in targs], 
            [targ.tnr() for targ in tback])
        self.failUnlessEqual([targ.pos()[0] for targ in targs], 
            [targ.pos()[0] for targ in tback])
        self.failUnlessEqual([targ.pos()[1] for targ in targs],
            [targ.pos()[1] for targ in tback])
        
    def tearDown(self):
        filename = "testing_fodder/round_trip.0001_targets"
        if os.path.exists(filename):
            os.remove(filename)

class TestFrame(unittest.TestCase):
    def test_read_frame(self):
        """reading a frame"""
        targ_files = ["testing_fodder/frame/cam%d." % c for c in xrange(1, 5)]
        frm = Frame(4, corres_file_base="testing_fodder/frame/rt_is",
            linkage_file_base="testing_fodder/frame/ptv_is", 
            target_file_base=targ_files, frame_num=333)
        
        pos = frm.positions()
        self.failUnlessEqual(pos.shape, (10,3))
        
        targs = frm.target_positions_for_camera(3)
        self.failUnlessEqual(targs.shape, (10,2))
        
        targs_correct = np.array([[ 426., 199.],
            [ 429.,  60.],
            [ 431., 327.],
            [ 509., 315.],
            [ 345., 222.],
            [ 465., 139.],
            [ 487., 403.],
            [ 241., 178.],
            [ 607., 209.],
            [ 563., 238.]])
        np.testing.assert_array_equal(targs, targs_correct)

if __name__ == "__main__":
    unittest.main()