diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-06-17 22:33:38 +0200 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-06-17 22:33:38 +0200 |
commit | 6a51098412b220e3be90cc7fdd7dba6fb4a2f025 (patch) | |
tree | 43ca0c26e36768a6b6358ffa63fb49fae6704caf /test/extractor/image/face/test_detect.py | |
parent | f44ba0b30f924df54a80aaa7bafdf817e5ab1881 (diff) | |
download | bsie-6a51098412b220e3be90cc7fdd7dba6fb4a2f025.tar.gz bsie-6a51098412b220e3be90cc7fdd7dba6fb4a2f025.tar.bz2 bsie-6a51098412b220e3be90cc7fdd7dba6fb4a2f025.zip |
face reader, face detection and identification extractors
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 ## |