-
因图像分析需要,相机设置是2560×1440分辨率,H.265编码。设备是华为昇腾Atlas系列,系统Ubuntu 20.04,Python 3.8,OpenCV 4.5。用下面的代码读取时会出现花屏、掉帧,而且内存占用特别大。我试过把相机采集和图像分析分成两个线程,也试过用华为VDEC做硬件解码,但VDEC的API一堆问题,有些函数根本找不到,改来改去也没解决根本问题。不知道有没有人处理过类似的问题?该怎么稳定地读取这种高分辨率H.265的RTSP流?或者有没有别的方法建议? import cv2import threadingimport queuefrom pupil_apriltags import Detectorimport mathfrom datetime import datetimeimport timeimport tracebackimport os #---------- 摄像头采集线程类 ----------class CameraCaptureThread(threading.Thread): """ 摄像头采集线程类 用法: capture_thread = CameraCaptureThread() capture_thread.daemon = True capture_thread.start() """ def __init__(self, camera_id): """ 初始化摄像头采集线程 Args: camera_id (int): 摄像头ID,默认0 """ super().__init__() self.camera_id = camera_id # 摄像头ID self.cap = None # 摄像头对象 self.frame_queue = queue.Queue(maxsize=2) # 帧队列最大长度设为2,避免旧帧堆积,保证实时性 self.running = False # 线程运行状态标志 def run(self): """ 线程入口函数 打开摄像头并循环读取帧,将帧放入队列 """ # 打开摄像头 self.cap = cv2.VideoCapture(self.camera_id, cv2.CAP_FFMPEG) # 设置 FFmpeg 内部缓冲只保留最新一帧 self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 2) # MJPG 编码 #self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M','J','P','G')) # 如果打开失败,则退出线程 if not self.cap.isOpened(): print("无法打开摄像头") return self.running = True while self.running: # -----1.读取一帧图像----- ret, frame = self.cap.read() if not ret: print("无法读取帧,尝试重连...") self.cap.release() time.sleep(1) self.cap = cv2.VideoCapture(self.camera_id, cv2.CAP_FFMPEG) continue # 帧队列满时,丢弃最早的帧,保证实时性 if self.frame_queue.full(): _ = self.frame_queue.get() # 弹出最早帧 self.frame_queue.put(frame) # 放入最新帧 del ret, frame # 释放内存 def stop(self): """ 停止线程 """ self.running = False if self.cap: self.cap.release() if __name__ == '__main__': # 摄像头地址 camera_id = "rtsp://xx" capture_thread = None try: # 启动采集线程 capture_thread = CameraCaptureThread(camera_id=camera_id) capture_thread.daemon = True capture_thread.start() time.sleep(2) # 从队列里取一帧并保存 if not capture_thread.frame_queue.empty(): frame = capture_thread.frame_queue.get() # 获取当前日期时间 current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 在图片右上角添加日期时间文字 cv2.putText(frame, current_time, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2) # 保存图片 filename = "security_camera.jpg" cv2.imwrite(filename, frame) print(f"已保存图片: {filename}") else: print("没有获取到帧") except Exception as e: traceback.print_exc() finally: # 确保释放资源 if capture_thread: capture_thread.stop() capture_thread.join() time.sleep(0.2) cv2.destroyAllWindows() print("摄像头线程已关闭")
-
完整的程序 和硬件部署能做的可以留言联系一下 功能:https://bbs.huaweicloud.com/blogs/420738
-
尊敬的华为云客户:我们很高兴的通知您,经过半年多的公测,为了给您提供更专业的服务支持和可用性保障,华为云视频内容分析服务子服务视频OCR计划于2019/06/05 00:00:00(北京时间)正式转商用。为了感谢您对华为云视频OCR服务的支持,服务将在转商后一周内保持免费,2019/06/12 00:00:00后正式开始收费。当前已使用该服务的用户,转商后不会影响您的继续使用;为了保障您的权益,在此郑重建议您继续使用服务前,点击视频内容分析服务主页的服务咨询,联系我们了解具体的收费标准。更多关于视频OCR的产品介绍,请您点击了解。如您有任何问题,可随时通过工单或者服务热线(950808)与我们联系。感谢您对华为云的支持!
-
尊敬的华为云客户:华为云计划于2019/03/01 00:00(北京时间)将暴力分拣识别正式转商用。服务正式商用后,服务将于2019/03/01 00:00(北京时间)正式开始收费。华为云在此提醒您,如果您不再需要使用该服务,请勿从控制台使用服务或调用服务API,以免产生费用。更多关于暴力分拣识别的产品介绍,请您点击了解。如您在使用过程中有宝贵意见,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!
-
视频点播发布日志管理服务【新功能】:基于HLS标准加密协议(AES128算法)对HLS文件的TS分片进行加密,客户端通过解密秘钥进行播放。详细的操作与描述:视频加密是对视频内容保护的一种手段。华为云支持对视频中的内容进行HLS AES128加密,有效防止视频泄露和盗链问题。操作步骤1.登录视频点播控制台。2.在左侧导航栏选择“全局设置 > 安全设置”,单击“加密设置”,弹出“加密设置”界面,如图1所示。图1 加密设置页面 3.配置合法的能够提供秘钥的URL,单击“确认”。如需要对上传转码后的视频进行加密,还需在转码模板开启“加密”开关,详情可参考转码设置。
推荐直播
-
用码道,让你的AI作品三步上朋友圈2026/08/04 周二 19:00-20:00
林华鼎-华为云AI开发者运营负责人
从入门 · 到做AI应用 · 到企业级开发。不教编程,只教用AI · 零代码、有产出、能带走、可炫耀 · 每课人人动手实操
回顾中 -
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
基于华为云码道,构建你的定制化AI搭子2026/08/14 周五 09:00-11:30
明亮-华为云开发者发展与支持部部长
本期直播将向您全面介绍华为云码道产品,并基于码道手把手教你部署自己的定制化AI陪伴搭子。
回顾中
热门标签