From 6929fb8c96805565b68e3fe135e174ffe49bde72 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 11 May 2021 13:36:35 +0100 Subject: [PATCH] Add camera properties --- city.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- media.py | 6 +++++- tests.py | 6 ++++++ 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/city.py b/city.py index 1dd0bbfce..d6e744ecf 100644 --- a/city.py +++ b/city.py @@ -21,6 +21,50 @@ PERSON_EVENING = 4 PERSON_PARTY = 5 +def _getDecoyCamera(decoySeed: int) -> (str, str, int): + """Returns a decoy camera make and model which took the photo + """ + cameras = [ + ["Apple", "iPhone SE"], + ["Apple", "iPhone XR"], + ["Apple", "iPhone 6"], + ["Apple", "iPhone 7"], + ["Apple", "iPhone 8"], + ["Apple", "iPhone 11"], + ["Apple", "iPhone 11 Pro"], + ["Apple", "iPhone 12"], + ["Apple", "iPhone 12 Mini"], + ["Apple", "iPhone 12 Pro Max"], + ["Samsung", "Galaxy Note 20 Ultra"], + ["Samsung", "Galaxy S20 Plus"], + ["Samsung", "Galaxy S20 FE 5G"], + ["Samsung", "Galaxy Z FOLD 2"], + ["Samsung", "Galaxy S10 Plus"], + ["Samsung", "Galaxy S10e"], + ["Samsung", "Galaxy Z Flip"], + ["Samsung", "Galaxy A51"], + ["Samsung", "Galaxy S10"], + ["Samsung", "Galaxy S10 Plus"], + ["Samsung", "Galaxy S10e"], + ["Samsung", "Galaxy S10 5G"], + ["Samsung", "Galaxy A60"], + ["Samsung", "Note 10"], + ["Samsung", "Note 10 Plus"], + ["Samsung", "Galaxy S21 Ultra"], + ["Samsung", "Galaxy Note 20 Ultra"], + ["Samsung", "Galaxy S21"], + ["Samsung", "Galaxy S21 Plus"], + ["Samsung", "Galaxy S20 FE"], + ["Samsung", "Galaxy Z Fold 2"], + ["Samsung", "Galaxy A52 5G"], + ["Samsung", "Galaxy A71 5G"] + ] + randgen = random.Random(decoySeed) + index = randgen.randint(0, len(cameras) - 1) + serialNumber = randgen.randint(100000000000, 999999999999999999999999) + return cameras[index][0], cameras[index][1], serialNumber + + def _getCityPulse(currTimeOfDay, decoySeed: int) -> (float, float): """This simulates expected average patterns of movement in a city. Jane or Joe average lives and works in the city, commuting in @@ -76,10 +120,12 @@ def _getCityPulse(currTimeOfDay, decoySeed: int) -> (float, float): def spoofGeolocation(baseDir: str, city: str, currTime, decoySeed: int, - citiesList: []) -> (float, float, str, str): + citiesList: []) -> (float, float, str, str, + str, str, int): """Given a city and the current time spoofs the location for an image - returns latitude, longitude, N/S, E/W + returns latitude, longitude, N/S, E/W, + camera make, camera model, camera serial number """ locationsFilename = baseDir + '/custom_locations.txt' if not os.path.isfile(locationsFilename): @@ -122,6 +168,8 @@ def spoofGeolocation(baseDir: str, approxTimeZone = -approxTimeZone currTimeAdjusted = currTime - \ datetime.timedelta(hours=approxTimeZone) + camMake, camModel, camSerialNumber = \ + _getDecoyCamera(decoySeed) # patterns of activity change in the city over time (distanceFromCityCenter, angleRadians) = \ _getCityPulse(currTimeAdjusted, decoySeed) @@ -142,7 +190,9 @@ def spoofGeolocation(baseDir: str, # number of decimal places latitude = int(latitude * 100000) / 100000.0 longitude = int(longitude * 100000) / 100000.0 - return latitude, longitude, latdirection, longdirection + return (latitude, longitude, latdirection, longdirection, + camMake, camModel, camSerialNumber) return (default_latitude, default_longitude, - default_latdirection, default_longdirection) + default_latdirection, default_longdirection, + "", "", 0) diff --git a/media.py b/media.py index ac563ffab..e77eb6bed 100644 --- a/media.py +++ b/media.py @@ -84,10 +84,14 @@ def _spoofMetaData(baseDir: str, nickname: str, domain: str, datetime.datetime.utcnow() - \ datetime.timedelta(minutes=randint(2, 120)) published = currTimeAdjusted.strftime("%Y:%m:%d %H:%M:%S+00:00") - (latitude, longitude, latitudeRef, longitudeRef) = \ + (latitude, longitude, latitudeRef, longitudeRef, + camMake, camModel, camSerialNumber) = \ spoofGeolocation(baseDir, spoofCity, currTimeAdjusted, decoySeed, None) os.system('exiftool -artist="' + nickname + '" ' + + '-Make="' + camMake + '" ' + + '-Model="' + camModel + '" ' + + '-Comment="' + str(camSerialNumber) + '" ' + '-DateTimeOriginal="' + published + '" ' + '-FileModifyDate="' + published + '" ' + '-CreateDate="' + published + '" ' + diff --git a/tests.py b/tests.py index 88d3c2fcd..541eb52af 100644 --- a/tests.py +++ b/tests.py @@ -3688,6 +3688,9 @@ def testSpoofGeolocation() -> None: assert coords[1] <= 118.408 + cityRadius assert coords[2] == 'N' assert coords[3] == 'W' + assert len(coords[4]) > 4 + assert len(coords[5]) > 4 + assert coords[6] > 0 coords = spoofGeolocation('', 'unknown', currTime, decoySeed, citiesList) assert coords[0] >= 51.8744 - cityRadius @@ -3696,6 +3699,9 @@ def testSpoofGeolocation() -> None: assert coords[1] <= 0.368333 + cityRadius assert coords[2] == 'N' assert coords[3] == 'W' + assert len(coords[4]) == 0 + assert len(coords[5]) == 0 + assert coords[6] == 0 kmlStr = '\n' kmlStr += '\n' kmlStr += '\n'