海康多相机同步取流保存图片

2023-11-02 05:12

本文主要是介绍海康多相机同步取流保存图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

话不多说,直接上代码。代码里包含了多窗口显示图像和保存图片。

#"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()

这篇关于海康多相机同步取流保存图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328362

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,

恶意PNG:隐藏在图片中的“恶魔”

&lt;img src=&quot;https://i-blog.csdnimg.cn/blog_migrate/bffb187dc3546c6c5c6b8aa18b34b962.jpeg&quot; title=&quot;214201hhuuhubsuyuukbfy_meitu_1_meitu_2.jpg&quot;/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re