def get_similar_products_file( project_id, location, product_set_id, product_category, file_path, filter): """Search similar products to image. Args: project_id: Id of the project. location: A compute region name. product_set_id: Id of the product set. product_category: Category of the product. file_path: Local file path of the image to be searched. filter: Condition to be applied on the labels. Example for filter: (color = red OR color = blue) AND style = kids It will search on all products with the following labels: color:red AND style:kids color:blue AND style:kids """ # product_search_client is needed only for its helper methods. product_search_client = vision.ProductSearchClient() image_annotator_client = vision.ImageAnnotatorClient() # Read the image as a stream of bytes. with open(file_path, 'rb') as image_file: content = image_file.read() # Create annotate image request along with product search feature. image = vision.Image(content=content) # product search specific parameters product_set_path = product_search_client.product_set_path( project=project_id, location=location, product_set=product_set_id) product_search_params = vision.ProductSearchParams( product_set=product_set_path, product_categories=[product_category], filter=filter) image_context = vision.ImageContext( product_search_params=product_search_params) # Search products similar to the image. response = image_annotator_client.product_search( image, image_context=image_context) index_time = response.product_search_results.index_time print('Product set index time: ') print(index_time) results = response.product_search_results.results print('Search results:') for result in results: product = result.product print('Score(Confidence): {}'.format(result.score)) print('Image name: {}'.format(result.image)) print('Product name: {}'.format(product.name)) print('Product display name: {}'.format( product.display_name)) print('Product description: {}\n'.format(product.description)) print('Product labels: {}\n'.format(product.product_labels))
def get_similar_products_uri(project_id, location, product_set_id, product_category, image_uri, filter): """Search similar products to image. Args: project_id: Id of the project. location: A compute region name. product_set_id: Id of the product set. product_category: Category of the product. image_uri: Cloud Storage location of image to be searched. filter: Condition to be applied on the labels. Example for filter: (color = red OR color = blue) AND style = kids It will search on all products with the following labels: color:red AND style:kids color:blue AND style:kids """ # product_search_client is needed only for its helper methods. product_search_client = vision.ProductSearchClient() image_annotator_client = vision.ImageAnnotatorClient() # Create annotate image request along with product search feature. image_source = vision.ImageSource(image_uri=image_uri) image = vision.Image(source=image_source) # product search specific parameters product_set_path = product_search_client.product_set_path( project=project_id, location=location, product_set=product_set_id) product_search_params = vision.ProductSearchParams( product_set=product_set_path, product_categories=[product_category], filter=filter) image_context = vision.ImageContext( product_search_params=product_search_params) # Search products similar to the image. response = image_annotator_client.product_search( image, image_context=image_context) index_time = response.product_search_results.index_time print('Product set index time: ') print(index_time) results = response.product_search_results.results print('Search results:') output = [] for result in results: product = result.product print('Score(Confidence): {}'.format(result.score)) product_id = product.name.split('/')[-1] image_uri = get_reference_image_uri(PROJECT_ID, LOCATION_ID, product_id) blob_name = image_uri.split('/')[-1] meta = get_image_metadata(IMAGE_BUCKET, blob_name) print("Product Info: ", meta) output.append(meta) return output
def get_similar_products_file(project_id, location, product_set_id, product_category, base_64, filter): """Search similar products to image. Args: project_id: Id of the project. location: A compute region name. product_set_id: Id of the product set. product_category: Category of the product. file_path: Local file path of the image to be searched. filter: Condition to be applied on the labels. Example for filter: (color = red OR color = blue) AND style = kids It will search on all products with the following labels: color:red AND style:kids color:blue AND style:kids """ # product_search_client is needed only for its helper methods. product_search_client = vision.ProductSearchClient() image_annotator_client = vision.ImageAnnotatorClient() # Read the image as a stream of bytes. # with open(file_path, 'rb') as image_file: # content = image_file.read() content = base64.b64decode(base_64) # Create annotate image request along with product search feature. image = vision.Image(content=content) # product search specific parameters product_set_path = product_search_client.product_set_path( project=project_id, location=location, product_set=product_set_id) product_search_params = vision.ProductSearchParams( product_set=product_set_path, product_categories=[product_category], filter=filter) image_context = vision.ImageContext( product_search_params=product_search_params) # Search products similar to the image. features = {"features": {"type": "LABEL_DETECTION", "maxResults": 1}} print('hello') response = image_annotator_client.product_search( image, image_context=image_context) index_time = response.product_search_results.index_time print('Product set index time: ') print(index_time) results = response.product_search_results.results jsonible = [] # print('Search results:') for result in results: product = result.product info_dict = {} info_dict['score'] = str(result.score) info_dict['imageName'] = str(result.image) print(result) info_dict['productName'] = str(product.name) info_dict['productDisplayName'] = str(product.display_name) info_dict['productDescription'] = str(product.description) product_labels_dict = {} for key_value in str(product.product_labels).split(','): key_values = key_value.replace('"', '').replace('[', '').replace( ']', '').replace('\n', ',').split(',') keys = key_values[0] values = key_values[1] key = keys.split(':')[1].strip() product_labels_dict[key] = values.split(':')[1].strip() info_dict['productLabels'] = product_labels_dict jsonible.append(info_dict) # # print('Score(Confidence): {}'.format(result.score)) # # print('Image name: {}'.format(result.image)) # # print('Product name: {}'.format(product.name)) # # print('Product display name: {}'.format( # # product.display_name)) # # print('Product description: {}\n'.format(product.description)) # # print('Product labels: {}\n'.format(product.product_labels)) return jsonible