Prathamesh1420's picture
Create app.py
54e76cb verified
raw
history blame
2.27 kB
import streamlit as st
import cv2
import tempfile
import os
import numpy as np
from ultralytics import YOLO
from PIL import Image
def process_video(video_path, model):
cap = cv2.VideoCapture(video_path)
temp_output = tempfile.NamedTemporaryFile(delete=False, suffix='.mp4')
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(temp_output.name, fourcc, cap.get(cv2.CAP_PROP_FPS),
(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame)
for result in results:
for box in result.boxes:
x1, y1, x2, y2 = map(int, box.xyxy[0])
label = result.names[int(box.cls[0])]
conf = float(box.conf[0])
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, f'{label}: {conf:.2f}', (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
out.write(frame)
cap.release()
out.release()
return temp_output.name
def main():
st.set_page_config(page_title="Bottle Label Checker", page_icon="๐Ÿพ")
st.title("Bottle Label Checking System using YOLO & Gemini")
uploaded_video = st.file_uploader("Upload a video", type=["mp4", "avi", "mov", "mkv"])
if uploaded_video is not None:
temp_video_path = os.path.join(tempfile.gettempdir(), uploaded_video.name)
with open(temp_video_path, "wb") as f:
f.write(uploaded_video.read())
st.video(temp_video_path)
model = YOLO("yolov8n.pt") # Load YOLO model
if st.button("Process Video"):
st.write("Processing video... This may take some time.")
output_path = process_video(temp_video_path, model)
st.video(output_path)
st.success("Processing complete!")
with open(output_path, "rb") as file:
st.download_button("Download Processed Video", file, file_name="processed_video.mp4", mime="video/mp4")
if __name__ == "__main__":
main()