У меня есть демонстрационное приложение PyQt6, использующее библиотеку QtMultimedia для захвата живого видео с веб-камеры и записи его с помощью QCamera, QMediaCaptureSession, QVideoWidget и QMediaRecorder.
Я хочу добавить текст в рамки. Я считаю, что это возможно с помощью функций map() QVideoFrame.toImage() и unmap(). Я хочу, чтобы текст присутствовал в QVideoWidget, а также в экспортированном видеофайле.
Однако результирующий QImage, возвращаемый функцией QVideoFrame.toImage(), всегда имеет значение Null (при использовании QImage .isNull()).
Я пробовал разные форматы QCameraFormat, предлагаемые моей веб-камерой, YUYV, JPEG, NV12 и т. д., но это не имеет значения.
Я попробовал функцию QVideoFrame.addSubtitleText(), но она не встраивает текст в видеокадр, поэтому его нет в экспортированном видеофайле.
Как добавить текст в QVideoFrame?
Я использую Python3.10 и PyQt6.7.1.
import os
from PyQt6.QtCore import QUrl, pyqtSlot
from PyQt6.QtMultimedia import (
QCamera,
QCameraDevice,
QMediaCaptureSession,
QMediaDevices,
QMediaRecorder,
QVideoFrame,
)
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.QtWidgets import (
QApplication,
QComboBox,
QLabel,
QMainWindow,
QPushButton,
QVBoxLayout,
QWidget,
)
video_path = os.path.join(os.getcwd(), "my_video.mp4")
class Main(QMainWindow):
def __init__(self):
super().__init__()
widget = QWidget()
self.setCentralWidget(widget)
self.main_layout = QVBoxLayout(widget)
self.m_devices = QMediaDevices()
self.devices_list = QComboBox()
[
self.devices_list.addItem(str(d.description()), d)
for d in self.m_devices.videoInputs()
]
self.devices_list.setCurrentIndex(-1)
self.devices_list.activated.connect(
lambda idx: self.set_camera(self.devices_list.itemData(idx))
)
self.main_layout.addWidget(QLabel("Select Camera"))
self.main_layout.addWidget(self.devices_list)
self.start_btn = QPushButton("Start Recording")
self.start_btn.clicked.connect(self.start_recording)
self.main_layout.addWidget(self.start_btn)
self.stop_btn = QPushButton("Stop Recording")
self.stop_btn.clicked.connect(self.stop_recording)
self.main_layout.addWidget(self.stop_btn)
self.video_widget = QVideoWidget()
self.video_sink = self.video_widget.videoSink()
self.video_sink.videoFrameChanged.connect(self.on_video_frame)
self.main_layout.addWidget(self.video_widget, 1)
self.m_recorder = QMediaRecorder()
self.m_recorder.recorderStateChanged.connect(lambda state: print(state))
self.m_recorder.setOutputLocation(QUrl.fromLocalFile(video_path))
self.m_recorder.errorOccurred.connect(lambda error, error_str: print(error_str))
self.m_capture_session = QMediaCaptureSession()
self.m_capture_session.setVideoSink(self.video_sink)
self.m_capture_session.setRecorder(self.m_recorder)
# self.capture_session.setVideoOutput(self.video_widget)
self.camera = QCamera(QCameraDevice())
self.show()
self.resize(800, 600)
def set_camera(self, camera: QCameraDevice):
self.camera = QCamera(camera)
self.m_capture_session.setCamera(self.camera)
self.camera.start()
def start_recording(self):
self.m_recorder.record()
def stop_recording(self):
self.m_recorder.stop()
@pyqtSlot(QVideoFrame)
def on_video_frame(self, frame: QVideoFrame) -> None:
""" """
if not frame.isValid():
return
if not frame.map(QVideoFrame.MapMode.ReadOnly):
return
img = frame.toImage()
### edit QImage here ###
print(f"Frame received (null={img.isNull()})")
frame.unmap()
if __name__ == "__main__":
app = QApplication([])
main = Main()
app.exec()
Подробнее здесь: https://stackoverflow.com/questions/790 ... videoframe
Как редактировать/добавлять текст в QVideoFrame ⇐ Python
Программы на Python
-
Anonymous
1728388312
Anonymous
У меня есть демонстрационное приложение PyQt6, использующее библиотеку QtMultimedia для захвата живого видео с веб-камеры и записи его с помощью QCamera, QMediaCaptureSession, QVideoWidget и QMediaRecorder.
Я хочу добавить текст в рамки. Я считаю, что это возможно с помощью функций map() QVideoFrame.toImage() и unmap(). Я хочу, чтобы текст присутствовал в QVideoWidget, а также в экспортированном видеофайле.
Однако результирующий QImage, возвращаемый функцией QVideoFrame.toImage(), всегда имеет значение Null (при использовании QImage .isNull()).
Я пробовал разные форматы QCameraFormat, предлагаемые моей веб-камерой, YUYV, JPEG, NV12 и т. д., но это не имеет значения.
Я попробовал функцию QVideoFrame.addSubtitleText(), но она не встраивает текст в видеокадр, поэтому его нет в экспортированном видеофайле.
Как добавить текст в QVideoFrame?
Я использую Python3.10 и PyQt6.7.1.
import os
from PyQt6.QtCore import QUrl, pyqtSlot
from PyQt6.QtMultimedia import (
QCamera,
QCameraDevice,
QMediaCaptureSession,
QMediaDevices,
QMediaRecorder,
QVideoFrame,
)
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.QtWidgets import (
QApplication,
QComboBox,
QLabel,
QMainWindow,
QPushButton,
QVBoxLayout,
QWidget,
)
video_path = os.path.join(os.getcwd(), "my_video.mp4")
class Main(QMainWindow):
def __init__(self):
super().__init__()
widget = QWidget()
self.setCentralWidget(widget)
self.main_layout = QVBoxLayout(widget)
self.m_devices = QMediaDevices()
self.devices_list = QComboBox()
[
self.devices_list.addItem(str(d.description()), d)
for d in self.m_devices.videoInputs()
]
self.devices_list.setCurrentIndex(-1)
self.devices_list.activated.connect(
lambda idx: self.set_camera(self.devices_list.itemData(idx))
)
self.main_layout.addWidget(QLabel("Select Camera"))
self.main_layout.addWidget(self.devices_list)
self.start_btn = QPushButton("Start Recording")
self.start_btn.clicked.connect(self.start_recording)
self.main_layout.addWidget(self.start_btn)
self.stop_btn = QPushButton("Stop Recording")
self.stop_btn.clicked.connect(self.stop_recording)
self.main_layout.addWidget(self.stop_btn)
self.video_widget = QVideoWidget()
self.video_sink = self.video_widget.videoSink()
self.video_sink.videoFrameChanged.connect(self.on_video_frame)
self.main_layout.addWidget(self.video_widget, 1)
self.m_recorder = QMediaRecorder()
self.m_recorder.recorderStateChanged.connect(lambda state: print(state))
self.m_recorder.setOutputLocation(QUrl.fromLocalFile(video_path))
self.m_recorder.errorOccurred.connect(lambda error, error_str: print(error_str))
self.m_capture_session = QMediaCaptureSession()
self.m_capture_session.setVideoSink(self.video_sink)
self.m_capture_session.setRecorder(self.m_recorder)
# self.capture_session.setVideoOutput(self.video_widget)
self.camera = QCamera(QCameraDevice())
self.show()
self.resize(800, 600)
def set_camera(self, camera: QCameraDevice):
self.camera = QCamera(camera)
self.m_capture_session.setCamera(self.camera)
self.camera.start()
def start_recording(self):
self.m_recorder.record()
def stop_recording(self):
self.m_recorder.stop()
@pyqtSlot(QVideoFrame)
def on_video_frame(self, frame: QVideoFrame) -> None:
""" """
if not frame.isValid():
return
if not frame.map(QVideoFrame.MapMode.ReadOnly):
return
img = frame.toImage()
### edit QImage here ###
print(f"Frame received (null={img.isNull()})")
frame.unmap()
if __name__ == "__main__":
app = QApplication([])
main = Main()
app.exec()
Подробнее здесь: [url]https://stackoverflow.com/questions/79063264/how-to-edit-add-text-to-qvideoframe[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия