1616(http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/visual-recognition/)
1717"""
1818import json
19+ import mimetypes
20+
1921from .watson_developer_cloud_service import WatsonDeveloperCloudService
2022
2123
@@ -81,6 +83,20 @@ def create_classifier(self, name, **kwargs):
8183 return self .request (method = 'POST' , url = '/v3/classifiers' , files = kwargs , data = data , params = params ,
8284 accept_json = True )
8385
86+ def _image_call (self , url , images_file = None , images_url = None , params = None ):
87+ if images_file is None and images_url is None :
88+ raise AssertionError ('You must specify either a file or a url' )
89+
90+ if images_url :
91+ params ['url' ] = images_url
92+ return self .request (method = 'GET' , url = url , params = params , accept_json = True )
93+ else :
94+ filename = images_file .name
95+ mime_type = mimetypes .guess_type (filename )[0 ] or 'application/octet-stream'
96+ return self .request (method = 'POST' , url = url ,
97+ files = {'images_file' : (filename , images_file , mime_type )}, params = params ,
98+ accept_json = True )
99+
84100 def classify (self , images_file = None , images_url = None , classifier_ids = None , owners = None , threshold = None ):
85101 """
86102 Returns a list of classification scores for one or more input images.
@@ -94,17 +110,8 @@ def classify(self, images_file=None, images_url=None, classifier_ids=None, owner
94110 if classifier_ids :
95111 classifier_ids = '{"classifier_ids": ' + classifier_ids + '}'
96112
97- if images_file is None and images_url is None :
98- raise AssertionError ('You must specify either a file or a url' )
99-
100113 params = {'version' : self .version , 'classifier_ids' : classifier_ids , 'owners' : owners , 'threshold' : threshold }
101- # Params sent as url parameters here
102- if images_url :
103- params ['url' ] = images_url
104- return self .request (method = 'GET' , url = '/v3/classify' , params = params , accept_json = True )
105- else :
106- return self .request (method = 'POST' , url = '/v3/classify' , files = {'images_file' : images_file }, params = params ,
107- accept_json = True )
114+ return self ._image_call ('/v3/classify' , images_file , images_url , params )
108115
109116 def detect_faces (self , images_file = None , images_url = None ):
110117 """
@@ -114,13 +121,7 @@ def detect_faces(self, images_file=None, images_url=None):
114121 """
115122
116123 params = {'version' : self .version }
117- # Params sent as url parameters here
118- if images_url :
119- params ['url' ] = images_url
120- return self .request (method = 'GET' , url = '/v3/detect_faces' , params = params , accept_json = True )
121- else :
122- return self .request (method = 'POST' , url = '/v3/detect_faces' , files = {'images_file' : images_file },
123- params = params , accept_json = True )
124+ return self ._image_call ('/v3/detect_faces' , images_file , images_url , params )
124125
125126 def recognize_text (self , images_file = None , images_url = None ):
126127 """
@@ -130,10 +131,4 @@ def recognize_text(self, images_file=None, images_url=None):
130131 """
131132
132133 params = {'version' : self .version }
133- # Params sent as url parameters here
134- if images_url :
135- params ['url' ] = images_url
136- return self .request (method = 'GET' , url = '/v3/recognize_text' , params = params , accept_json = True )
137- else :
138- return self .request (method = 'POST' , url = '/v3/recognize_text' ,
139- files = {'images_file' : images_file }, params = params , accept_json = True )
134+ return self ._image_call ('/v3/recognize_text' , images_file , images_url , params )
0 commit comments