blob: 82bae420e2255d3238bf638beb57b99147379c4b [file] [log] [blame]
giolekvafb52e0d2020-04-23 22:52:13 +04001import sys
2import json
3import urllib.parse
4import urllib.request
5import os
6
giolekvafb52e0d2020-04-23 22:52:13 +04007
8def fetch_file_for_image(gql_endpoint, object_storage_endpoint, id):
9 data = {"query": "{ getImage(id: \"" + id + "\") { objectPath } }"}
giolekvaedbaf322020-05-05 18:17:37 +040010 # encoded_data = urllib.parse.urlencode(data).encode('UTF-8')
11 req = urllib.request.Request(gql_endpoint, method="POST")
12 req.add_header('Content-Type', 'application/json')
13 resp = urllib.request.urlopen(req, json.dumps(data).encode('UTF-8'))
giolekvafb52e0d2020-04-23 22:52:13 +040014 object_path = json.loads(resp.read())["getImage"]["objectPath"]
15 local_path = urllib.request.urlretrieve(
16 object_storage_endpoint + "/" + object_path)[0]
17 return local_path
18
19
20def format_img_segment(id, box):
21 return ("{{upperLeftX: {f[0]}, upperLeftY: {f[1]}, lowerRightX: {f[2]}, " +
22 "lowerRightY: {f[3]}, sourceImage: {{id: \"{id}\"}}}}").format(
23 f=box,
24 id=id)
25
26
27def upload_face_segments(gql_endpoint, id, faces):
28 segments = [format_img_segment(id, f) for f in faces]
giolekvae8b6a532021-01-13 16:59:03 +040029 data = {"query": "mutation {{ addImageSegment(input: [{segments}]) {{ numUids }} }}".format(
giolekvafb52e0d2020-04-23 22:52:13 +040030 segments=", ".join(segments))}
giolekvaedbaf322020-05-05 18:17:37 +040031 # encoded_data = urllib.parse.urlencode(data).encode('UTF-8')
32 req = urllib.request.Request(gql_endpoint, method="POST")
33 req.add_header('Content-Type', 'application/json')
34 resp = urllib.request.urlopen(req, json.dumps(data).encode('UTF-8'))
giolekvafb52e0d2020-04-23 22:52:13 +040035 print(resp.read())
giolekvae8b6a532021-01-13 16:59:03 +040036
giolekvafb52e0d2020-04-23 22:52:13 +040037
38def main():
giolekvaedbaf322020-05-05 18:17:37 +040039 method = "haar"
40 if len(sys.argv) == 5 and sys.argv[4] == "mtcnn":
41 method = "mtcnn"
giolekvafb52e0d2020-04-23 22:52:13 +040042 f = fetch_file_for_image(sys.argv[1], sys.argv[2], sys.argv[3])
giolekvaedbaf322020-05-05 18:17:37 +040043 if method == "haar":
44 import haar
45 faces = haar.detect_faces(f)
46 upload_face_segments(sys.argv[1], sys.argv[3], faces)
47 else:
48 import mtcnn
49 faces = mtcnn.detect_faces(f)
50 upload_face_segments(sys.argv[1], sys.argv[3], faces)
giolekvafb52e0d2020-04-23 22:52:13 +040051 os.remove(f)
giolekvafb52e0d2020-04-23 22:52:13 +040052
53
54if __name__ == "__main__":
55 main()