import streamlit as st from transformers import pipeline from PIL import Image from rembg import remove from io import BytesIO from ebay import search_ebay_sold_items from llava import get_quality from os.path import abspath import os from anthropic import Anthropic, HUMAN_PROMPT, AI_PROMPT import re def convert_string_to_dict(data_string): pairs = re.findall(r'"([^"]+)"\s*:\s*"([^"]*)"', data_string) data_dictionary = dict(pairs) return data_dictionary def improving_picture(file_name): image = file_name.getvalue() new_image = remove(image, alpha_matting=True) return new_image def add_white_background_to_image_bytes(modified_image_bytes): # Convert bytes to PIL Image modified_image = Image.open(BytesIO(modified_image_bytes)) # Create a new image with a white background of the same size as the modified image new_image = Image.new("RGB", modified_image.size, "white") # Paste the modified image onto the white background new_image.paste(modified_image, (0, 0), modified_image) # Convert the new image to bytes output_image_bytes = BytesIO() new_image.save(output_image_bytes, format='PNG') # Change format if needed return output_image_bytes.getvalue() def find_brackets_indices(s): first_open_bracket = s.find("{") if first_open_bracket != -1: second_last_close_bracket = s.rfind("}", first_open_bracket + 1, len(s) - 1) return first_open_bracket, second_last_close_bracket else: return -1, -1 # Return -1 if "{" is not found #pipeline = pipeline(task="image-classification", model="julien-c/hotdog-not-hotdog") # Set the title and text color to dark green st.markdown('

R3SELL

', unsafe_allow_html=True) # Create a file input option for uploading an image file_name = st.file_uploader("Upload an image file (JPEG, PNG, etc.)", type=["png", "jpg", "jpeg"]) # Create a camera input widget to capture images from the webcam image = st.camera_input("Capture an image from your webcam") # Add a text bar to add a title image_title = st.text_input("Image Title") price = 'Prices: ' if image_title != '': price = 'Prices: ' + str(search_ebay_sold_items(image_title)) st.write(price) else: st.write(price) # Add a text bar to add a description #mage_description = st.text_input("Image Description", value="(Optional)") if file_name is not None or image is not None: # Check if the image is a webcam image if file_name == 'webcam_image.jpg': # Use the Base64 encoded image image = Image.open('data:image/jpeg;base64,' + img_encoded) else: # Open the uploaded image image = Image.open(file_name) nameFile = file_name.name def save_uploaded_image_locally(uploaded_file): if uploaded_file is not None: file_path = os.path.join(".", uploaded_file.name) with open(file_path, "wb") as f: f.write(uploaded_file.getbuffer()) save_uploaded_image_locally(file_name) st.write('Description: ' + get_quality(abspath(nameFile))[5:]) st.write('') st.write('Modified Image with White Background ', unsafe_allow_html=True) image_rem = add_white_background_to_image_bytes(improving_picture(file_name)) st.image(image_rem, use_column_width=True) anthropic = Anthropic( api_key="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", ) name = str(image_title) description = "get_quality(abspath(nameFile))[5:]" output_price = str(price) s = "Name of Product is "+ name +". Min, 1st quartile, median, 3rd quartile, and max of used prices are "+ price +". Assume max is best used quality and min in worst used quality. Color and defects(consider in price and description) - "+description+"(sub color with official colorname). Generate a price given previous which ends in .99. Feel free to search the web. Video should be a product/review video make sure video is real. Generate a product description and the relevant information for an ebay listing. Search the web for additional help and it should be good for the ebay algorithms. Give it as a JSON with these categories Product Name, Price, Condition, Brand, Type, Color, Description, Specifications, Size, Video, Department. Generate Facebook and Instagram ads with hashtags and other stuff to boost algorithm. " promp = "\n\nHuman ${userQuestion}\n\nAssistant:" completion = anthropic.completions.create( model="claude-2", max_tokens_to_sample=1000, prompt=f"{HUMAN_PROMPT} "+s+f" {AI_PROMPT}", ) first_index, second_to_last_index = find_brackets_indices(completion.completion) string_data = completion.completion[first_index:second_to_last_index + 1] print(list(convert_string_to_dict(string_data).values())) for key, value in convert_string_to_dict(string_data).items(): st.write(f'{key}: {value}') st.write(completion.completion[second_to_last_index + 1:])