海康多相机同步取流保存图片
话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。
#"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/国内镜像下载 在线安装器(维护工具)…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...