File size: 3,635 Bytes
0dcc24a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9a61fc5
0dcc24a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cedc74a
 
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import streamlit as st
import cv2
from PIL import Image
import os
import requests
from io import BytesIO
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

# Your Google API Key from the .env file
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")

st.set_page_config(page_title="Insightly")
st.sidebar.image("https://i.ibb.co/bX6GdqG/insightly-wbg.png", use_column_width=True)
st.title("Frame Capturer ๐Ÿ“ธ")
uploaded_video = st.file_uploader("Choose video", type=["mp4", "mov"])
frame_skip = 150  # display every 150 frames

# Add custom CSS to increase space between images
st.markdown(
    """
    <style>
    .image-container {
        margin-bottom: 60px;
    }
    .sidebar-link {
        display: flex;
        justify-content: left;
        font-size: 30px;
        margin-top: 20px;
    }
    </style>
    """,
    unsafe_allow_html=True,
)

# Function to perform reverse image search using the Google API
def reverse_image_search(image_bytes):
    url = "https://www.googleapis.com/customsearch/v1"
    params = {
        "key": GOOGLE_API_KEY,
        "cx": "015419011015122782581:_3y6h7e8b9q",
        "q": "image",
        "searchType": "image",
        "imgSize": "large",
        "num": 5,
    }

    response = requests.post(url, params=params, files={"file": image_bytes})
    if response.ok:
        data = response.json()
        return data.get("items", [])
    else:
        return []

if uploaded_video is not None:  # run only when the user uploads a video
    vid = uploaded_video.name
    with open(vid, mode='wb') as f:
        f.write(uploaded_video.read())  # save video to disk

    st.markdown(f"""
    ### Files
    - {vid}
    """,
                unsafe_allow_html=True)  # display file name

    vidcap = cv2.VideoCapture(vid)  # load video from disk
    cur_frame = 0
    success = True

    while success:
        success, frame = vidcap.read()  # get the next frame from the video
        if cur_frame % frame_skip == 0:  # only analyze every n=300 frames
            print('frame: {}'.format(cur_frame))
            frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # convert BGR to RGB
            pil_img = Image.fromarray(frame_rgb)  # convert the OpenCV frame (with type()==numpy) into PIL Image

            # Add custom class to the image container for applying CSS
            st.image(pil_img, channels='RGB', use_column_width=True, caption=f"Frame {cur_frame}")

            # Get the bytes of the current image
            image_bytes = BytesIO()
            pil_img.save(image_bytes, format="JPEG")

            if st.button("Reverse Image Search", key=f"search_{cur_frame}"):
                results = reverse_image_search(image_bytes.getvalue())
                if results:
                    st.markdown("### Reverse Image Search Results:")
                    for result in results:
                        st.image(result["link"], use_column_width=True, caption=result["title"])

            st.markdown(
                """
                <div class="image-container"></div>
                """,
                unsafe_allow_html=True,
            )

        cur_frame += 1

# Add link to the sidebar
st.sidebar.markdown("<p class='sidebar-link'>๐Ÿ“ˆ  <a href='https://insightly-csv-bot.hf.space/'>  CSV Bot</a></p>", unsafe_allow_html=True)
st.sidebar.markdown("<p class='sidebar-link'>๐Ÿ“š  <a href='https://chandrakalagowda-demo2.hf.space/'>  PDF Bot </a></p>", unsafe_allow_html=True)
st.sidebar.markdown("<p class='sidebar-link'>๐Ÿ–ผ๏ธ  <a href='https://insightly-image-reader.hf.space'>  Image Reader</a></p>", unsafe_allow_html=True)