#6847·flet

bug: RawImage.render () 包装的Windows应用中的ACKs stop, 但与 flet 运行配合

作者: emannoh创建于 2026年9月15日更新于 2026年9月16日
标签bug

复制检查

  • 我搜索了[已公开的发 ,没有重复

描述错误

Flet 0.86.5 RawImage.render () 帧确认站在一个被包装的Windows桌面应用中,而同樣的相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相等相當相當相相當相當相當相當相當相當相當相當相當相當相當相當相當相當相當相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相

OpenCV捕捉器在两种情况下仍为30–31 FPS. 在被包装的应用程序中,wait RawImage.render() 经常等ack timeout=1.0(每个帧1.006 s),而在开发/IDE应用程序确认正常到达.

一个只包含VideoCapture、一个RawImage的最低限度的独立应用程序,一个捕捉工,一个Aync使循环复制这个问题。

代码样本

< 详细内容打开 > > 摘要 > 代码 </ 摘要 >

[Python] 导入 Ayncio 导入时间 从 pathlib 导入路径

导入 cv2 导入为 ft

LOG FILE = path.home () / "flet rawimage test.log" (中文(简体) ).

def 日志( 消息: st) : 以 LOG FILE.open ("a",编码="utf-8") 为f: f. write(f"{time.perf counter (::3f}: {message}\n")) (中文(简体) ).

aync def 主页(页:ft.Page): 页: 1 页面.window.width = 900 页面.window.hight = 700

原始图像 = ft.Raw Image () 宽=640, 高度为480, (原始内容存档于2013-10-12) (英语). Fit=ft.BoxFit.CONPAIN, ack timeout=1.0, (简体中文). (中文(简体) ).

状态 = ft.Text ("卡梅拉已停止")

运行=虚假 最近( F) = 无 抓取 任务 运行=虚假

async def compare loop (): (中文(简体) ). 非本地最近框架( F)

此时为 True : 如果未运行 : 等待 asyncio.sleep( 0.05) 继续

帧 = 最新帧

如果帧为无 : 等待 asyncio.sleep( 0.001) 继续

假设最新可用框架。

最近( F) = 无

启动=时间.perf counter ()

尝试 : 等待原始图像. reland () 边框, 预乘为真; (中文(简体) ). 除超时错误 : 已过期=时间.perf counter () - 已启动 日志( f) {已删除: 3f} 秒后“ 更新时间” ) 继续 除运行时错误 : 返回时

已过期=时间.perf counter () - 已启动

如果超过0.9: log( f) “ ACK 可能超时 : {已取消 : 3. f} 秒 ) 其他情况: 日志( f) “ ACK 确定 : {已取消 : 3. f} 秒 )

def 捕获 loop (): 非本地最近框架( F) 非本地抓取 任务 运行 非本地运行

抓取 任务 运行=真

上限=cv2. 视频卡通( 0)

如果你的相机不支持640x480,就改变这些.

上限. set(cv2.CAP PROP FRAME WIDTH, 640) 盖. set(cv2.CAP PROP FRAME HEIGHT, 第480页)

如果不是上限. is 打开( I) : 日志 (“ 错误 : 相机无法打开 ” ) 运行=虚假 抓取 任务 运行=虚假 返回时 . . . . . . .