当前位置:   article > 正文

python调用IP摄像头

python调用IP摄像头

一、手机端下载软件

至于怎么下载??

直接去浏览器搜索,并找到对应的下面的这个即可,也可以用我提供的这个链接去下载

IP Camera摄像头app下载-IP Camera无线摄像头app下载 v28.7.3手机客户端 - 多多软件站

 二、勾选RTSP服务器,然后记下这里的局域网地址,后续会用到

三、在代码中调用即可

值得注意的是,把那个source变成自己的摄像头的地址即可,把下面完整的代码拷贝运行就可以啦,快去试试吧

  1. import cv2
  2. # 替换本地摄像头为网络摄像头地址
  3. source = 'http://admin:admin@10.33.10.220:8081'
  4. cap = cv2.VideoCapture(source)
  5. if not cap.isOpened():
  6. print("无法打开网络摄像头")
  7. exit()
  8. frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  9. frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
  10. fps = cap.get(cv2.CAP_PROP_FPS)
  11. if fps == 0:
  12. fps = 30
  13. # *mp4v 就是解包操作, 等同于 'm' 'p' '4' 'v'
  14. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  15. # avi格式的视频,下面保存视频的时候后缀名要是avi
  16. # fourcc = cv2.VideoWriter_fourcc(*'XVID')
  17. # 检查视频捕捉是否成功打开
  18. print(frame_width, frame_height, fps, fourcc)
  19. # 参数二: 用哪种编码
  20. # 参数三: 帧率
  21. # 参数四: 分辨率, 表示摄像头拍视频, 这个大小搞错了也不行,很重要,要搞清楚自己摄像头的分辨率
  22. vw = cv2.VideoWriter('output.avi', fourcc, fps, (frame_width, frame_height))
  23. # vw = cv2.VideoWriter('output.avi', fourcc, 30, (640, 480))
  24. frame_count = 0
  25. max_frames = int(fps * 100000) # 10秒视频的帧数,假设帧率是30
  26. while cap.isOpened() and frame_count < max_frames:
  27. ret, frame = cap.read()
  28. if not ret:
  29. break
  30. # 写每一帧数据
  31. # vw.write(frame)
  32. # 增加帧计数
  33. frame_count += 1
  34. # 注释掉显示部分的代码
  35. cv2.imshow('frame', frame)
  36. if cv2.waitKey(1) == ord('q'):
  37. break
  38. print('done')
  39. vw.release()
  40. cap.release()
  41. cv2.destroyAllWindows()

四、也可以用多个摄像头

这个streams.txt 每个视频源单独成行

本地摄像头填0

USB摄像头填1,2,3…

IP摄像头要根据摄像头类型,按下面格式填写

  1. rtsp://admin(账号):admin(密码)@ip:端口/(主码流,辅码流之类的
  2. http

 

代码如下:

  1. import cv2
  2. import numpy as np
  3. # 读取文件内容
  4. with open('streams.txt', 'r') as file:
  5. sources = file.read().splitlines()
  6. # 初始化捕捉对象列表和 VideoWriter 对象
  7. caps = []
  8. vws = []
  9. frame_widths = []
  10. frame_heights = []
  11. fps = []
  12. max_frames = []
  13. for i, source in enumerate(sources):
  14. print(source, type(source))
  15. if source.isdigit():
  16. cap = cv2.VideoCapture(int(source))
  17. else:
  18. cap = cv2.VideoCapture(source)
  19. if not cap.isOpened():
  20. print(f"无法打开摄像头: {source}")
  21. continue
  22. # 添加摄像头到列表
  23. caps.append(cap)
  24. # 获取摄像头参数
  25. frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  26. frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
  27. frame_widths.append(frame_width)
  28. frame_heights.append(frame_height)
  29. current_fps = cap.get(cv2.CAP_PROP_FPS)
  30. if current_fps == 0:
  31. current_fps = 30
  32. fps.append(current_fps)
  33. # 创建 VideoWriter 对象
  34. fourcc = cv2.VideoWriter_fourcc(*'XVID')
  35. output_filename = f'output_{i}.avi'
  36. vw = cv2.VideoWriter(output_filename, fourcc, current_fps, (frame_width, frame_height))
  37. vws.append(vw)
  38. # 计算最大帧数(10000秒)
  39. max_frames.append(int(current_fps * 10000))
  40. # 主循环
  41. frame_counts = [0] * len(caps)
  42. exit_flag = False
  43. while not exit_flag:
  44. for i, cap in enumerate(caps):
  45. if not cap.isOpened():
  46. continue
  47. ret, frame = cap.read()
  48. if not ret:
  49. continue
  50. # 写每一帧数据到对应的 VideoWriter
  51. vws[i].write(frame)
  52. # 增加帧计数
  53. frame_counts[i] += 1
  54. # 注释掉显示部分的代码
  55. cv2.imshow(f'frame_{i}', frame)
  56. # 检查是否按下 'q' 键以退出
  57. if cv2.waitKey(1) == ord('q'):
  58. exit_flag = True
  59. break
  60. # 检查所有摄像头是否已达到最大帧数
  61. if all(frame_count >= max_frames[i] for i, frame_count in enumerate(frame_counts)):
  62. exit_flag = True
  63. print('done')
  64. # 释放所有捕捉对象和 VideoWriter
  65. for cap in caps:
  66. cap.release()
  67. for vw in vws:
  68. vw.release()
  69. cv2.destroyAllWindows()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/942516
推荐阅读
相关标签
  

闽ICP备14008679号