Created
June 26, 2018 04:36
-
-
Save obiyann/b8cf6a233b3523a492c3e5db79ad6019 to your computer and use it in GitHub Desktop.
Zenko Machinebox.io tagbox integration - teach
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/python | |
# Yannick Guillerm - Sales Engineer Scality | |
# yannick.guillerm@scality.com | |
# Zenko MachineBox.ai TagBox integration TEACH | |
# Description: uoloads several set of files to Zenko S3. Runs Machinebox.io TagBox TEACH to tag images with specific tag. | |
# 05/25/18 | |
import requests | |
import sys, getopt | |
import argparse | |
import os | |
import shutil | |
import ntpath | |
import json | |
from pprint import pprint | |
import subprocess | |
watermelons = ["/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM1.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM2.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM3.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM4.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM5.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM6.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM7.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM8.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM9.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM10.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM11.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM12.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM13.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM14.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Watermelon/WM15.jpeg"] | |
cantaloupes = ["/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM1.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM2.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM3.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM4.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM5.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM6.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM7.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM8.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM9.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM10.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM11.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM12.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM13.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM14.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Cantaloupe/CM15.jpeg"] | |
honeydews = ["/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM1.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM2.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM3.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM4.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM5.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM6.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM7.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM8.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM9.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM10.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM11.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM12.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM13.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM14.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Honeydew/HM15.jpeg"] | |
x-wing = ["/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing1.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing2.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing3.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing4.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing5.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing6.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing7.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/X-Wing/X-Wing8.jpeg"] | |
ywing = ["/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing1.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing2.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing3.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing4.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing5.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing6.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing7.jpeg", | |
"/Users/yannickguillerm/Desktop/TechMarketing/Zenko/Y-Wing/Y-Wing8.jpeg"] | |
def teach(category, label, zenkoendpoint, zenkobucket): | |
print "Teaching %s ..." % label | |
for element in category: | |
filepath = element | |
filename = ntpath.basename(filepath) | |
# Upload file | |
print "Uploading file to Zenko ..." | |
command = 'aws --endpoint-url https://' + zenkoendpoint + ':443 s3api put-object --bucket ' + zenkobucket + ' --key ' + filename + ' --body ' + filepath | |
print command | |
os.system(command) | |
# Grant public read access | |
print "Granting public access ..." | |
Command = 'aws --endpoint-url https://' + zenkoendpoint + ':443 s3api put-object-acl --bucket ' + zenkobucket + ' --key ' + filename + ' --acl public-read' | |
print Command | |
os.system(Command) | |
# Teach with machinebox | |
print "MachineBox Teaching ..." | |
filepath = element | |
filename = ntpath.basename(filepath) | |
command = 'curl -H \'Content-Type: application/json\' -d \'{"url":"https://' + zenkoendpoint + '/' + zenkobucket + '/' + filename + '","tag":"' + label +'","id":"' + filename + '"}\' http://localhost:8080/tagbox/teach' | |
print command | |
result = subprocess.check_output(command, shell=True) | |
print result | |
json_res = json.loads(result) | |
json_str = json.dumps(json_res) | |
tagset_str = 'TagSet=[' | |
# Tag object | |
if 'tags' in json_res: | |
if len(json_res["tags"]) != 0: | |
i=0 | |
while i<len(json_res["tags"]): | |
print json_res["tags"][i]["tag"] | |
print json_res["tags"][i]["confidence"] | |
#Command syntax: aws s3api put-bucket-tagging --bucket bucketname --tagging 'TagSet=[{Key=organization,Value=sales}]' | |
tagset_str = tagset_str + '{Key=' + str(json_res["tags"][i]["tag"]) + ',Value=' + str(json_res["tags"][i]["confidence"]) + '}' | |
i=i+1 | |
print tagset_str | |
print "\n" | |
if 'custom_tags' in json_res: | |
if len(json_res["custom_tags"]) != 0: | |
j=0 | |
while j<len(json_res["custom_tags"]): | |
print json_res["custom_tags"][j]["tag"] | |
print json_res["custom_tags"][j]["confidence"] | |
#Command syntax: aws s3api put-bucket-tagging --bucket bucketname --tagging 'TagSet=[{Key=organization,Value=sales}]' | |
tagset_str = tagset_str + '{Key=' + str(json_res["custom_tags"][j]["tag"]) + ',Value=' + str(json_res["custom_tags"][j]["confidence"]) + '}' | |
j=j+1 | |
print tagset_str | |
print "\n" | |
if 'tags' in json_res or 'custom_tags' in json_res: | |
tagset_str = tagset_str.replace("}{","},{") | |
tagset_str = tagset_str + ']' | |
command = 'aws --endpoint-url https://' + zenkoendpoint + ':443 s3api put-object-tagging --bucket ' + zenkobucket + ' --key ' + filename + ' --tagging ' + '\'' + tagset_str + '\'' | |
print command | |
os.system(command) | |
def main(argv): | |
filepath = "" | |
zenkoset = "none" | |
# Parse arguments. File full path and op (upload/download) | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--endpointurl', help='endpointurl help') | |
parser.add_argument('--bucket', help='bucket help') | |
parser.add_argument('--set', help='set help') | |
args = vars(parser.parse_args()) | |
zenkoendpoint = args['endpointurl'] | |
zenkobucket = args['bucket'] | |
zenkoset = args['set'] | |
if zenkoset != "melons" and zenkoset != "starwars": | |
print "Undefined metadata mode - Must be \"melons\" or \"starwars\"" | |
exit(0) | |
print "MachineBox Teaching ..." | |
if zenkoset == "melons": | |
teach(watermelons, "Watermelon", zenkoendpoint, zenkobucket) | |
teach(cantaloupes, "Cantaloupe", zenkoendpoint, zenkobucket) | |
teach(honeydews, "Honeydew", zenkoendpoint, zenkobucket) | |
elif zenkoset == "starwars": | |
teach(xwing, "x-wing", zenkoendpoint, zenkobucket) | |
teach(ywing, "y-wing", zenkoendpoint, zenkobucket) | |
else: | |
print "Undefined metadata mode - Must be \"melons\" or \"starwars\"" | |
exit(0) | |
if __name__ == "__main__": | |
main(sys.argv[1:]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Use it as follows:
python /Users/yannickguillerm/Desktop/TechMarketing/Zenko/zenkoteach.py --endpointurl c5afccae-78c0-11e8-a153-0242ac110002.sandbox.zenko.io --bucket zenko-local --set starwars