ReSell / app.py
pop47's picture
Upload 5 files (#2)
f81c34b
raw
history blame contribute delete
No virus
5.07 kB
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('<h1 style="color:darkgreen;">R3SELL</h1>', 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('<span style="font-size: 36px;">Modified Image with White Background </span>', 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:])