Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в контейнере. Раньше метод захвата принимал входные данные контейнера и обновлял его. К моему удивлению, видео было прерывистым. Итак, я решил изменить этот метод, задав изображение в качестве входных данных и передав это изображение в контейнер. Однако определенное таким образом изображение (строка 86) выдало мне эту ошибку, отображаемую в контейнере:
Image must have either "src" or "src_base64" specified
Более того, после нажатия кнопки захват происходит плавно, но после остановки и последующего перезапуска я получил следующее исключение:
Future exception was never retrieved
future:
Traceback (most recent call last):
File "c:\Users\idoec\miniconda3\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 79, in button_play_clicked
camManager.capture_from_webcam(ftImg = img)
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 44, in capture_from_webcam
ftImg.update()
File "c:\Users\idoec\miniconda3\Lib\site-packages\flet_core\control.py", line 286, in update
assert self.__page, "Control must be added to the page first."
AssertionError: Control must be added to the page first.
AssertionError: Control must be added to the page first.
Future exception was never retrieved
future:
Traceback (most recent call last):
File "c:\Users\idoec\miniconda3\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 79, in button_play_clicked
camManager.capture_from_webcam(ftImg = img)
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 44, in capture_from_webcam
ftImg.update()
File "c:\Users\idoec\miniconda3\Lib\site-packages\flet_core\control.py", line 286, in update
assert self.__page, "Control must be added to the page first."
AssertionError: Control must be added to the page first.
Есть ли у кого-нибудь подсказки, как предотвратить ошибку и избежать исключения? Спасибо.
import flet as ft
import cv2
import base64
class WebcamManager():
def __init__(self):
super().__init__()
self.webcam = None
def initialize(self):
try:
self.webcam = cv2.VideoCapture(index=0, apiPreference=cv2.CAP_DSHOW)
if not self.webcam.isOpened():
print("Cannot open camera")
exit()
else:
# Set new capture properties
ret = self.webcam.set(cv2.CAP_PROP_FRAME_WIDTH, value=1280.0)
ret = self.webcam.set(cv2.CAP_PROP_FRAME_HEIGHT, value=720.0)
print("webcam.isOpened(): ", self.webcam.isOpened())
except Exception as e:
print(e)
# THIS VERSION OF CAPTURING UPDATING THE CONTAINER CAUSES INTERMITTENT VIDEO
# def capture_from_webcam(self, container: ft.Container):
# while True:
# ret, frame = self.webcam.read()
# if ret:
# frame = cv2.resize(frame,(854,480))
# _, img_arr = cv2.imencode('.png', frame)
# img_b64 = base64.b64encode(img_arr)
# container.content = ft.Image(src_base64 = img_b64.decode("utf-8"))
# container.update()
def capture_from_webcam(self, ftImg: ft.Image):
while True:
ret, frame = self.webcam.read()
if ret:
frame = cv2.resize(frame,(854,480))
_, img_arr = cv2.imencode('.png', frame)
img_b64 = base64.b64encode(img_arr)
ftImg.src_base64 = img_b64.decode("utf-8")
ftImg.update()
def dispose(self):
try:
self.webcam.release()
print("webcam.isOpened(): ", self.webcam.isOpened())
except Exception as e:
print(e)
def main(page: ft.Page):
def button_play_clicked(e):
if e.control.data: # case: running -> not running
button_play.data = False
button_play.icon = ft.icons.CAMERA
button_play.tooltip="Turn on webcam"
camManager.dispose()
cont.content = None
else:# case: not running -> running
button_play.data = True
button_play.icon = ft.icons.CAMERA_OUTLINED
button_play.tooltip="Turn off webcam"
camManager.initialize()
# THIS VERSION OF CAPTURING UPDATING THE CONTAINER CAUSES INTERMITTENT VIDEO
# camManager.capture_from_webcam(container=cont)
camManager.capture_from_webcam(ftImg = img)
page.update()
camManager = WebcamManager()
img = ft.Image(src_base64=None)
cont = ft.Container(border=ft.border.all(3, ft.colors.RED), width=854, height=480,
content = img,
) #width = 854, height = 480
button_play = ft.IconButton(icon=ft.icons.CAMERA, icon_size=46, on_click=button_play_clicked,
data = False, tooltip="Turn on webcam")
page.add(ft.Column(
controls=[cont, button_play],
horizontal_alignment = "center",
alignment = "center", )
)
page.window_maximized = True
page.scroll = ft.ScrollMode.AUTO
page.horizontal_alignment = "center"
page.vertical_alignment = "center"
page.update()
ft.app(target=main, assets_dir="assets")
Подробнее здесь: https://stackoverflow.com/questions/793 ... -and-an-ex
Запишите кадр веб-камеры в приложение Flet: изображение flet сообщило об ошибке и исключении. ⇐ Python
Программы на Python
1736437748
Anonymous
Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в контейнере. Раньше метод захвата принимал входные данные контейнера и обновлял его. К моему удивлению, видео было прерывистым. Итак, я решил изменить этот метод, задав изображение в качестве входных данных и передав это изображение в контейнер. Однако определенное таким образом изображение (строка 86) выдало мне эту ошибку, отображаемую в контейнере:
Image must have either "src" or "src_base64" specified
Более того, после нажатия кнопки захват происходит плавно, но после остановки и последующего перезапуска я получил следующее исключение:
Future exception was never retrieved
future:
Traceback (most recent call last):
File "c:\Users\idoec\miniconda3\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 79, in button_play_clicked
camManager.capture_from_webcam(ftImg = img)
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 44, in capture_from_webcam
ftImg.update()
File "c:\Users\idoec\miniconda3\Lib\site-packages\flet_core\control.py", line 286, in update
assert self.__page, "Control must be added to the page first."
AssertionError: Control must be added to the page first.
AssertionError: Control must be added to the page first.
Future exception was never retrieved
future:
Traceback (most recent call last):
File "c:\Users\idoec\miniconda3\Lib\concurrent\futures\thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 79, in button_play_clicked
camManager.capture_from_webcam(ftImg = img)
File "C:\Users\idoec\Desktop\FLET\WebcamApp\main.py", line 44, in capture_from_webcam
ftImg.update()
File "c:\Users\idoec\miniconda3\Lib\site-packages\flet_core\control.py", line 286, in update
assert self.__page, "Control must be added to the page first."
AssertionError: Control must be added to the page first.
Есть ли у кого-нибудь подсказки, как предотвратить ошибку и избежать исключения? Спасибо.
import flet as ft
import cv2
import base64
class WebcamManager():
def __init__(self):
super().__init__()
self.webcam = None
def initialize(self):
try:
self.webcam = cv2.VideoCapture(index=0, apiPreference=cv2.CAP_DSHOW)
if not self.webcam.isOpened():
print("Cannot open camera")
exit()
else:
# Set new capture properties
ret = self.webcam.set(cv2.CAP_PROP_FRAME_WIDTH, value=1280.0)
ret = self.webcam.set(cv2.CAP_PROP_FRAME_HEIGHT, value=720.0)
print("webcam.isOpened(): ", self.webcam.isOpened())
except Exception as e:
print(e)
# THIS VERSION OF CAPTURING UPDATING THE CONTAINER CAUSES INTERMITTENT VIDEO
# def capture_from_webcam(self, container: ft.Container):
# while True:
# ret, frame = self.webcam.read()
# if ret:
# frame = cv2.resize(frame,(854,480))
# _, img_arr = cv2.imencode('.png', frame)
# img_b64 = base64.b64encode(img_arr)
# container.content = ft.Image(src_base64 = img_b64.decode("utf-8"))
# container.update()
def capture_from_webcam(self, ftImg: ft.Image):
while True:
ret, frame = self.webcam.read()
if ret:
frame = cv2.resize(frame,(854,480))
_, img_arr = cv2.imencode('.png', frame)
img_b64 = base64.b64encode(img_arr)
ftImg.src_base64 = img_b64.decode("utf-8")
ftImg.update()
def dispose(self):
try:
self.webcam.release()
print("webcam.isOpened(): ", self.webcam.isOpened())
except Exception as e:
print(e)
def main(page: ft.Page):
def button_play_clicked(e):
if e.control.data: # case: running -> not running
button_play.data = False
button_play.icon = ft.icons.CAMERA
button_play.tooltip="Turn on webcam"
camManager.dispose()
cont.content = None
else:# case: not running -> running
button_play.data = True
button_play.icon = ft.icons.CAMERA_OUTLINED
button_play.tooltip="Turn off webcam"
camManager.initialize()
# THIS VERSION OF CAPTURING UPDATING THE CONTAINER CAUSES INTERMITTENT VIDEO
# camManager.capture_from_webcam(container=cont)
camManager.capture_from_webcam(ftImg = img)
page.update()
camManager = WebcamManager()
img = ft.Image(src_base64=None)
cont = ft.Container(border=ft.border.all(3, ft.colors.RED), width=854, height=480,
content = img,
) #width = 854, height = 480
button_play = ft.IconButton(icon=ft.icons.CAMERA, icon_size=46, on_click=button_play_clicked,
data = False, tooltip="Turn on webcam")
page.add(ft.Column(
controls=[cont, button_play],
horizontal_alignment = "center",
alignment = "center", )
)
page.window_maximized = True
page.scroll = ft.ScrollMode.AUTO
page.horizontal_alignment = "center"
page.vertical_alignment = "center"
page.update()
ft.app(target=main, assets_dir="assets")
Подробнее здесь: [url]https://stackoverflow.com/questions/79343114/capture-the-webcam-frame-into-a-flet-app-flet-image-reported-an-error-and-an-ex[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия