video_screen / app.py
AlexCool2024's picture
Update app.py
c3906ca verified
raw
history blame
2.83 kB
import streamlit as st
import numpy as np
import cv2
import tempfile
from gradio_client import Client
from PIL import Image
# Инициализация клиента для нового API
client = Client("https://pragnakalp-ocr-image-to-text.hf.space/--replicas/lhzf3/")
result = client.predict(
PaddleOCR, # Literal[PaddleOCR, EasyOCR, KerasOCR] in 'Method' Radio component
https://raw.githubusercontent.com/gradio-app/gradio/main/test/test_files/bus.png, # filepath in 'img' Image component
api_name="/predict"
)
print(result)
# Заголовок приложения
st.title("Video Frame to Image Description")
# Загрузка видеофайла
uploaded_file = st.file_uploader("Upload a video file", type=["mp4", "avi", "mov"])
cap = None # Инициализируем объект cap как None
if uploaded_file is not None:
# Создаем временный файл для хранения видео
tfile = tempfile.NamedTemporaryFile(delete=False)
tfile.write(uploaded_file.read())
# Захват видео
cap = cv2.VideoCapture(tfile.name)
length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
if length > 0:
# Выбор случайного кадра
random_frame = np.random.randint(length)
cap.set(cv2.CAP_PROP_POS_FRAMES, random_frame)
ret, frame = cap.read()
if ret:
# Конвертация кадра OpenCV в PIL Image
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
pil_image = Image.fromarray(frame_rgb)
# Отображение выбранного кадра
st.image(pil_image, caption=f"Random Frame {random_frame}")
# Сохранение изображения в байты
buf = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False)
pil_image.save(buf, format='JPEG')
buf.close()
# Отправка изображения в новый API
try:
result = client.predict(
"PaddleOCR", # Метод для использования
buf.name, # Путь к изображению
api_name="/predict"
)
description = result['data']
st.success(f"Generated Description: {description}")
except Exception as e:
st.error(f"Error: Could not get a response from the model. {str(e)}")
else:
st.error("Error: Could not read a frame from the video.")
else:
st.error("Error: Video file does not contain any frames.")
# Проверяем, был ли cap создан, и только тогда освобождаем ресурсы
if cap is not None:
cap.release()