import json import os import sys import boto3 from botocore.config import Config import getpass import streamlit as st from opensearchpy import OpenSearch, RequestsHttpConnection rekog_client = boto3.client('rekognition',aws_access_key_id=st.secrets['user_access_key'], aws_secret_access_key=st.secrets['user_secret_key'],region_name='us-east-1') def extract_image_metadata(img): res = rekog_client.detect_labels( Features= [ "GENERAL_LABELS","IMAGE_PROPERTIES" ], Image = { "Bytes":img }, MaxLabels = 10, MinConfidence = 80.0, Settings = { # "GeneralLabels": { # "LabelCategoryExclusionFilters": [ "string" ], # "LabelCategoryInclusionFilters": [ "string" ], # "LabelExclusionFilters": [ "string" ], # "LabelInclusionFilters": [ "string" ] # }, "ImageProperties": { "MaxDominantColors": 5 } } ) objects_category_color = {} objects_category_color_masked = {} def add_span(x,type): if(type == 'obj'): return ""+x+"" if(type == 'cat'): return ""+x+"" if(type == 'color'): return ""+x+"" for label in res['Labels']: objects_category_color_masked[add_span(label['Name'],'obj')]={'categories':[],'color':""} objects_category_color[label['Name']] = {'categories':[],'color':""} if(len(label['Categories'])!=0): for category in label['Categories']: objects_category_color_masked[add_span(label['Name'],'obj')]['categories'].append(add_span(category['Name'].lower(),'cat')) objects_category_color[label['Name']]['categories'].append(category['Name'].lower()) if(len(label['Instances'])!=0): for instance in label['Instances']: if(len(instance['DominantColors'])!=0): objects_category_color[label['Name']]['color'] = instance['DominantColors'][0]['SimplifiedColor'] objects_category_color_masked[""+label['Name']+""]['color'] = add_span(instance['DominantColors'][0]['SimplifiedColor'],'color') st.session_state.input_rekog_directoutput = objects_category_color_masked objects = [] categories = [] colors = [] for key in objects_category_color.keys(): if(key.lower() not in objects): objects.append(key.lower()) categories.append(" ".join(set(objects_category_color[key]['categories']))) if(objects_category_color[key]['color']!=''): colors.append(objects_category_color[key]['color'].lower()) objects = " ".join(set(objects)) categories = " ".join(set(categories)) colors = " ".join(set(colors)) print("^^^^^^^^^^^^^^^^^^") print(colors+ " " + objects + " " + categories) return colors+ " " + objects + " " + categories def call(a,b): print("'''''''''''''''''''''''") print(b) if(st.session_state.input_is_rewrite_query == 'enabled' and st.session_state.input_rewritten_query!=""): #st.session_state.input_rewritten_query['query']['bool']['should'].pop() st.session_state.input_rewritten_query['query']['bool']['should'].append( { "simple_query_string": { "query": a + " " + b, "fields":['description','rekog_all^3'] } }) rekog_query = st.session_state.input_rewritten_query else: rekog_query = { "query":{ "simple_query_string": { "query": a + " " + b, "fields":['description','rekog_all^3'] } } } st.session_state.input_rewritten_query = rekog_query # response = aos_client.search( # body = rekog_query, # index = 'demo-retail-rekognition' # #pipeline = 'RAG-Search-Pipeline' # ) # hits = response['hits']['hits'] # print("rewrite-------------------------") # arr = [] # for doc in hits: # # if('b5/b5319e00' in doc['_source']['image_s3_url'] ): # # filter_out +=1 # # continue # res_ = {"desc":doc['_source']['text'].replace(doc['_source']['metadata']['rekog_all']," ^^^ " +doc['_source']['metadata']['rekog_all']), # "image_url":doc['_source']['metadata']['image_s3_url']} # if('highlight' in doc): # res_['highlight'] = doc['highlight']['text'] # # if('caption_embedding' in doc['_source']): # # res_['sparse'] = doc['_source']['caption_embedding'] # # if('query_sparse' in response_ and len(arr) ==0 ): # # res_['query_sparse'] = response_["query_sparse"] # res_['id'] = doc['_id'] # res_['score'] = doc['_score'] # res_['title'] = doc['_source']['text'] # res_['rekog'] = {'color':doc['_source']['metadata']['rekog_color'],'category': doc['_source']['metadata']['rekog_categories'],'objects':doc['_source']['metadata']['rekog_objects']} # arr.append(res_) # return arr