通过python程序调取摄像头画面

2023-11-20

1 方法

想要调取摄像头画面有这么几个前提:

  • 需要使用网络摄像头并且支持RTSP协议
  • 摄像头要和你的电脑在同一个局域网下
  • 需要知道摄像头的账号、密码、IP地址

RTSP协议是一种网络传输协议,不同的摄像头厂商可能都有各自的协议格式,但无论是哪种格式都一定会需要摄像头的账号、密码、IP地址

厂家 RTSP协议格式
海康威视老版本(2015) rtsp://用户名:密码@IP地址/h264/ch通道/main/av_stream
海康威视新版本 rtsp://用户名:密码@IP地址//Streaming/Channels/通道
大华 rtsp://用户名:密码@IP地址/cam/realmonitor?channel=通道 &subtype=0
宇视 rtsp://用户名:密码@IP地址/video1

流程:

  1. 导入opencv库,需要注意的是导入的时候名字要写 import cv2
  2. 执行 cap = cv2.VideoCapture(RTSP协议) 连接指定的摄像头
  3. 执行 cap.isOpened() 判断摄像头是否连接成功,如果返回True则代表连接成功可以继续操作,如果返回False则代表连接失败,一般是因为RTSP协议有问题,可能是不同产家的摄像头协议不同或者输入的摄像头数据有误
  4. 如果想要截图则执行 cv2.imwrite(截图名字, cap.read()[1])
  5. 如果要实时显示画面则要先执行 cv2.namedWindow(窗口名字, flags=cv2.WINDOW_FREERATIO) 创建一个显示画面的窗口,然后执行 ***cv2.imshow(窗口名字, cap.read()[1])***显示实时画面

2 演示代码

import datetime
import os.path as osp
import multiprocessing as mp
import os
import cv2


def main():
	# 摄像头信息
	cameraInfs = [
        {'user': "admin", 'pwd': "admin", 'ip': "192.168.1.63"},  
        {'user': "admin", 'pwd': "admin", 'ip': "192.168.1.62"},  
        {'user': "admin", 'pwd': "admin", 'ip': "192.168.1.65"},  
        {'user': "admin", 'pwd': "admin", 'ip': "192.168.1.64"},  
    ]
    processes = []  # 子进程列表
    savePath = "./ImageDatas/"		# 截图保存位置
    num = 0			# 摄像头窗口名字
    if not osp.exists(savePath):  # 创建截取的摄像头图片的临时保存文件夹
        os.makedirs(savePath)
    # 创建子进程分别处理每一个摄像头
    for cameraInf in cameraInfs:  
        processes.append(mp.Process(target=get_image,
                                    args=(savePath, cameraInf['user'], cameraInf['pwd'],
                                          cameraInf['ip'], num)))
        num += 1
    for process in processes:
        process.daemon = True
        process.start()
    for process in processes:
        process.join()


