abdullahmubeen10 commited on
Commit
ee37064
·
verified ·
1 Parent(s): 648e778

Upload 65 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .streamlit/config.toml +3 -0
  2. Demo.py +127 -0
  3. Dockerfile +70 -0
  4. inputs/image_classifier_vit_CarViT/image-1.png +0 -0
  5. inputs/image_classifier_vit_CarViT/image-10.png +0 -0
  6. inputs/image_classifier_vit_CarViT/image-2.png +0 -0
  7. inputs/image_classifier_vit_CarViT/image-3.png +0 -0
  8. inputs/image_classifier_vit_CarViT/image-4.png +0 -0
  9. inputs/image_classifier_vit_CarViT/image-5.png +0 -0
  10. inputs/image_classifier_vit_CarViT/image-6.png +0 -0
  11. inputs/image_classifier_vit_CarViT/image-7.png +0 -0
  12. inputs/image_classifier_vit_CarViT/image-8.png +0 -0
  13. inputs/image_classifier_vit_CarViT/image-9.png +0 -0
  14. inputs/image_classifier_vit_base_beans_demo/image-1.png +0 -0
  15. inputs/image_classifier_vit_base_beans_demo/image-10.png +0 -0
  16. inputs/image_classifier_vit_base_beans_demo/image-2.png +0 -0
  17. inputs/image_classifier_vit_base_beans_demo/image-3.png +0 -0
  18. inputs/image_classifier_vit_base_beans_demo/image-4.png +0 -0
  19. inputs/image_classifier_vit_base_beans_demo/image-5.png +0 -0
  20. inputs/image_classifier_vit_base_beans_demo/image-6.png +0 -0
  21. inputs/image_classifier_vit_base_beans_demo/image-7.png +0 -0
  22. inputs/image_classifier_vit_base_beans_demo/image-8.png +0 -0
  23. inputs/image_classifier_vit_base_beans_demo/image-9.png +0 -0
  24. inputs/image_classifier_vit_base_cats_vs_dogs/image-1.png +0 -0
  25. inputs/image_classifier_vit_base_cats_vs_dogs/image-10.png +0 -0
  26. inputs/image_classifier_vit_base_cats_vs_dogs/image-2.png +0 -0
  27. inputs/image_classifier_vit_base_cats_vs_dogs/image-3.png +0 -0
  28. inputs/image_classifier_vit_base_cats_vs_dogs/image-4.png +0 -0
  29. inputs/image_classifier_vit_base_cats_vs_dogs/image-5.png +0 -0
  30. inputs/image_classifier_vit_base_cats_vs_dogs/image-6.png +0 -0
  31. inputs/image_classifier_vit_base_cats_vs_dogs/image-7.png +0 -0
  32. inputs/image_classifier_vit_base_cats_vs_dogs/image-8.png +0 -0
  33. inputs/image_classifier_vit_base_cats_vs_dogs/image-9.png +0 -0
  34. inputs/image_classifier_vit_base_food101/image-1.png +0 -0
  35. inputs/image_classifier_vit_base_food101/image-10.png +0 -0
  36. inputs/image_classifier_vit_base_food101/image-2.png +0 -0
  37. inputs/image_classifier_vit_base_food101/image-3.png +0 -0
  38. inputs/image_classifier_vit_base_food101/image-4.png +0 -0
  39. inputs/image_classifier_vit_base_food101/image-5.png +0 -0
  40. inputs/image_classifier_vit_base_food101/image-6.png +0 -0
  41. inputs/image_classifier_vit_base_food101/image-7.png +0 -0
  42. inputs/image_classifier_vit_base_food101/image-8.png +0 -0
  43. inputs/image_classifier_vit_base_food101/image-9.png +0 -0
  44. inputs/image_classifier_vit_base_patch16_224/image-1.png +0 -0
  45. inputs/image_classifier_vit_base_patch16_224/image-10.png +0 -0
  46. inputs/image_classifier_vit_base_patch16_224/image-11.png +0 -0
  47. inputs/image_classifier_vit_base_patch16_224/image-3.png +0 -0
  48. inputs/image_classifier_vit_base_patch16_224/image-4.png +0 -0
  49. inputs/image_classifier_vit_base_patch16_224/image-5.png +0 -0
  50. inputs/image_classifier_vit_base_patch16_224/image-6.png +0 -0
