海康多相机同步取流保存图片
话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。
#"rtsp://admin:123456qq@192.168.10.192/stream1"
# rtsp://admin:Admin123@192.168.100.103:554/Streaming/Channels/101
#rtsp://admin:Admin123@192.168.100.103:554/cam/realmonitor?channel=1&subtype=0import time
import multiprocessing as mp
import cv2
import os"""
Source: Yonv1943 2018-06-17
https://github.com/Yonv1943/Python
https://zhuanlan.zhihu.com/p/38136322
OpenCV official demo
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html
海康、大华IpCamera RTSP地址和格式(原创,旧版)- 2014年08月12日 23:01:18 xiejiashu
rtsp_path_hikvison = "rtsp://%s:%s@%s/h265/ch%s/main/av_stream" % (user, pwd, ip, channel)
rtsp_path_dahua = "rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel)
https://blog.csdn.net/xiejiashu/article/details/38523437
最新(2017)海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明 - 2017年05月13日 10:51:46 xiejiashu
rtsp_path_hikvison = "rtsp://%s:%s@%s//Streaming/Channels/%d" % (user, pwd, ip, channel)
https://blog.csdn.net/xiejiashu/article/details/71786187
"""def image_put(q, user, pwd, ip, channel=1):# cap = cv2.VideoCapture("rtsp://%s:%s@%s/stream1" % (user, pwd, ip))# cap = cv2.VideoCapture("rtsp://%s:%s@%sStreaming/Channels/1701?transportmode=unicast" % (user, pwd, ip))# if cap.isOpened():# print('HIKVISION')# else:# cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))# print('DaHua')cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))if cap.isOpened():print('HIKVISION')else:cap = cv2.VideoCapture("rtsp://admin:123456qq@192.168.100.12/stream1")print('Genius')while True:q.put(cap.read()[1])q.get() if q.qsize() > 1 else time.sleep(0.01)def run_opencv_camera():user, pwd, ip, channel = "admin", "123456qq", "33.90.7.110", 1cap_path = 0 # local camera (e.g. the front camera of laptop)# cap_path = 'video.avi' # the path of video file# cap_path = "rtsp://%s:%s@%s/h264/ch%s/main/av_stream" % (user, pwd, ip, channel) # HIKIVISION old version 2015# cap_path = "rtsp://%s:%s@%s//Streaming/Channels/%d" % (user, pwd, ip, channel) # HIKIVISION new version 2017# cap_path = "rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel) # dahuacap = cv2.VideoCapture(cap_path)while cap.isOpened():is_opened, frame = cap.read()cv2.imshow('frame', frame)cv2.waitKey(1000)cap.release()def image_get_s(queue_list, ip, img_path):"""show in single opencv-imshow window"""window_name1 = "%s" % ip[0]window_name2 = "%s" % ip[1]window_name3 = "%s" % ip[2]# window_name4 = "%s" % ip[3]idx_img = 0cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name3, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name4, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]img3 = imgs[2]# img4 = imgs[3]img1_tmp = cv2.resize(img1, (int(1920/2 ), int(1080/2 )))img2_tmp = cv2.resize(img2, (int(1920/2 ), int(1080/2 )))img3_tmp = cv2.resize(img3, (int(1920 / 2), int(1080 / 2)))# img4_tmp = cv2.resize(img4, (int(1920 / 2), int(1080 / 2)))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)cv2.imshow(window_name3, img3_tmp)# cv2.imshow(window_name4, img4_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)key = cv2.waitKey(1)if key == ord('s'):img_path0 = os.path.join(img_path[0], str(idx_img) + '.jpg')cv2.imwrite(img_path0, img1)img_path1 = os.path.join(img_path[1], str(idx_img) + '.jpg')cv2.imwrite(img_path1, img2)img_path2 = os.path.join(img_path[2], str(idx_img) + '.jpg')cv2.imwrite(img_path2, img3)# img_path3 = os.path.join(img_path[3], str(idx_img) + '.jpg')# cv2.imwrite(img_path3, img3)# idx_img += 1def image_get_all(queue_list, ip, img_path):"""show in single opencv-imshow window"""window_name1 = "%s" % ip[0]window_name2 = "%s" % ip[1]# window_name3 = "%s" % ip[2]# window_name4 = "%s" % ip[3]idx_img = 0cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name3, flags=cv2.WINDOW_FREERATIO)# cv2.namedWindow(window_name4, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]# img3 = imgs[2]# img4 = imgs[3]img1_tmp = cv2.resize(img1, (int(1920/2 ), int(1080/2 )))img2_tmp = cv2.resize(img2, (int(1920/2 ), int(1080/2 )))# img3_tmp = cv2.resize(img3, (int(1920/4), int(1080/ 4)))# img4_tmp = cv2.resize(img4, (int(1920 / 4), int(1080 / 4)))# print('11',len(img1_tmp))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)# cv2.imshow(window_name3, img3_tmp)# cv2.imshow(window_name4, img4_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)cv2.waitKey(1)cv2.imwrite(img_path[0]+str(idx_img)+'.jpg', img1)cv2.imwrite(img_path[1]+str(idx_img)+'.jpg', img2)# cv2.imwrite(img_path[2]+str(idx_img)+'.jpg', img3)# cv2.imwrite(img_path[3]+str(idx_img) +'.jpg',img4)idx_img +=1def run_single_camera():# user_name, user_pwd, camera_ip = "admin", "admin123456", "172.20.114.196"# user_name, user_pwd, camera_ip = "admin", "Admin123", "192.168.100.103:554"user_name, user_pwd, camera_ip = "admin", "Admin123", "192.168.100.100:554"mp.set_start_method(method='spawn') # initqueue = mp.Queue(maxsize=2)processes = [mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)),mp.Process(target=image_get_s, args=(queue, camera_ip))][process.start() for process in processes][process.join() for process in processes]def run_multi_camera():user_name, user_pwd = "admin", "Admin123"camera_ip_l = [# "172.20.114.196", # ipv4# "[fe80::3aaf:29ff:fed3:d260]", # ipv6# "192.168.100.180:554",# "192.168.100.182:554","192.168.100.181:554","192.168.100.184:554",]mp.set_start_method(method='spawn') # initqueues = [mp.Queue(maxsize=len(camera_ip_l)) for _ in camera_ip_l]imgs_path = []for i in range(len(camera_ip_l)):imgs_path.append("E:/dataset_0902/images/{}/".format(camera_ip_l[i].split('.')[-1].split(':')[0]))if not os.path.exists(imgs_path[-1]):os.makedirs(imgs_path[-1])processes = [mp.Process(target=image_get_all, args=(queues, camera_ip_l, imgs_path))]for queue, camera_ip, img_path in zip(queues, camera_ip_l, imgs_path):processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))for process in processes:process.daemon = Trueprocess.start()for process in processes:process.join()# p.join()def image_collect(queue_list, camera_ip_l):import numpy as np"""show in single opencv-imshow window"""window_name1 = "%s_and_so_no" % camera_ip_l[0]window_name2 = "%s_and_so_no" % camera_ip_l[1]cv2.namedWindow(window_name1, flags=cv2.WINDOW_FREERATIO)cv2.namedWindow(window_name2, flags=cv2.WINDOW_FREERATIO)while True:imgs = [q.get() for q in queue_list]img1 = imgs[0]img2 = imgs[1]# cv2.imshow(window_name1, img1)# cv2.imshow(window_name2, img2)img1_tmp = cv2.resize(img1, (int(1920 / 2), int(1080 / 2)))img2_tmp = cv2.resize(img2, (int(1920 / 2), int(1080 / 2)))cv2.imshow(window_name1, img1_tmp)cv2.imshow(window_name2, img2_tmp)# imgs = np.concatenate(imgs, axis=1)# cv2.imshow(window_name, imgs)cv2.waitKey(1)# if key == ord('s'):# img_path = os.path.join(img_folder, str(idx_img) + '.jpg')# cv2.imwrite(img_path, img)# idx_img += 1# """show in multiple opencv-imshow windows"""# [cv2.namedWindow(window_name, flags=cv2.WINDOW_FREERATIO)# for window_name in camera_ip_l]# while True:# for window_name, q in zip(camera_ip_l, queue_list):# cv2.imshow(window_name, q.get())# cv2.waitKey(1)def run_multi_camera_in_a_window():user_name, user_pwd = "admin", "Admin123"camera_ip_l = [# "172.20.114.196", # ipv4# "[fe80::3aaf:29ff:fed3:d260]", # ipv6"192.168.100.182:554","192.168.100.183:554"]mp.set_start_method(method='spawn') # initqueues = [mp.Queue(maxsize=2) for _ in camera_ip_l]processes = [mp.Process(target=image_collect, args=(queues, camera_ip_l))]for queue, camera_ip in zip(queues, camera_ip_l):processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))for process in processes:process.daemon = True # setattr(process, 'deamon', True)process.start()for process in processes:process.join()def get_biaoding():user, pwd, ip, channel = "admin", "Admin123", "192.168.100.182:554", 1cap = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % (user, pwd, ip, channel))if cap.isOpened():print('HIKVISION')idx_img = 20img_folder = "D:/20210226/camera{}".format(ip.split('.')[-1].split(':')[0])if not os.path.exists(img_folder):os.makedirs(img_folder)while True:img = cap.read()[1]img_tmp = cv2.resize(img, (1920 // 2, 1080 // 2))cv2.imshow('image', img_tmp)key = cv2.waitKey(1)if key == ord('s'):img_path = os.path.join(img_folder, str(idx_img) + '.jpg')cv2.imwrite(img_path, img)idx_img += 1def get_img():cap1 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.181:554/", 1))# cap2 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.182:554/", 1))# cap3 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.183:554/", 1))# cap4 = cv2.VideoCapture("rtsp://%s:%s@%s/cam/realmonitor?channel=%d&subtype=0" % ("admin", "Admin123", "192.168.100.184:554/", 1))img_save1 = "E:/dataset_0902/calibrate_intri/181"# img_save1 = "D:/20210308/camera/181"# img_save2 = "D:/20210225/camera/182"# img_save3 = "D:/20210225/camera/183"# img_save4 = "D:/20210225/camera/184"if not os.path.exists(img_save1):os.makedirs(img_save1)# if not os.path.exists(img_save2):# os.makedirs(img_save2)# if not os.path.exists(img_save3):# os.makedirs(img_save3)# if not os.path.exists(img_save4):# os.makedirs(img_save4)if cap1.isOpened():print('HIKVISION')idx_img = 0while True:time1 = cap1.get(cv2.CAP_PROP_POS_MSEC)print(time1)img1 = cap1.read()[1]if (img1 is None):print("ok")continuecv2.imwrite(img_save1 + '/' + str(idx_img) + '.jpg', img1)idx_img = idx_img + 1# key = cv2.waitKey(1)# if key == ord('s'):# cv2.imwrite()# cv2.imwrite(iimg_save1 + '/' + str(idx_img) + '.jpg', img1mg_save2 + '/' + str(idx_img) + '.jpg', img2)# cv2.imwrite(img_save3 + '/' + str(idx_img) + '.jpg', img3)# cv2.imwrite(img_save4 + '/' + str(idx_img) + '.jpg', img4)# idx_img += 1img1 = cv2.resize(img1, (int(1920 / 4), int(1080 / 4)))cv2.imshow('1', img1)cv2.waitKey(1)if __name__ == '__main__':# get_biaoding()# get_img()run_multi_camera()
相关文章:
海康多相机同步取流保存图片
话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。 #"rtsp://admin:123456qq192.168.10.192/stream1" # rtsp://admin:Admin123192.168.100.103:554/Streaming/Channels/101 #rtsp://admin:Admin123192.168.100.103:554/cam/realmonitor?ch…...
win10 + vs2017 + cmake3.17编译OSG-3.4.1
参考教程:https://blog.csdn.net/bailang_zhizun/article/details/120992244 1. 下载与解压 2. 修改configure 1)Ungrouped Entries -- 》ACTUAL_3RDPARTY_DIR: 设置为: D:/Depend_3rd_party/OSG341/3rdParty 2) Ungrouped E…...
Excel VBA开发基本语句说明
前言 VBA(Visual Basic for Applications)是一种用于编写宏的编程语言,它广泛应用于Microsoft Office套件中的各种应用程序,如Excel、Word、Access和PowerPoint等。在这些应用程序中,VBA可用于自动化任务、定制功能、…...
应用在智能空调中的数字温度传感芯片
智能空调是具有自动调节功能的空调。智能空调系统能根据外界气候条件,按照预先设定的指标对温度、湿度、空气清洁度传感器所传来的信号进行分析、判断、及时自动打开制冷、加热、去湿及空气净化等功能的空调。适合放在卧室,客厅等地方。 在中央控制系统…...
Qt界面美化之Qt Style Sheets
Qt style sheet 简称QSS style sheet可以在代码中单独对某个控件使用,例如: labelLEDLIN new QLabel("",this); labelLEDLIN->setFixedSize(36,36); labelLEDLIN->setStyleSheet("background-color:red;border-radius:18px;colo…...
prometheus监控告警部署(k8s内部)
一、部署prometheus 先来说明一下需要用到的组件,需要使用pv、pvc存放prometheus的数据,使用pvc存放数据即使pod挂了删除重建也不会丢失数据,使用configmap挂载prometheus的配置文件和告警规则文件,使用service开放对外访问prometheus服务的端…...
数字孪生特高压电网三维可视化平台实现能源智能管理
电力是现代社会不可或缺的基础能源,而有效管理电力资源对于实现可持续发展至关重要。近年来,随着物联网、大数据、人工智能等技术的快速发展,电网领域的数字化转型已经成为一种趋势。而其中关键的一环便是电网三维数字孪生技术,它…...
12.JavaScript(WebAPI) - JS api文献精解
文章目录 1.WebAPI 背景知识1.1什么是 WebAPI1.2什么是 API1.3API 参考文档 2.DOM 基本概念2.1什么是 DOM2.2DOM 树 3.获取元素3.1querySelector3.2querySelectorAll 4.事件初识4.1基本概念4.2事件三要素4.3简单示例 5.操作元素5.1获取/修改元素内容5.1.1innerText5.1.2innerHT…...
亚马逊云科技:让生成式AI真正走向普惠
伴随着ChatGPT的横空出世,生成式AI(Artificial Intelligence Generated Content,也称AIGC)大潮也以锐不可当之势席卷全球。从各行各业的商业领袖,到千千万万的程序员和开发者,都在思考如何借助生成式AI技术…...
Java web(四):JSP
文章目录 一、JSP1.1 概述1.2 JSP入门1.3 JSP脚本1.4 缺点 二、EI表达式三、JSTL3.1 标签3.2 JSTL使用3.3 代码演示 四、MVC模式和三层架构五、项目实战【完成增删改查】 一、JSP 1.1 概述 JSP(全称:Java Server Pages):Java 服…...
HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进
前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…...
电子产品上架Temu平台需要做什么认证?UL测试报告
2022年8月17日报道,TEMU正在筹备跨境电商平台。9月1日,TEMU跨境电商平台正式在海外上线,首站将面向北美市场,该平台命名为TEMU,App Store应用详情页显示意为“Team Up,Price Down”,即买得人越多…...
热点报告 | 健身人群抵抗入冬肥,Dirtyfit引领23秋冬潮流?
您是否曾有以下困惑?打开小红书首页推荐,似乎已经被算法教育成了成熟的信息茧房,想要找到下一个热点,又忧虑一叶以障目;看着搜索框热词,又担心无法掌握热词背后的话题命脉,难以在浮光掠影中寻找…...
C++变参模板的使用
C17 1. 使用编译器if常量表达式 template<typename T, typename U, typename... Ts> void syszuxPrint(T arg1, Ts... arg_left) {std::cout << arg1 << ", ";if constexpr (sizeof...(arg_left) > 0){syszuxPrint(arg_left...);} } 但是这…...
【二、http】go的http基本请求设置(设置查询参数、定制请求头)get和post类似
一、设置url后边的参数,(get和post请求为例子) func requstByParamsGet(){requst, err : http.NewRequest(http.MethodGet, "http://httpbin.org/get", nil)if err ! nil {fmt.Println("ss")}params : make(url.Values)p…...
[学习笔记]python绘制图中图(绘制站点分布图)
背景 在绘制站点分布图时,有时需要采用图中图的方式,以便于在一张图中尽可能多的表达信息。此处记录一下利用python matplotlib绘制图中图的脚本,方便然后查询。 包含数据 该绘图脚本中包含以下数据: CMONOC站点分布ÿ…...
回归预测 | Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测
Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测 目录 Matlab实现POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.POA-CNN-SVM鹈鹕算法优化卷积神经网络-支持向量机的多变量回归…...
React 学习笔记
React React.js是一个开源的JavaScript库,由Facebook于2013年开发,用于构建用户界面或UI组件。它主要用于构建单页应用程序或SPA,并且可以在Web和移动应用程序中使用。React.js使用虚拟DOM来提高性能,并使用组件化的方式来实现代…...
单链表的查找(按值查找、按位查找)(数据结构与算法)
什么是单链表? 单链表是一种常见的链式数据结构,用于存储和操作数据元素的集合。它由一系列的节点组成,每个节点包含两个部分:数据域和指针域。 单链表的每个节点包含了存储数据的数据域,以及指向下一个节点的指针域。…...
Qt 6.6 发布
@TOC 前言 Qt 6.6 发布于2023年10月10日 https://www.qt.io/blog/qt-6.6-releasedQt 6.6 系列源码下载 https://download.qt.io/official_releases/qt/6.6/Qt 在线安装器下载 https://download.qt.io/official_releases/online_installers/国内镜像下载 在线安装器(维护工具)…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...
