diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-07-25 18:48:21 +0200 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-07-25 18:48:21 +0200 |
commit | bb8130b093e51474a7ce6f6431c7f9a02c4f930b (patch) | |
tree | 6fb1d3811686ba4520946a48020ff5cf984db946 /test/extractor/image/face/test_detect.py | |
parent | be6027859c815e18b08a49ca1a45df3fc0aac301 (diff) | |
parent | 5d0ff7b2e0d1c63d9551e44ed3ffd96c695b69d9 (diff) | |
download | bsie-bb8130b093e51474a7ce6f6431c7f9a02c4f930b.tar.gz bsie-bb8130b093e51474a7ce6f6431c7f9a02c4f930b.tar.bz2 bsie-bb8130b093e51474a7ce6f6431c7f9a02c4f930b.zip |
Merge branch 'mb/faces' into develop
Diffstat (limited to 'test/extractor/image/face/test_detect.py')
-rw-r--r-- | test/extractor/image/face/test_detect.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/test/extractor/image/face/test_detect.py b/test/extractor/image/face/test_detect.py new file mode 100644 index 0000000..92375a2 --- /dev/null +++ b/test/extractor/image/face/test_detect.py @@ -0,0 +1,62 @@ + +# standard imports +import contextlib +import io +import os +import requests +import unittest + +# bsie imports +from bsie.extractor import base +from bsie.reader.face import FaceExtract +from bsie.utils import bsfs, node as _node, ns + +# objects to test +from bsie.extractor.image.face.detect import FaceDetect, bsf + + +## code ## + +class TestFaceDetect(unittest.TestCase): + def setUp(self): + # download test image + target = os.path.join(os.path.dirname(__file__), 'testface1.jpg') + if not os.path.exists(target): + with open(target, 'wb') as ofile: + ans = requests.get('https://www.bsfs.io/testdata/iepahGee1uch5ahr3ic1.jpg') + ofile.write(ans.content) + + def test_extract(self): + with contextlib.redirect_stderr(io.StringIO()): # NOTE: hide warnings from facenet_pytorch + # setup + rdr = FaceExtract() + ext = FaceDetect() + subject = _node.Node(ns.bsfs.Entity) + content = rdr(os.path.join(os.path.dirname(__file__), 'testface1.jpg')) + principals = set(ext.principals) + face = _node.Node(ns.bsn.Face, ucid='2a7203c1515e0caa66a7461452c0b4552f1433a613cb3033e59ed2361790ad45') + triples = list(ext.extract(subject, content, principals)) + # principals is bse:face + self.assertSetEqual(principals, {ext.schema.predicate(ns.bse.face)}) + # check triples + self.assertIn((subject, ns.bse.face, face), triples) + self.assertIn((face, bsf.x, 575.4721153898192), triples) + self.assertIn((face, bsf.y, 265.3955625), triples) + self.assertIn((face, bsf.width, 626.3928904791771), triples) + self.assertIn((face, bsf.height,858.6870625), triples) + # check embedding + emb = [o for s, p, o in triples if s == face and p == bsf.embedding] + self.assertEqual(len(emb), 1) + self.assertAlmostEqual(emb[0].sum(), -1.9049968) + # no triples on principal mismatch + self.assertListEqual(list(ext.extract(subject, content, set())), []) + # no triples on no content + self.assertListEqual(list(ext.extract(subject, [], principals)), []) + + +## main ## + +if __name__ == '__main__': + unittest.main() + +## EOF ## |