update for tox testing and some docs
[face-privacy-filter.git] / face_privacy_filter / tests / test_detect.py
1 # -*- coding: utf-8 -*-
2 # ================================================================================
3 # ACUMOS
4 # ================================================================================
5 # Copyright © 2017 AT&T Intellectual Property & Tech Mahindra. All rights reserved.
6 # ================================================================================
7 # This Acumos software file is distributed by AT&T and Tech Mahindra
8 # under the Apache License, Version 2.0 (the "License");
9 # you may not use this file except in compliance with the License.
10 # You may obtain a copy of the License at
11 #
12 #      http://www.apache.org/licenses/LICENSE-2.0
13 #
14 # This file is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 # ================================================================================
19
20 from os import path
21 import pytest
22
23
24 def test_detect_single(monkeypatch):
25     pathRoot = env_update(monkeypatch)
26     from face_privacy_filter.transform_detect import FaceDetectTransform
27     transform = FaceDetectTransform(include_image=False)
28     inputDf = FaceDetectTransform.generate_in_df(path.join(pathRoot, 'testing', 'single-face_pexels.jpg'))
29     outputDf = transform.predict(inputDf)
30     assert len(outputDf) == 1                       # just one face, no image
31     assert outputDf['w'][0] == outputDf['h'][0]     # make sure width/height is equal
32     assert outputDf['w'][0] > 680                    # reasonable face size detection
33     assert len(outputDf['image_binary'][0]) == 0     # there should be no binary data on detect regions
34     print(outputDf)   # run `pytest -s` for more verbosity
35
36
37 def test_detect_multi(monkeypatch):
38     pathRoot = env_update(monkeypatch)
39     from face_privacy_filter.transform_detect import FaceDetectTransform
40     transform = FaceDetectTransform(include_image=True)
41     inputDf = FaceDetectTransform.generate_in_df(path.join(pathRoot, 'testing', 'multi-face_pexels.jpg'))
42     outputDf = transform.predict(inputDf)
43     assert len(outputDf) == 5       # note ONE face will be missed, but we get the original image, too
44     imageDf = outputDf[outputDf['region']==-1]
45     assert len(imageDf) == 1       # note ONE face will be missed, but we get the original image, too
46     assert imageDf['w'][0] == 1280  # should be the original image size
47     assert len(imageDf['image_binary'][0]) > 1  # should be the original image size
48     assert len(outputDf[outputDf['image']==0]) == len(outputDf)  # all responses belong to image 0
49     print(outputDf)
50
51
52 def env_update(monkeypatch):
53     import sys
54
55     pathRoot = path.dirname(path.dirname(path.dirname(path.abspath(__file__))))
56     print("Adding '{:}' to sys path".format(pathRoot))
57     if pathRoot not in sys.path:
58         monkeypatch.syspath_prepend(pathRoot)
59     return pathRoot