File size: 2,287 Bytes
ae0ae97
1b2c149
254e461
 
801db1d
254e461
801db1d
254e461
801db1d
 
fd8d179
801db1d
d688d11
 
 
 
 
 
 
801db1d
 
 
a312e49
 
 
fd8d179
801db1d
d688d11
 
 
 
fd8d179
d688d11
fd8d179
d688d11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5f0d2f
 
 
801db1d
9cefacb
b5f0d2f
801db1d
b5f0d2f
ae0ae97
b5f0d2f
 
 
 
 
 
 
5a003d2
d688d11
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import streamlit as st
from PIL import Image
import numpy as np

import open_clip

#from transformers import CLIPProcessor, CLIPModel

knnpath = '20241204-ams-no-env-open_clip_ViT-H-14-378-quickgelu.npz'
clip_model_name = 'ViT-H-14-378-quickgelu'
pretrained_name = 'dfn5b'


# Set page config
st.set_page_config(
    page_title="Percept",
    layout="wide"
)

#model, preprocess = open_clip.create_model_from_pretrained('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')
#tokenizer = open_clip.get_tokenizer('hf-hub:laion/CLIP-ViT-g-14-laion2B-s12B-b42K')

#model, preprocess = open_clip.create_model_from_pretrained(clip_model_name)
#tokenizer = open_clip.get_tokenizer(clip_model_name)

#st.write("Available models:", open_clip.list_models())

@st.cache_resource
def load_model():
    """Load the OpenCLIP model and return model and processor"""
    model, _, preprocess = open_clip.create_model_and_transforms(
        clip_model_name, pretrained=pretrained_name
    )
    tokenizer = open_clip.get_tokenizer(clip_model_name)
    return model, preprocess, tokenizer

def process_image(image, preprocess):
    """Process image and return tensor"""
    if isinstance(image, str):
        # If image is a URL
        response = requests.get(image)
        image = Image.open(BytesIO(response.content))
    # Ensure image is in RGB mode
    if image.mode != 'RGB':
        image = image.convert('RGB')
    processed_image = preprocess(image).unsqueeze(0)
    return processed_image

def main():
    st.title("OpenCLIP Image Analyzer (ViT-H-14)")
    
    try:
        # Load model (uses st.cache_resource)
        with st.spinner('Loading model... This may take a moment.'):
            model, preprocess, tokenizer = load_model()
    except Exception as e:
        st.error(f"Error loading model: {str(e)}")
        st.info("Please make sure you have enough memory and the correct dependencies installed.")

    knn = np.load(knnpath)
    st.write(knn['walkability_vecs'].shape)

    file = st.file_uploader('Upload An Image')

    if file:
        try:
            with Image.open(file) as img:
                st.write(file)
                st.write(img.size)
        except Exception as e:
            st.error(f"Error processing image: {str(e)}")

if __name__ == "__main__":
    main()