aboutsummaryrefslogtreecommitdiffstats
path: root/test/extractor/image/face/test_detect.py
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-07-25 18:48:21 +0200
committerMatthias Baumgartner <dev@igsor.net>2023-07-25 18:48:21 +0200
commitbb8130b093e51474a7ce6f6431c7f9a02c4f930b (patch)
tree6fb1d3811686ba4520946a48020ff5cf984db946 /test/extractor/image/face/test_detect.py
parentbe6027859c815e18b08a49ca1a45df3fc0aac301 (diff)
parent5d0ff7b2e0d1c63d9551e44ed3ffd96c695b69d9 (diff)
downloadbsie-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.py62
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 ##