Помогите пожалуйста, программа для подсчета

tenashini

Новичок
Пользователь
Мар 21, 2025
5
0
1
Впервые создаю программу для просмотра видео с созданием текстовых файлов для подсчёта.
Ошибок в коде питон не видит, но при запуске ничего не происходит, debug.log пустой. Расскажите пожалуйста где я ошибся. Может логика неверная, а может и вовсе чего-либо не хватает.
 

Вложения

  • car.zip
    12,3 КБ · Просмотры: 1

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
if __name__ == "__main__":
 

tenashini

Новичок
Пользователь
Мар 21, 2025
5
0
1
Можно пожалуйста с объяснением что не так, как для особо одарённых)
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
Можно пожалуйста с объяснением что не так, как для особо одарённых)
ну найди у себя в файле эти строки с сравни как ты записал и как правильно надо, выше показал как. В двух местах они встречаются
 

tenashini

Новичок
Пользователь
Мар 21, 2025
5
0
1
Теперь приложение запускается но пишет ошибку о VideoPlayer instance
Помогите пожалуйста 🥺
 

Вложения

  • car_counter.zip
    3,5 КБ · Просмотры: 0

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
вставляй код сюда как код, никто не захочет и я в том числе каждый раз скачивать твои файлы. Если есть ошибки, то показывай весь трейсбэк. Описание ошибки по типу "пишет ошибку о VideoPlayer instance" мне и никому другому ни о чем не говорит.
 
  • Мне нравится
Реакции: tenashini

tenashini

Новичок
Пользователь
Мар 21, 2025
5
0
1
Car_counter.py

if name == "__main__":
try:
import sys
import os
import logging
import vlc
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import (QApplication, QMainWindow, QFileDialog, QSlider,
QPushButton, QLabel, QVBoxLayout, QWidget, QFrame,
QMessageBox)

# Настройка логгера
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[
logging.FileHandler("debug.log"),
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger(__name__)

class VideoPlayer(QMainWindow):
def init(self):
super().init()
self.instance = None # Инициализация
self.media_player = None # Инициализация
logger.debug("Инициализация приложения")
self.setup_ui()
self.setup_vlc() # Теперь вызывается после инициализации атрибутов
self.setup_controls()

def setup_vlc(self):
try:
self.instance = vlc.Instance("--no-xlib --verbose 2")
self.media_player = self.instance.media_player_new()

if sys.platform.startswith('win'):
self.media_player.set_hwnd(self.video_frame.winId())
else:
self.media_player.set_xwindow(self.video_frame.winId())

logger.debug("VLC инициализирован")
except Exception as e:
logger.error(f"Ошибка VLC: {str(e)}")
self.show_error("Ошибка инициализации видео")
self.instance = None
self.media_player = None

def closeEvent(self, event):
logger.info("Завершение работы")
if self.media_player:
self.media_player.release()
if self.instance:
self.instance.release()
event.accept()

try:
# Инициализация VLC с подробным логом
self.instance = vlc.Instance("--verbose 2")
self.media_player = self.instance.media_player_new()
logger.debug("VLC инициализирован успешно")
except Exception as e:
logger.error(f"Ошибка инициализации VLC: {str(e)}")
QMessageBox.critical(self, "Fatal Error", f"VLC initialization failed: {str(e)}")
sys.exit(1)

# Виджет для видео
self.video_frame = QFrame()
self.video_frame.setStyleSheet("background-color: black;")

# Элементы управления
self.play_btn = QPushButton("Play")
self.play_btn.clicked.connect(self.toggle_play)

self.slider = QSlider(Qt.Horizontal)
self.slider.sliderMoved.connect(self.set_video_position)

self.time_label = QLabel("00:00:00")
self.speed_combo = QComboBox()
self.speed_combo.addItems(["1.0", "2.0", "3.0", "4.0"])
self.speed_combo.currentIndexChanged.connect(self.set_playback_rate)

# Макет
layout = QVBoxLayout()
layout.addWidget(self.video_frame)
layout.addWidget(self.slider)

layout.addW

idget(self.play_btn)
layout.addWidget(self.speed_combo)
layout.addWidget(self.time_label)

container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)

# Таймер обновления интерфейса
self.timer = QTimer(self)
self.timer.setInterval(200)
self.timer.timeout.connect(self.update_ui)

# Привязка видео-виджета
if sys.platform.startswith('win'):
self.media_player.set_hwnd(self.video_frame.winId())
else:
self.media_player.set_xwindow(self.video_frame.winId())