.streamlit/config.toml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ [theme]
2
+ base="light"
3
+ primaryColor="#29B4E8"
Demo.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import sparknlp
3
+ import os
4
+ import pandas as pd
5
+
6
+ from sparknlp.base import *
7
+ from sparknlp.annotator import *
8
+ from pyspark.ml import Pipeline
9
+ from sparknlp.pretrained import PretrainedPipeline
10
+ from streamlit_tags import st_tags
11
+
12
+ # Page configuration
13
+ st.set_page_config(
14
+ layout="wide",
15
+ initial_sidebar_state="auto"
16
+ )
17
+
18
+ # CSS for styling
19
+ st.markdown("""
20
+ <style>
21
+ .main-title {
22
+ font-size: 36px;
23
+ color: #4A90E2;
24
+ font-weight: bold;
25
+ text-align: center;
26
+ }
27
+ .section {
28
+ background-color: #f9f9f9;
29
+ padding: 10px;
30
+ border-radius: 10px;
31
+ margin-top: 10px;
32
+ }
33
+ .section p, .section ul {
34
+ color: #666666;
35
+ }
36
+ </style>
37
+ """, unsafe_allow_html=True)
38
+
39
+ @st.cache_resource
40
+ def init_spark():
41
+ return sparknlp.start()
42
+
43
+ @st.cache_resource
44
+ def create_pipeline(model):
45
+ image_assembler = ImageAssembler() \
46
+ .setInputCol("image") \
47
+ .setOutputCol("image_assembler")
48
+
49
+ image_classifier = ViTForImageClassification \
50
+ .pretrained(model) \
51
+ .setInputCols("image_assembler") \
52
+ .setOutputCol("class")
53
+
54
+ pipeline = Pipeline(stages=[
55
+ image_assembler,
56
+ image_classifier,
57
+ ])
58
+ return pipeline
59
+
60
+ def fit_data(pipeline, data):
61
+ empty_df = spark.createDataFrame([['']]).toDF('text')
62
+ model = pipeline.fit(empty_df)
63
+ light_pipeline = LightPipeline(model)
64
+ annotations_result = light_pipeline.fullAnnotateImage(data)
65
+ return annotations_result[0]['class'][0].result
66
+
67
+ def save_uploadedfile(uploadedfile):
68
+ filepath = os.path.join(IMAGE_FILE_PATH, uploadedfile.name)
69
+ with open(filepath, "wb") as f:
70
+ if hasattr(uploadedfile, 'getbuffer'):
71
+ f.write(uploadedfile.getbuffer())
72
+ else:
73
+ f.write(uploadedfile.read())
74
+
75
+ # Sidebar content
76
+ model_list = ['image_classifier_vit_base_cats_vs_dogs', 'image_classifier_vit_base_patch16_224', 'image_classifier_vit_CarViT', 'image_classifier_vit_base_beans_demo', 'image_classifier_vit_base_food101', 'image_classifier_vit_base_patch16_224_in21k_finetuned_cifar10']
77
+ model = st.sidebar.selectbox(
78
+ "Choose the pretrained model",
79
+ model_list,
80
+ help="For more info about the models visit: https://sparknlp.org/models"
81
+ )
82
+
83
+ # Set up the page layout
84
+ st.markdown(f'<div class="main-title">ViT for Image Classification</div>', unsafe_allow_html=True)
85
+ # st.markdown(f'<div class="section"><p>{sub_title}</p></div>', unsafe_allow_html=True)
86
+
87
+ # Reference notebook link in sidebar
88
+ link = """
89
+ <a href="https://github.com/JohnSnowLabs/spark-nlp/blob/master/examples/python/annotation/image/ViTForImageClassification.ipynb">
90
+ <img src="https://colab.research.google.com/assets/colab-badge.svg" style="zoom: 1.3" alt="Open In Colab"/>
91
+ </a>
92
+ """
93
+ st.sidebar.markdown('Reference notebook:')
94
+ st.sidebar.markdown(link, unsafe_allow_html=True)
95
+
96
+ # Load examples
97
+ IMAGE_FILE_PATH = f"/content/sparknlp VIT Image Classification/inputs/{model}"
98
+ image_files = sorted([file for file in os.listdir(IMAGE_FILE_PATH) if file.split('.')[-1]=='png' or file.split('.')[-1]=='jpg' or file.split('.')[-1]=='JPEG' or file.split('.')[-1]=='jpeg'])
99
+
100
+ st.subheader("This model identifies image classes using the vision transformer (ViT).")
101
+
102
+ img_options = st.selectbox("Select an image", image_files)
103
+ uploadedfile = st.file_uploader("Try it for yourself!")
104
+
105
+ if uploadedfile:
106
+ file_details = {"FileName":uploadedfile.name,"FileType":uploadedfile.type}
107
+ save_uploadedfile(uploadedfile)
108
+ selected_image = f"{IMAGE_FILE_PATH}/{uploadedfile.name}"
109
+ elif img_options:
110
+ selected_image = f"{IMAGE_FILE_PATH}/{img_options}"
111
+
112
+ st.subheader('Classified Image')
113
+
114
+ image_size = st.slider('Image Size', 400, 1000, value=400, step = 100)
115
+
116
+ try:
117
+ st.image(f"{IMAGE_FILE_PATH}/{selected_image}", width=image_size)
118
+ except:
119
+ st.image(selected_image, width=image_size)
120
+
121
+ st.subheader('Classification')
122
+
123
+ spark = init_spark()
124
+ Pipeline = create_pipeline(model)
125
+ output = fit_data(Pipeline, selected_image)
126
+
127
+ st.markdown(f'This document has been classified as : **{output}**')
Dockerfile ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Download base image ubuntu 18.04
2
+ FROM ubuntu:18.04
3
+
4
+ # Set environment variables
5
+ ENV NB_USER jovyan
6
+ ENV NB_UID 1000
7
+ ENV HOME /home/${NB_USER}
8
+
9
+ # Install required packages
10
+ RUN apt-get update && apt-get install -y \
11
+ tar \
12
+ wget \
13
+ bash \
14
+ rsync \
15
+ gcc \
16
+ libfreetype6-dev \
17
+ libhdf5-serial-dev \
18
+ libpng-dev \
19
+ libzmq3-dev \
20
+ python3 \
21
+ python3-dev \
22
+ python3-pip \
23
+ unzip \
24
+ pkg-config \
25
+ software-properties-common \
26
+ graphviz \
27
+ openjdk-8-jdk \
28
+ ant \
29
+ ca-certificates-java \
30
+ && apt-get clean \
31
+ && update-ca-certificates -f;
32
+
33
+ # Install Python 3.8 and pip
34
+ RUN add-apt-repository ppa:deadsnakes/ppa \
35
+ && apt-get update \
36
+ && apt-get install -y python3.8 python3-pip \
37
+ && apt-get clean;
38
+
39
+ # Set up JAVA_HOME
40
+ ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
41
+ RUN mkdir -p ${HOME} \
42
+ && echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/" >> ${HOME}/.bashrc \
43
+ && chown -R ${NB_UID}:${NB_UID} ${HOME}
44
+
45
+ # Create a new user named "jovyan" with user ID 1000
46
+ RUN useradd -m -u ${NB_UID} ${NB_USER}
47
+
48
+ # Switch to the "jovyan" user
49
+ USER ${NB_USER}
50
+
51
+ # Set home and path variables for the user
52
+ ENV HOME=/home/${NB_USER} \
53
+ PATH=/home/${NB_USER}/.local/bin:$PATH
54
+
55
+ # Set the working directory to the user's home directory
56
+ WORKDIR ${HOME}
57
+
58
+ # Upgrade pip and install Python dependencies
59
+ RUN python3.8 -m pip install --upgrade pip
60
+ COPY requirements.txt /tmp/requirements.txt
61
+ RUN python3.8 -m pip install -r /tmp/requirements.txt
62
+
63
+ # Copy the application code into the container at /home/jovyan
64
+ COPY --chown=${NB_USER}:${NB_USER} . ${HOME}
65
+
66
+ # Expose port for Streamlit
67
+ EXPOSE 7860
68
+
69
+ # Define the entry point for the container
70
+ ENTRYPOINT ["streamlit", "run", "Demo.py", "--server.port=7860", "--server.address=0.0.0.0"]
inputs/image_classifier_vit_CarViT/image-1.png ADDED
inputs/image_classifier_vit_CarViT/image-10.png ADDED
inputs/image_classifier_vit_CarViT/image-2.png ADDED
inputs/image_classifier_vit_CarViT/image-3.png ADDED
inputs/image_classifier_vit_CarViT/image-4.png ADDED
inputs/image_classifier_vit_CarViT/image-5.png ADDED
inputs/image_classifier_vit_CarViT/image-6.png ADDED
inputs/image_classifier_vit_CarViT/image-7.png ADDED
inputs/image_classifier_vit_CarViT/image-8.png ADDED
inputs/image_classifier_vit_CarViT/image-9.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-1.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-10.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-2.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-3.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-4.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-5.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-6.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-7.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-8.png ADDED
inputs/image_classifier_vit_base_beans_demo/image-9.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-1.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-10.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-2.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-3.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-4.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-5.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-6.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-7.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-8.png ADDED
inputs/image_classifier_vit_base_cats_vs_dogs/image-9.png ADDED
inputs/image_classifier_vit_base_food101/image-1.png ADDED
inputs/image_classifier_vit_base_food101/image-10.png ADDED
inputs/image_classifier_vit_base_food101/image-2.png ADDED
inputs/image_classifier_vit_base_food101/image-3.png ADDED
inputs/image_classifier_vit_base_food101/image-4.png ADDED
inputs/image_classifier_vit_base_food101/image-5.png ADDED
inputs/image_classifier_vit_base_food101/image-6.png ADDED
inputs/image_classifier_vit_base_food101/image-7.png ADDED
inputs/image_classifier_vit_base_food101/image-8.png ADDED
inputs/image_classifier_vit_base_food101/image-9.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-1.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-10.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-11.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-3.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-4.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-5.png ADDED
inputs/image_classifier_vit_base_patch16_224/image-6.png ADDED