热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

paddlex,2.1.0识别预测代码(包含视频的)

官方目前训练完自带的predict.py里面只有识别图片的,没有识别视频的。各种百度踩坑后,今天写成!opencv-python是4.5

官方目前训练完自带的predict.py里面只有识别图片的,没有识别视频的。

各种百度踩坑后,今天写成!opencv-python 是 4.5.5.64版本的,比较新,所以语法有可能会不一样。请注意根据自己的版本修改,或者直接升级opencv-python

# 脚本运行依赖paddlex
# pip install paddlex
import cv2
import os
import paddlex as pdx
import argparse
import jsondef pred(args):if(args.use_gpu == False):predictor = pdx.deploy.Predictor(args.model_dir)else :predictor = pdx.deploy.Predictor(args.model_dir, use_gpu=True)if(args.img_file is not None):try:result = predictor.predict(img_file=args.img_file)print("result:" + json.dumps(result))pdx.det.visualize(args.img_file, result, threshold=0.5, save_dir=args.save_dir)except Exception as e :print(e) # 最好包一层 try catch 有时会识别不出来 会报 list index out rangeelif(args.video_file is not None):images_mats = video_to_image(args.video_file, args.fps)fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')videoWriter = cv2.VideoWriter(args.save_dir + getfilename(args.video_file), fourcc, int(args.fps), (int(images_mats[2]),int(images_mats[1])), True)for image in images_mats[0]:try:result = predictor.predict(img_file=image)print("result:" + json.dumps(result))image_res = pdx.det.visualize(image, result, threshold=0.5, save_dir=None)videoWriter.write(image_res)except Exception as e:videoWriter.write(image)print(e) # 最好包一层 try catch 有时会识别不出来 会报 list index out rangevideoWriter.release()return resultdef video_to_image(video_path, nfps):"""视频解析为图片到指定文件夹:param video_path:视频路径:param nfps:每秒多少张图片:return:"""# 加载视频文件camera = cv2.VideoCapture(video_path)# 帧数times = 0images = []# 帧率(frames per second) 原视频的fps = camera.get(cv2.CAP_PROP_FPS)# 总帧数(frames)frames = camera.get(cv2.CAP_PROP_FRAME_COUNT)# 视频高度frame_height = camera.get(cv2.CAP_PROP_FRAME_HEIGHT )# 视频宽带frame_width = camera.get(cv2.CAP_PROP_FRAME_WIDTH)# 求要取的帧数frame_frequency = int(fps/nfps)print("帧数:"+str(fps))print("总帧数:"+str(frames))print("视屏总时长:"+"{0:.2f}".format(frames/fps)+"秒")while True:times += 1res, image = camera.read()if not res:breakif times % frame_frequency == 0:images.append(image)return images, frame_height, frame_widthdef getfilename(path):return os.path.basename(path) #输出为 1.mp4def parse_args():parser = argparse.ArgumentParser()parser.add_argument('--use_gpu', default=False, type=bool)parser.add_argument('--model_dir', default='./inference_model', type=str)parser.add_argument('--gpu_id ', default=0, type=int)parser.add_argument('--img_file', default=None, type=str)parser.add_argument('--video_file', default=None, type=str)parser.add_argument('--fps', default=5, type=int) #识别后的视频的fps,考虑到识别效率一般设置小一点的数parser.add_argument('--save_dir', default='./output/', type=str)args = parser.parse_args()args.video_file="C:\\Users\\hurui\\Desktop\\1.mp4" # 方便vscode直接F5调试if (args.img_file is None and args.video_file is None): sys.exit(1)return argsif __name__ == '__main__':args = parse_args()result = pred(args)if result is not None:print('Done!')else:print('Does not any objects!')


推荐阅读
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 本文介绍如何使用 Python 的 xlrd 库读取 Excel 文件,并将其数据处理后存储到数据库中。通过实际案例,详细讲解了文件路径、合并单元格处理等常见问题。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • Python第三方库安装的多种途径及注意事项
    本文详细介绍了Python第三方库的几种常见安装方法,包括使用pip命令、集成开发环境(如Anaconda)以及手动文件安装,并提供了每种方法的具体操作步骤和适用场景。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 华为USG基于源地址的多出口策略路由配置
    网络拓扑如下:组网情况:企业用户主要有技术部(VLAN10)和行政部(VLAN20),通过汇聚交换机连接到USG。企业分别通过两个不同运营商(ISP1和ISP2)连接到 ... [详细]
author-avatar
死性不改2502857027
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有