-1

无论如何,我可以使用 Google Cloud Vision 分析 URL。我知道如何分析我在本地存储的图像,但我似乎无法分析互联网上存在的 jpg:

import argparse
import base64
import httplib2
from googleapiclient.discovery import build
import collections
import time
import datetime
import pyodbc

time_start = datetime.datetime.now()

def main(photo_file):
    '''Run a label request on a single image'''

    API_DISCOVERY_FILE = 'https://vision.googleapis.com/$discovery/rest?version=v1'
    http = httplib2.Http()

    service = build('vision', 'v1', http, discoveryServiceUrl=API_DISCOVERY_FILE, developerKey=INSERT API KEY HERE)

    with open(photo_file, 'rb') as image:
        image_content = base64.b64encode(image.read())
        service_request = service.images().annotate(
            body={
                'requests': [{
                    'image': {
                        'content': image_content
                    },
                    'features': [{
                        'type': 'LOGO_DETECTION',
                        'maxResults': 10,
                    }]
                }]
            })
        response = service_request.execute()

        try:
            logo_description = response['responses'][0]['logoAnnotations'][0]['description']
            logo_description_score = response['responses'][0]['logoAnnotations'][0]['score']
            print logo_description
            print logo_description_score 
        except KeyError:
            print "logo nonexistent" 
            pass

        print time_start

if __name__ == '__main__':
    main("C:\Users\KVadher\Desktop\image_file1.jpg")

无论如何我可以分析一个 URL 并得到关于其中是否有任何徽标的答案?

4

2 回答 2

1

我想出了怎么做。重新编写了我的代码并添加了使用 urllib 打开图像,然后我通过 base64 和谷歌云视觉徽标识别 api 将其传递:

import argparse
import base64
import httplib2
from googleapiclient.discovery import build
import collections
import time
import datetime
import pyodbc
import urllib
import urllib2
time_start = datetime.datetime.now()


#API AND DEVELOPER KEY DETAILS
API_DISCOVERY_FILE = 'https://vision.googleapis.com/$discovery/rest?version=v1'
http = httplib2.Http()
service = build('vision', 'v1', http, discoveryServiceUrl=API_DISCOVERY_FILE, developerKey=INSERT DEVELOPER KEY HERE)

url = "http://www.lcbo.com/content/dam/lcbo/products/218040.jpg/jcr:content/renditions/cq5dam.web.1280.1280.jpeg"
opener = urllib.urlopen(url)

#with open(photo_file) as image:
image_content = base64.b64encode(opener.read())
service_request = service.images().annotate(
    body={
        'requests': [{
            'image': {
                'content': image_content
            },
            'features': [{
                'type': 'LOGO_DETECTION',
                'maxResults': 10,
            }]
        }]
    })
response = service_request.execute()

try:
    logo_description = response['responses'][0]['logoAnnotations'][0]['description']
    logo_description_score = response['responses'][0]['logoAnnotations'][0]['score']
    print logo_description
    print logo_description_score 
except KeyError:
    print "logo nonexistent" 
    pass

    print time_start
于 2016-04-20T13:44:22.457 回答
0

Google Cloud Vision API 允许您指定 base64 格式的图像内容或指向 Google Cloud 存储上文件的链接。看:

https://cloud.google.com/vision/docs/requests-and-responses#json_request_format

这意味着您必须下载代码中的每个图像 url(可能使用 Python 的 urllib2 库)并将其编码为 base64,然后将其添加到 service_request。

于 2016-04-19T23:27:09.643 回答