# 连接并获取摄像头数据
def get_image(savePath, user, pwd, ip, channel=1, window_name):
    try:
        # 海康威视打开摄像头
        cap = cv2.VideoCapture("rtsp://%s:%s@%s//Streaming/Channels/%d" % (user, pwd, ip, channel))
        if not cap.isOpened():
            # 大华打开摄像头
            cap = cv2.VideoCapture(
                "rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))
        if not cap.isOpened():
            # 宇视打开摄像头
            cap = cv2.VideoCapture("rtsp://%s:%s@%s/video1" % (user, pwd, ip))

        if cap.isOpened():  # 连接成功
            cv2.namedWindow(window_name, flags=cv2.WINDOW_FREERATIO)    # 创建一个用于显示画面的窗口
            name = savePath + ip + ".jpg"
            last_time = datetime.datetime.now()  # 上一次的时间
            while True:
            	cv2.imshow(window_name, frame)
                cur_time = datetime.datetime.now()  # 当前时间
                if (cur_time - last_time).seconds >= 60:  # 如果间隔超过一分钟就截图
                    cv2.imwrite(name, cap.read()[1])  # 截图
                    last_time = cur_time
                    print("保存成功")
    except Exception as err:
        print(err)
        print("打开摄像头失败")


if __name__ == '__main__':
    main()

3 总结

  • 如果是要读取一个新的摄像头数据,首先要初始化摄像头,基本的流程就是用网线把摄像头、电脑相连,然后把电脑的IP地址改成和摄像头默认地址相同网段的地址,通过浏览器输入摄像头的默认地址就可以进入摄像头的控制界面,设置用户名和密码之后就能正常使用了。
  • 通过这个程序我也意识到为什么家里的WIFI密码要设置复杂一点,如果很容易连上你家里的WIFI并且刚好家里有摄像头是很容易通过IP搜索工具找到摄像头的IP地址,这个时候如果有心怀不轨的人就可以不断尝试你的摄像头账户密码,如果刚好图方便设置的是默认账户密码或者很简单的就很容易被人破解,这样就能随时随地查看到你家里的监控画面。所以对于WIFI密码、摄像头账户密码还是要设置的复杂一些比较好,安全隐私是第一位!当然现在的摄像头都是有一个密码错误上限的,基本上输入密码连续错误四五次就会锁住要等一段时间才能尝试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过python程序调取摄像头画面 的相关文章

  • 从 1D 列表创建 2D 列表

    我对 Python 有点陌生 我想将一维列表转换为二维列表 给定width and length这个的matrix 说我有一个list 0 1 2 3 我想做一个2 by 2该列表的矩阵 我怎样才能得到matrix 0 1 2 3 widt
  • 使用 Pandas 数据框中的字数统计来删除仅包含一个单词的行

    我有一个包含 2 条记录的数据框 数据 id text 0001 The farmer plants grain 0002 tuna 我想统计一下里面的单词数text该数据框的列并删除只有一个单词的行 我知道如何计算单词数 count da
  • 如何从网站中抓取动态内容?

    所以我使用 scrapy 从亚马逊图书部分抓取数据 但不知何故我知道它有一些动态数据 我想知道如何从网站中提取动态数据 到目前为止我已经尝试过以下方法 import scrapy from items import AmazonsItem
  • 如何获取右侧数据框中不在左侧数据框中的数据

    我有两个数据帧 我正在尝试输出其中一个数据帧中的数据 而不是另一个数据帧中的数据 我可以使用第一个数据帧中的数据 但不能使用第二个数据帧中的数据 only new old merge new outer on Employee ID Ben
  • 二进制数据的Python字符串表示

    我试图理解 Python 显示表示二进制数据的字符串的方式 这是一个使用的示例乌兰多姆操作系统 http docs python org library os html os urandom In 1 random bytes os ura
  • 使用记事本打开文本文件作为python中的帮助文件?

    我想为我的简单程序的用户提供打开帮助文件的机会 以指导他们如何充分利用我的程序 理想情况下 我希望在 GUI 上有一个蓝色的小帮助链接 可以随时单击该链接 从而在本机文本编辑器 例如记事本 中打开 txt 文件 有没有一种简单的方法可以做到
  • 如何创建毫秒粒度的 Python 时间戳?

    我需要一个自纪元以来的毫秒 ms 时间戳 这应该不难 我确信我只是缺少一些方法datetime或类似的东西 实际上微秒 s 粒度也很好 我只需要亚 1 10 秒的计时 例子 我有一个每 750 毫秒发生一次的事件 假设它检查灯是否打开或关闭
  • VS Code Pylint 在缺失的函数/类文档字符串上用蓝色下划线突出显示整个函数

    这种情况突然开始发生 当出现缺少函数文档字符串警告时 python pylint 会用蓝色波浪线突出显示整个函数 我怎样才能让它只突出显示函数定义或在定义行上制作一个小指示器 在开发时突出显示整个文件是非常烦人的 这是缺少类文档字符串的示例
  • 从另一个文件覆盖函数中的变量

    一 总结 我不知道如何从另一个文件覆盖函数中的变量 2 示例 2 1 配置 I use logbook http logbook pocoo org and pyfancy https github com ilovecode1 Pyfan
  • 导入 scipy.stats 时,出现“ImportError: DLL load failed: 找不到指定的过程”

    我无法导入 scipy stats 并收到以下错误 但不知何故 import scipy as sp 仍然可以正常工作 其他库如numpy pandas都可以毫无问题地导入 我尝试在 Anaconda 中重新安装 scipy 1 2 1 降
  • 在我的 Mac 上以 root 身份运行 pip 时出现“权限被拒绝”

    我开始使用我的 Mac 来安装 Python 包 就像我在工作中使用 Windows PC 一样 然而在我的 Mac 上我经常遇到没有权限写入日志文件或站点包时出错 于是我想到了跑步pip install
  • 将 pandas 多索引数据帧转换为嵌套字典

    我有一个 pandas 多索引数据框 我试图将其输出为嵌套字典 create the dataset data clump thickness 0 0 274 0 0 1 19 0 1 0 67 0 1 1 12 0 2 0 83 0 2
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • 如何避免在matplotlib中调用latex(输出到pgf)

    我使用 matplotlib 及其 pgf 后端来生成包含在 LaTeX 投影仪文档中的绘图 当我使用未定义的乳胶命令时 我遇到了麻烦 但对于我的应用程序 我不需要 matplotlib 来使用 Latex 生成标签或注释 我只想要正确的
  • 当我移动我的 pygame 角色时,它会留下痕迹[重复]

    这个问题在这里已经有答案了 我一直在尝试用 Python 制作一个游戏 但是当我移动我的角色时 它会留下痕迹 我知道它并没有显示出那么多 但如果你靠近的话 你可以看到这条踪迹 这真的让我很困扰 这是我的代码 import pygame im
  • 在 grpc python 中处理异步流请求

    我试图了解如何使用双向流处理 grpc api 使用 Python API 假设我有以下简单的服务器定义 syntax proto3 package simple service TestService rpc Translate stre
  • django 南迁移,不设置默认值

    我使用 South 来迁移我的 Django 模型 然而 南方有一个令人讨厌的错误 它不会在 Postgres 数据库中设置默认值 例子 created at models DateTimeField default datetime no
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s

随机推荐

  • Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别

    一 前提 sklearn里的封装好的各种算法使用前都要fit fit相对于整个代码而言 为后续API服务 fit之后 然后调用各种API方法 transform只是其中一个API方法 所以当你调用transform之外的方法 也必须要先fi
  • 送书|入门Python之后还是搞不定面试、做不来项目,推荐读读这本书

    又到了每周三送书的时刻啦 本周送书 Python工匠 Python 能干的事情实在太多了 掰着指头数有点不够用 Web 开发 数据分析 网络爬虫 自动化运维 后台开发 机器学习 如果你知道主攻哪个方向 只需重点去学习 不过 不论哪个方向 P
  • 阿里云sls日志服务的简单监控 php实现

    欢迎加入 新群号码 99640845 由于工作需要最近接触了阿里云的sls日志服务 写了一个基于阿里云sls日志服务和SDK的简单的监控脚本 首先需要开通阿里云的日志服务并且可以通过控制台读取相应日志 这里不就不详细说了 http blog
  • Qemu-KVM基本工作原理分析

    1 理解KVM与Qemu的关系 我们都知道开源虚拟机KVM 并且知道它总是跟Qemu结合出现 那这两者之间有什么关系呢 首先 Qemu本身并不是KVM的一部分 而是一整套完整的虚拟化解决方案 它是纯软件实现的 包括处理器虚拟化 内存虚拟化以
  • 斜体文本测试

    加粗样式
  • Spring:基本概念

    Spring是一款全栈式轻量级开源框架 主要解决的是程序间耦合的问题 两大核心 控制反转IOC 面向切面编程AOP 能够整合众多著名的第三方框架和类库 是实际开发中使用最多的企业应用级开源框架 2017年9月发布了spring的最新版本sp
  • 以太网(Ethenet)协议

    1 定义 以太网协议用于实现链路层的数据传输和地址封装 MAC 由DIX联盟 Digital Intel Xerox 开发 2 封装 原理 由Ethenet II 封装 三个字段 Destination 目的字段 标识目的通信方的MAC地址
  • SpringCloud简单搭建(Erueka、Feign、Gateway)

    父工程 SpringCloud 配置文件 pom xml
  • 语音方向总结-给新人

    一张图总结下语音方向 算法 以及开源工程 给需要找工作以及想深入研究方向同学一张思维图 对应的职业发展路径如下
  • 什么是模块,什么是组件

    相同 都是基于功能划分的单位 比如说完成网络功能的组件 模块 完成统计功能的组件 模块 这二者没有上下级的包含关系 模块可以由多个组件构建 独立的组件也通常由多个模块实现 不同 组件 偏向发行的概念 outside 1 强调的是 跨项目的可
  • 解决opencv读取(保存)不了路径为中文名的图片办法

    读取图片 img cv2 imdecode np fromfile inputpath dtype np uint8 1 保存图片 cv2 imencode jpg rotated img 1 tofile outpath jpg 按自己需
  • Django REST framework框架,前后端分离

    介绍 Web应用前后端分离结构 Web API接口设计的RESTful风格 Django REST framework框架 1 引入Django REST framework 在本章中 我们要大家介绍为什么学习Django REST fra
  • SpringMVC 提示:HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----

    今天在编写文件上传模块时 使用postman 上传文件测试相关功能时 提示如下错误信息 timestamp 1473349676109 status 415 error Unsupported Media Type exception or
  • 最新JavaFx JDK17如何正确的打出可以使用的exe软件包

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 提前需要准备 二 打包步骤 1 现将module info java删除 选中module info java 鼠标右键 Refactor 然后选择saf
  • 蓝桥杯-快乐数-力扣

    202 快乐数 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果这个过程 结果为 1 那
  • Raspberry Pi上设置I2C LCD

    在本教程中 我将向您展示使用I2C设置LCD所需的一切 连接LCD I2C也被称为两线接口 因为它仅使用两根线来发送和接收数据 实际上 如果算上Vcc和地线 则是4线 但是电源始终可以来自其他来源 连接启用I2C的LCD 将LCD与I2C背
  • 用SRGAN提升图片清晰度(TensorFlow)

    近两年GAN Generative Adversarial Network 相关的论文大火了一把 我自己也体验了几次 确实是很神奇的网络 GAN的各种变体基本都是用来生成图片的 关于GAN相关的说明这里不多讲 如有需要了解的可以自行搜索 但
  • 量化交易之linux篇 - shell脚本 - 遍历当前目录并判断文件类型及后缀

    bin bash 第一种写法 for file in ls do if f file file py then echo file is py file elif f file file txt then echo file is txt
  • python教程05-算术运算符的基本使用、赋值运算符的使用、比较运算符的使用、逻辑运算符的使用

    python教程 小白入门 2020 7 18 学习目标 文章目录 python教程 小白入门 2020 7 18 P31 算术运算符的基本使用 P32 字符串里的算术运算符 P33 赋值运算符的使用 P34 赋值运算符的特殊场景 P35
  • 通过python程序调取摄像头画面

    目录 1 方法 2 演示代码 3 总结 1 方法 想要调取摄像头画面有这么几个前提 需要使用网络摄像头并且支持RTSP协议 摄像头要和你的电脑在同一个局域网下 需要知道摄像头的账号 密码 IP地址 RTSP协议是一种网络传输协议 不同的摄像