我正在尝试在Python 2.7中的本地计算机上实现detect_logos功能。
我的功能最初是Google的label.py文件,在here中提供。
我最终编辑了main函数,并在吐出一些标签后调用了detect_logos()。我现在遇到 detect_logos(路径)功能中的以下错误,该行位于 logos = image.detect_logos()“。
TypeError:construct_settings()得到意外的关键字参数'metrics_headers'
此错误显然源于vision api中的immage_annotator_client.py文件。我一定错过了什么。
def detectLabelsLogos(photo_file):
#configurable options: FREE TO CHANGE
resizedFileName = 'clone.jpeg' #name of resized files (are deleted at the end)
labelCount = 5 #max number of labels
#nonconfigurable options: DO NOT TOUCH
resized = False
filename = photo_file
service = googleapiclient.discovery.build('vision', 'v1')
#initial size check
imgSizeInBytes = os.stat(photo_file).st_size
if imgSizeInBytes >= MAX_IMAGE_SIZE_IN_BYTES:
print "\n[Image too large...resizing...]"
resized = True
filename = resizedFileName
with Image.open(photo_file) as image:
newimg = resizeimage.resize_thumbnail(image, [1600, 800])
newimg.save(filename, image.format)
newimg.close()
imgSizeInBytes = os.stat(filename).st_size
#ensure file is not empty
if imgSizeInBytes > 0:
# [START construct_request]
with open(filename, 'rb') as image:
image_content = base64.b64encode(image.read())
service_request = service.images().annotate(body={
'requests': [{
'image': {
'content': image_content.decode('UTF-8')
},
'features': [{
'type': 'LABEL_DETECTION',
'maxResults': labelCount
}]
}]
})
# [END construct_request]
# [START parse_response]
response = service_request.execute()
detect_logos(filename);
for i in range(0, labelCount):
if i >= len(response['responses'][0]['labelAnnotations']):
print "\n[Exhausted Responses]"
break
label = response['responses'][0]['labelAnnotations'][i]['description']
print('\nFound label: %s' % (label))
# [END parse_response]
image.close()
#delete resized file
if resized:
os.remove(filename)
else:
print "[Invalid File Input: Empty File]"
print "\n"
def detect_logos(path):
"""Detects logos in the file."""
vision_client = vision.Client()
print vision_client
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision_client.image(content=content)
logos = image.detect_logos()
print('\nLogos:')
for logo in logos:
print(logo.description)
我一直在做“设置GOOGLE_APPLICATION_CREDENTIALS = / blah / blah / serviceaccountkey.json”
答案 0 :(得分:0)
您可能希望尝试使用Vision API的google.cloud
客户端库。
查看我正在尝试做的想法
的the label detection demo:>>> from google.cloud import vision
>>> client = vision.Client()
>>> image = client.image(source_uri='gs://my-storage-bucket/image.jpg')
>>> labels = image.detect_labels(limit=3)
>>> labels[0].description
'automobile'
>>> labels[0].score
0.9863683
PS:别忘了the authentication step!您需要在Cloud Vision中使用服务帐户(旧的gcloud auth login
将无效)。