Spaces:
Sleeping
Sleeping
import streamlit as st | |
import cv2 | |
import random | |
import numpy as np | |
import requests | |
from PIL import Image | |
# Функция для извлечения случайного кадра из видео | |
def get_random_frame(video_file): | |
# Открываем видео файл | |
cap = cv2.VideoCapture(video_file) | |
# Получаем общее количество кадров | |
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) | |
# Генерируем случайный номер кадра | |
random_frame_number = random.randint(0, total_frames - 1) | |
# Устанавливаем указатель на случайный кадр | |
cap.set(cv2.CAP_PROP_POS_FRAMES, random_frame_number) | |
success, frame = cap.read() | |
# Закрываем видеопоток | |
cap.release() | |
if success: | |
return frame | |
else: | |
return None | |
# Заголовок приложения | |
st.title("Video to Text Converter") | |
# Загрузка видеофайла | |
uploaded_file = st.file_uploader("Загрузите видео файл...", type=["mp4", "avi"]) | |
if uploaded_file is not None: | |
# Извлечение случайного кадра из видео | |
frame = get_random_frame(uploaded_file) | |
if frame is not None: | |
# Отображение извлечённого кадра | |
st.image(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB), caption='Случайный кадр', use_column_width=True) | |
# Сохранение временного изображения для отправки в модель | |
_, buffer = cv2.imencode('.png', frame) | |
image_data = buffer.tobytes() | |
# Обработка изображения с помощью модели | |
if st.button("Преобразовать в текст"): | |
# Здесь должен быть URL вашей модели | |
model_url = "https://api-inference.huggingface.co/models/nttdataspain/Image-To-Text-Lora-ViT" | |
headers = {"Authorization": "Bearer YOUR_HUGGINGFACE_API_TOKEN"} # Замените на ваш токен | |
# Отправка запроса к модели | |
response = requests.post( | |
model_url, | |
headers=headers, | |
files={"file": image_data} | |
) | |
if response.status_code == 200: | |
# Отображаем сгенерированный текст | |
output_text = response.json().get("generated_text") | |
st.success(output_text) | |
else: | |
st.error("Ошибка при обработке изображения!") | |
else: | |
st.error("Не удалось извлечь кадр из видео.") |