Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в контейнере.
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")
ПРОБЛЕМА 1
В предыдущей версии метод захвата принимал входные данные контейнера и обновлял его (метод с комментариями). К моему удивлению, видео было прерывистым. Итак, я решил изменить этот метод, введя изображение в качестве входных данных,
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.
Другими словами:
НАЖМИТЕ №1: ОК
НАЖМИТЕ №2: ОК
НАЖМИТЕ №3: Исключение
Есть ли у кого-нибудь подсказки, как предотвратить ошибку и избежать исключения? Спасибо.
Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в контейнере. [code]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()
ft.app(target=main, assets_dir="assets") [/code] ПРОБЛЕМА 1 В предыдущей версии метод захвата принимал входные данные контейнера и обновлял его (метод с комментариями). К моему удивлению, видео было прерывистым. Итак, я решил изменить этот метод, введя изображение в качестве входных данных, [code]img = ft.Image(src_base64=None)[/code] и передать это изображение в контейнер. Однако определенное таким образом изображение (строка 86) выдало мне эту ошибку, отображаемую в контейнере: [code]Image must have either "src" or "src_base64" specified[/code] ПРОБЛЕМА 2 Более того, после нажатия кнопки захват происходит плавно, но после остановки и последующего перезапуска Я получил это исключение: [code]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. [/code] Другими словами: НАЖМИТЕ №1: ОК НАЖМИТЕ №2: ОК НАЖМИТЕ №3: Исключение Есть ли у кого-нибудь подсказки, как предотвратить ошибку и избежать исключения? Спасибо.
Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в...
Я имею дело с приложением, которое позволяет использовать веб-камеру. Для взаимодействия с камерой я использовал пакет python open-cv. Я разработал простое приложение Flet с кнопкой для запуска/остановки захвата кадров с веб-камеры, отображаемых в...
Я строю веб -приложение для автомобильной компании, использующей Laravel (PHP) в качестве бэкэнда. Чтобы направить их, мы хотим показать оверлейную раму (например, спереди на переднем автомобиле) над прямой трансляцией камеры, чтобы они могли...
Предположим, у меня есть кадр данных размером 2*3:
df = pd.DataFrame({'A': , 'B': , 'C': }) А Б С 0 1 3 5 1 2 4 6 Мне интересно, как преобразовать df в кадр данных (2*3)*1, который имеет следующую форму? Я пробовал pd.DataFrame.explode() и...
Я знаю, что если будет достигнут co_return (явный или неявный)
co_await promise.final_suspend() вызывается.
В Final_suspend() можно определенно вызвать ``handle.destroy(), который, насколько я понимаю, уничтожает все объекты в кадре сопрограммы...