На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Скрипт на Python при работе выводит сообщения о ошибках
      Здравствуйте.
      Есть скрипт на питоне, который делает:
      - Оформление конспекта в разметку (формат) Notion.
      - Добавление в конспект изображений / скриншотов видео рядом с временными метками тезисов.
      Скрипт работает. Но при работе выводит сообщения о обшибках. На результат не влияет, но хотел бы убрать. Подскажите как сделать (или отредактируйте код)?

      user posted image

      ExpandedWrap disabled
        import cv2
        import requests
        import os
        import re
         
        # Функция для извлечения кадра из видео
        def extract_frame(video_path, timestamp, output_image_path):
            cap = cv2.VideoCapture(video_path)
            if not cap.isOpened():
                raise Exception("Не удалось открыть видеофайл.")
            
            fps = cap.get(cv2.CAP_PROP_FPS)
            frame_number = int(fps * timestamp)
            
            cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
            
            ret, frame = cap.read()
            if ret:
                cv2.imwrite(output_image_path, frame)
                print(f"Изображение сохранено в {output_image_path}")
            else:
                raise Exception("Не удалось извлечь кадр из видео.")
            cap.release()
         
        # Функция для добавления временной метки на изображение (в правый нижний угол)
        def add_timestamp_to_image(image_path, timestamp):
            image = cv2.imread(image_path)
            
            if image is None:
                raise Exception(f"Не удалось загрузить изображение по пути: {image_path}")
            
            # Форматирование временной метки (без миллисекунд)
            formatted_timestamp = "{:02}:{:02}:{:02}".format(int(timestamp // 3600),
                                                             int((timestamp % 3600) // 60),
                                                             int(timestamp % 60))
            
            # Параметры текста
            font = cv2.FONT_HERSHEY_SIMPLEX
            font_scale = 1
            font_color = (0, 0, 0)  # Черный цвет текста
            thickness = 2
            line_type = cv2.LINE_AA
            
            # Позиция текста в правом нижнем углу
            (text_width, text_height), baseline = cv2.getTextSize(formatted_timestamp, font, font_scale, thickness)
            position = (image.shape[1] - text_width - 10, image.shape[0] - text_height - 10)
            
            # Нанесение текста на изображение
            cv2.putText(image,
                        formatted_timestamp,
                        position,
                        font,
                        font_scale,
                        font_color,
                        thickness,
                        line_type)
            
            # Сохранение изображения с временной меткой
            output_image_with_timestamp = image_path.replace(".jpg", "_with_timestamp.jpg")
            cv2.imwrite(output_image_with_timestamp, image)
            
            return output_image_with_timestamp
         
        # Функция для загрузки изображения на Imageban
        def upload_to_imageban(image_path, secret_key):
            url = "https://api.imageban.ru/v1"
            
            headers = {
                'Authorization': f'Bearer {secret_key}'
            }
            
            with open(image_path, 'rb') as image_file:
                files = {'image': image_file}
                response = requests.post(url, headers=headers, files=files)
                
                if response.status_code == 200:
                    data = response.json()
                    if data.get('success'):
                        return data['data']['link']
                    else:
                        raise Exception("Не удалось получить ссылку на изображение.")
                else:
                    raise Exception(f"Ошибка при загрузке изображения: {response.status_code} - {response.text}")
         
        # Функция для преобразования временной метки в секунды
        def time_to_seconds(time_str):
            hours, minutes, seconds_milliseconds = time_str.split(':')
            minutes, seconds_milliseconds = minutes, seconds_milliseconds.replace(',', '.')
            seconds, milliseconds = seconds_milliseconds.split('.')
            
            total_seconds = int(hours) * 3600 + int(minutes) * 60 + float(seconds) + float(milliseconds) / 1000
            return total_seconds
         
        # Текст конспекта
        text = """
         
        <details><summary><strong>1. Введение</strong></summary>
         
        - **Запуск проекта**: Проект официально запущен, инициирующий документ составлен, подписан и опубликован. [00:00:00,000 --> 00:00:08,099]
        - **Назначение руководителя проекта**: Если вас назначили руководителем проекта, вам нужно принять эту роль и ответственность. [00:00:08,099 --> 00:00:13,140]
         
        </details>
         
        <details><summary><strong>2. Принятие ответственности</strong></summary>
         
        - **Роль руководителя проекта**: Теперь вы несете ответственность за весь проект. Важно осознать это и начать предпринимать конкретные действия по управлению проектом. [00:00:14,119 --> 00:00:20,980]
         
        - **Действия руководителя**:
          - Определение круга заинтересованных лиц проекта. [00:00:20,980 --> 00:00:29,199]
         
        </details>
         
        <details><summary><strong>3. Определение заинтересованных лиц</strong></summary>
         
        - **Кто такие заинтересованные лица?**:
          1. **Люди или организации, которые могут повлиять на результаты проекта или на проект в целом**.
          2. **Люди или организации, на кого результаты проекта или сам проект могут повлиять**.
          3. **Те, кто считает, что проект или его результаты могут на них повлиять**. [00:00:29,199 --> 00:01:09,599]
         
        - **Пример: Проект "Свадьба"**:
          - Заинтересованные лица: жених, невеста, родители жениха и невесты. [00:01:18,459 --> 00:01:32,459]
         
        - **Задачи руководителя проекта**:
          1. Встретиться с заинтересованными лицами и выяснить возможный круг всех заинтересованных сторон проекта. [00:01:38,900 --> 00:01:48,359]
          2. В результате встречи можно выявить дополнительные заинтересованные стороны:
             - Начальники жениха и невесты.
             - Про бабушка жениха.
             - Компания по прокату свадебных лимузинов.
             - ЗАГС. [00:01:48,359 --> 00:02:39,520]
         
        </details>
         
        <details><summary><strong>4. Ключевые заинтересованные стороны в компании</strong></summary>
         
        - **Основные заинтересованные стороны проекта в организации**:
          1. Руководитель проекта.
          2. Куратор проекта.
          3. Заказчик проекта.
          4. Проектный офис.
          5. Команда проекта.
          6. Команда управления проектом. [00:02:39,520 --> 00:03:07,960]
         
        - **Значение влияния**:
          - Влияние заинтересованных сторон на достижение результатов проекта.
          - Определение требований заинтересованных сторон для нивелирования их негативного влияния на успешность проекта. [00:03:07,960 --> 00:03:34,200]
         
        </details>
         
        <details><summary><strong>5. Широкий круг заинтересованных сторон</strong></summary>
         
        - **Дополнительные заинтересованные стороны**:
          - Пользователи продукта.
          - Конкуренты.
          - Управляющий комитет проекта. [00:04:00,259 --> 00:04:26,519]
         
        - **Итог**: Список заинтересованных сторон можно увидеть на соответствующем слайде. [00:04:23,899 --> 00:04:26,519]
         
        </details>
         
        """
         
        # Регулярное выражение для извлечения временных меток
        pattern = r'\[(\d{2}:\d{2}:\d{2},\d{3}) --> (\d{2}:\d{2}:\d{2},\d{3})\]'
        matches = re.findall(pattern, text)
         
        # Создаем словарь временных меток и файлов изображений
        timestamps = {}
        image_counter = 1
        for start, end in matches:
            timestamp = f"{start} --> {end}"
            image_filename = f"image{image_counter}.jpg"
            timestamps[timestamp] = image_filename
            image_counter += 1
         
        # Путь к папке для сохранения изображений
        image_folder = '/content/images/'
        os.makedirs(image_folder, exist_ok=True)
         
        # Задаем параметры
        video_path = '/content/drive/My Drive/Google Colaboratory/Файлы для Whisper AI/1.4.1.1 Инициация проекта. Модуль Определение заинтересованных сторон проекта.mp4'
        secret_key = '2tNBojRYkW4Nbj588bZr8ZPGmY9dM7vUvY0'
         
        # Извлечение кадров, добавление меток и загрузка на Imageban
        image_links = {}
        for timestamp, image_filename in timestamps.items():
            try:
                start_time_str = timestamp.split(' --> ')[0]
                total_seconds = time_to_seconds(start_time_str)
                
                image_path = os.path.join(image_folder, image_filename)
                extract_frame(video_path, total_seconds, image_path)
                image_with_timestamp = add_timestamp_to_image(image_path, total_seconds)
                image_link = upload_to_imageban(image_with_timestamp, secret_key)
                image_links[timestamp] = image_link
                
                # Отображение изображения с временной меткой
                img = cv2.imread(image_with_timestamp)
                cv2.imshow(f"Image with Timestamp: {timestamp}", img)
                cv2.waitKey(0)
                cv2.destroyAllWindows()
                
            except Exception as e:
                print(f"Ошибка для временной метки {timestamp}: {e}")
         
        # Замена временных меток на ссылки в тексте
        for timestamp, link in image_links.items():
            formatted_link = f"[{timestamp}] ![{timestamp}]({link})"
            text = text.replace(f"[{timestamp}]", formatted_link)
         
        print("Обновленный текст с ссылками на изображения:")
        print(text)
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0197 ]   [ 15 queries used ]   [ Generated: 11.12.24, 06:44 GMT ]