Firefly开源社区

123
发表新贴
打印 上一主题 下一主题

[人工智能] ffmedia如何设置帧等待时间

112

积分

0

威望

0

贡献

技术小白

积分
112

ffmedia如何设置帧等待时间

发表于 2023-9-19 16:46:34      浏览:7654 | 回复:27        打印      只看该作者   [复制链接] 楼主
问题描述及复现步骤:
我的需求是每秒钟采集一张图像识别

目前是Cv2Display里面做一个判断
  1.     def run(self):
  2.         while not self.is_stop:
  3.             with self.lock:
  4.                 while not self.frame_complete:
  5.                     self.condition.wait()
  6.                 try:
  7.                     if self.last < (time.time() * 1000) - 1000:
  8.                         self.last = time.time() * 1000
  9.                         input_para = self.module.getOutputImagePara()
  10.                         data = self.frame.getActiveData()
  11.                         # 帧数据转换为数组形式
  12.                         img = data.reshape((input_para.vstride, input_para.hstride, 3))
  13.                         print('--------------------------')           
  14.                 except ValueError as e:
  15.                     print("Invalid image resolution!")
  16.                     resolution = find_two_numbers(data.size // 3, input_para.hstride, input_para.vstride)
  17.                     print("Try the recommended resolution: -o {}x{}".format(resolution[0], resolution[1]))
  18.                     break
  19.                 self.frame_complete = False
  20.                 self.condition.notify()
复制代码
采集一个rtsp的留CPU使用了百分之8

有什么好的解决办法


微信图片_20230919164611.rar

43.6 KB, 下载次数: 0, 下载积分: 灯泡 -1 , 经验 -1

回复

使用道具 举报

997

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
997
发表于 2023-9-20 09:56:55        只看该作者  沙发
回调不出去,那模块就无法处理下一帧,所以你可以在回调等待1秒,或者你用个定时器一秒再去拿帧
回复

使用道具 举报

112

积分

0

威望

0

贡献

技术小白

积分
112
发表于 2023-9-20 12:44:08        只看该作者  板凳
回复

使用道具 举报

112

积分

0

威望

0

贡献

技术小白

积分
112
发表于 2023-9-20 12:47:26        只看该作者  地板
dengkx 发表于 2023-9-20 09:56
回调不出去,那模块就无法处理下一帧,所以你可以在回调等待1秒,或者你用个定时器一秒再去拿帧
  1. def cv2_call_back(obj, VideoBuffer):
  2.     time.sleep(1)
  3.     with obj.lock:
  4.         while obj.frame_complete:
  5.             if not obj.condition.wait(timeout=1):
  6.                 return
  7.         vb = obj.module.exportUseMediaBuffer(VideoBuffer, obj.frame, 0)
  8.         if vb is not None:
  9.             obj.frame = vb
  10.             obj.frame_complete = True
  11.         obj.condition.notify()
复制代码

我在回调函数中做了等待,但是有时候会出现报错,请问这个是什么原因
回复

使用道具 举报

997

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
997
发表于 2023-9-20 16:10:17        只看该作者  5#
chenll 发表于 2023-9-20 12:47
我在回调函数中做了等待,但是有时候会出现报错,请问这个是什么原因

你的是rtsp实时流,如果你阻塞了链路,那么rtsp会因为缓冲区满而丢帧,导致解码器就无法解出p帧,p帧需要参考前一帧才能解出来。如果是实时流,就不能阻塞,可以使用过滤或者隔帧推理
回复

使用道具 举报

112

积分

0

威望

0

贡献

技术小白

积分
112
发表于 2023-9-20 16:53:38        只看该作者  6#
dengkx 发表于 2023-9-20 16:10
你的是rtsp实时流,如果你阻塞了链路,那么rtsp会因为缓冲区满而丢帧,导致解码器就无法解出p帧,p帧需要 ...

请问 过滤或者隔帧推理这个有demo吗,ffmedia_release 如何隔帧推理
回复

使用道具 举报

997

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
997
发表于 2023-9-20 17:24:37        只看该作者  7#
chenll 发表于 2023-9-20 16:53
请问 过滤或者隔帧推理这个有demo吗,ffmedia_release 如何隔帧推理

隔帧推理,每过几帧推理一帧. 最新的ffmedia初步支持了rknn,可以看下
回复

使用道具 举报

112

积分

0

威望

0

贡献

技术小白

积分
112
发表于 2023-9-20 19:15:09        只看该作者  8#
dengkx 发表于 2023-9-20 17:24
隔帧推理,每过几帧推理一帧. 最新的ffmedia初步支持了rknn,可以看下

https://gitlab.com/firefly-linux/ffmedia_release

我在这里的主分支的demo.py文件中没有看到隔振推理的参数
不是在参数里面吗

  1. parser.add_argument("-i", "--input_source", dest='input_source', type=str, help="input source")
  2.     parser.add_argument("-f", "--save_file", dest='save_file', type=str, help="Enable save dec output data to file, set filename, default disabled")
  3.     parser.add_argument("-o", "--output", dest='output', type=str, help="Output image size, default same as input")
  4.     parser.add_argument("-b", "--outputfmt", dest='outputfmt', type=str, default="NV12", help="Output image format, default NV12")
  5.     parser.add_argument("-e", "--encodetype", dest='encodetype', type=int, default=-1, help="Encode encode, set encode type, default disabled")
  6.     parser.add_argument("-m", "--enmux", dest='enmux', type=str, help="Enable save encode data to file, Enable package as mp4, mkv, or raw stream files depending on the file name suffix. default disabled")
  7.     parser.add_argument("-M", "--filemaxframe", dest='filemaxframe', type=int, default= 0, help="Set the maximum number of frames that can be saved. The default number is unlimited")
  8.     parser.add_argument("-p", "--port", dest='port', type=int, default=0, help="Enable push stream, default rtsp stream, set push port, depend on encode enabled, default disabled\n")
  9.     parser.add_argument("--push_type", dest='push_type', type=int, default=0, help="Set push stream type, default rtsp. e.g. --push_type 1\n")
  10.     parser.add_argument("--rtsp_transport", dest='rtsp_transport', type=int, default=0, help="Set the rtsp transport type, default 0(udp)")
  11.     parser.add_argument("-s", "--sync", dest="sync", type=int, default=-1, help="Enable synchronization module, default disabled. e.g. -s 1")
  12.     parser.add_argument("-a", "--aplay", dest='aplay', type=str, help="Enable play audio, default disabled. e.g. -a plughw:3,0")
  13.     parser.add_argument("-r", "--rotate", dest='rotate',type=int, default=0, help="Image rotation degree, default 0" )
  14.     parser.add_argument("-d", "--drmdisplay", dest='drmdisplay', type=int, default=-1, help="Drm display, set display plane, set 0 to auto find plane")
  15.     parser.add_argument("-c", "--cvdisplay", dest='cvdisplay', type=int, default=0, help="OpenCv display, set window number, default 0")
  16.     parser.add_argument("-x", "--x11display", dest='x11display', type=int, default=0, help="X11 window displays, render the video using gles. default disabled")
复制代码
回复

使用道具 举报

997

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
997
发表于 2023-9-21 10:01:58        只看该作者  9#
chenll 发表于 2023-9-20 19:15
https://gitlab.com/firefly-linux/ffmedia_release

我在这里的主分支的demo.py文件中没有看到隔振推 ...

demo在rknn/src下,py的只添加了接口,还没写出demo。你可以认为推理时间大于视频帧间隔,可以跳过一帧或多帧再推理一帧,后面跳过的帧继续使用这帧的推理结果直到再次推理
回复

使用道具 举报

112

积分

0

威望

0

贡献

技术小白

积分
112
发表于 2023-9-21 12:17:33        只看该作者  10#
dengkx 发表于 2023-9-21 10:01
demo在rknn/src下,py的只添加了接口,还没写出demo。你可以认为推理时间大于视频帧间隔,可以跳过一帧或 ...

等不能说一下py的接口是哪个,我看了demo.cpp 但是没有找到是哪里使用的,因看不懂C
回复

使用道具 举报

返回列表
123
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表