def toggle_play(self):
try:
if self.media_player.is_playing():
self.media_player.pause()
self.play_btn.setText("Play")
logger.debug("Пауза")
else:
if self.media_player.play() == -1:
raise RuntimeError("Ошибка воспроизведения")
self.play_btn.setText("Pause")
self.timer.start()
logger.debug("Старт воспроизведения")
except Exception as e:
logger.error(str(e))
QMessageBox.critical(self, "Ошибка", str(e))

def set_video_position(self, position):
try:
self.media_player.set_time(position)
logger.debug(f"Позиция: {position} мс")
except Exception as e:
logger.error(f"Ошибка перемотки: {str(e)}")

def update_ui(self):
try:
media_time = self.media_player.get_time()
if media_time > 0:
self.slider.setValue(media_time)
seconds = media_time // 1000
self.time_label.setText(
f"{seconds//3600:02}:{(seconds%3600)//60:02}:{seconds%60:02}"
)
except Exception as e:
logger.error(f"Ошибка обновления UI: {str(e)}")

def set_playback_rate(self):
try:
speed = float(self.speed_combo.currentText())
self.media_player.set_rate(speed)
logger.debug(f"Скорость: {speed}x")
except Exception as e:
logger.error(f"Ошибка изменения скорости: {str(e)}")

def open_file(self):
try:
file_name, _ = QFileDialog.getOpenFileName(
self,
"Open Video",
"",
"Video Files (*.mp4 *.avi *.mov *.mkv);;All Files (*)"
)
if file_name:
media = self.instance.media_new(os.path.abspath(file_name))
self.media_player.set_media(media)
self.speed_combo.setCurrentIndex(0)
self.play_btn.setEnabled(True)
logger.info(f"Загружено видео: {file_name}")
except Exception as e:
logger.error(f"Ошибка загрузки файла: {str(e)}")
QMessageBox.critical(self, "Ошибка", f"Не удалось загрузить файл: {str(e)}")

def closeEvent(self, event):
logger.info("Завершение работы")
self.media_player.release()
self.instance.release()

event.accept()

if name == "__main__":
try:
logger.info("=== Запуск приложения ===")
app = QApplication(sys.argv)
player = VideoPlayer()
player.show()
player.open_file()
sys.exit(app.exec_())
except Exception as e:
logger.critical(f"Критическая ошибка: {str(e)}")
QMessageBox.critical(None, "Fatal Error", f"Application crashed: {str(e)}")
sys.exit(1)
except Exception as e:
with open("debug.log", "a") as f:
f.write(f"CRASH: {str(e)}\n")
raise
 

tenashini

Новичок
Пользователь
Мар 21, 2025
5
0
1
Build.spec

# -*- mode: python ; coding: utf-8 -*-

import os
import sys
from PyInstaller.utils.hooks import collect_all

block_cipher = None

# ==============================================================================
# Конфигурация путей VLC
# ==============================================================================

# Укажите правильный путь к вашей установке VLC!
VLC_PATH = r"C:\Program Files\VideoLAN\VLC"

# Основные DLL
vlc_binaries = [
(os.path.join(VLC_PATH, 'libvlc.dll'), '.'),
(os.path.join(VLC_PATH, 'libvlccore.dll'), '.')
]

# Плагины VLC
vlc_plugins = [
(os.path.join(VLC_PATH, 'plugins'), 'plugins')
]

# ==============================================================================
# Анализ и сборка проекта
# ==============================================================================

# Сбор зависимостей PyQt5
pyqt5_datas, pyqt5_binaries, pyqt5_hidden = collect_all('PyQt5')

a = Analysis(
['car_counter.py'],
pathex=[],
binaries=vlc_binaries + pyqt5_binaries,
datas=[
*pyqt5_datas,
*vlc_plugins,
('icon.ico', '.'), # Иконка приложения

],
hiddenimports=pyqt5_hidden + [
'PyQt5.QtCore',
'PyQt5.QtGui',
'PyQt5.QtWidgets',
'vlc' # Для python-vlc
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[
'numpy',
'scipy',
'pandas',
'matplotlib'
],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
name='CarCounter'
)

# ==============================================================================
# Конфигурация EXE
# ==============================================================================

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='CarCounter',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True, # Использовать UPX-сжатие
console=False, # Скрыть консоль
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='icon.ico', # Путь к иконке
runtime_tmpdir=None,
argv_emulation=False
)
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
464
128
43
и снова if __name__ == "__main__":

так же к обязательному прочтению https://itfy.org/threads/kak-ne-nado-zadavat-voprosy.3450/post-13566
 

Форум IT Специалистов