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("Не удалось извлечь кадр из видео.")