海康摄像头获取图片

少废话,终极解决方案:

import requests
from requests.auth import HTTPDigestAuth

url = "http://{}:{}@172.18.45.18/ISAPI/Streaming/channels/33/picture".format("admin", "asdf1234")

resp = requests.get(url, auth=HTTPDigestAuth('admin', 'asdf1234'))
aa = 1
with open("a.jpg", "wb") as f:
    f.write(resp.content)

用http的方式获取摄像头图片

curl --insecure --anyauth -u admin:asdf1234 -X GET http://admin:asdf1234@172.18.45.18/ISAPI/Streaming/channels/33/picture >b.jpeg

这样也是可以的

import datetime
import os

username = "admin"
password = "asdf1234"
return_code = os.system(
    'curl --insecure --anyauth -u {}:{} -X GET http://{}:{}@172.18.45.18/ISAPI/Streaming/channels/33/picture >2.jpg'.format(
        username, password, username, password))
print("return code:", return_code, datetime.datetime.now())
 

用一种方式读取视频流并截图:

import sys
import uuid

import cv2
import os, time
import datetime
from multiprocessing import Process

sys.path.append(os.path.abspath(os.path.join(__file__, "..", "..")))
import feishu

folder_name = "/data/camera/shapan_own"
log_path = "/data/camera/shapan_own/xferlog"
os.makedirs(folder_name, exist_ok=True)
timeF = 75  # 视频帧计数间隔频率, 这样就是1秒抽取1帧率


# Wed Jul 20 15:51:29 2022 1 172.18.45.18 334718 /172.18.45.18/172.18.45.18_01_20220720155203988_TIMING.jpg b _ i g test ftp 0 * c
def save_img(video_path=r"rtsp://admin:123456@172.18.45.15:554/h264/ch1/main/av_stream"):
    ip = video_path.split("@")[1][0:12]
    vc = cv2.VideoCapture(video_path)  # 读入视频文件
    c = 1
    if vc.isOpened():  # 判断是否正常打开
        pass
    else:
        error_msg = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " can not open:" + video_path
        feishu.Feishu()(file=__file__, line_no=sys._getframe().f_lineno, msg=error_msg)
        raise Exception(error_msg)
    pic_path = folder_name + '/' + ip
    if not os.path.exists(pic_path):
        oldmask = os.umask(000)
        os.makedirs(pic_path, exist_ok=True)
        os.umask(oldmask)
    while True:  # 循环读取视频帧
        rval = vc.grab()
        if rval:
            if (c % timeF == 0):  # 每隔timeF帧进行存储操作
                t = time.localtime()
                ret, frame = vc.retrieve()
                pic_name = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + "_" + uuid.uuid4().hex + ".jpg"
                full_path_name = os.path.join(pic_path, pic_name)
                #cv2.imwrite("./pic/" + pic_name, frame)
                cv2.imwrite(full_path_name, frame)  # 存储为图像,保存名为 文件夹名_数字(第几个文件).jpg
                print(full_path_name)
                log_path_pic_name = "/" + ip + "/" + pic_name
                line = f"{time.asctime(t)} 0 {ip} {frame.size} {log_path_pic_name} a _ i r test ftp 0 * c{os.linesep}"
                with open(log_path, "a") as f:
                    f.write(line)
        c = c + 1
        cv2.waitKey(1)
    vc.release()


if __name__ == '__main__':
    stream_list = [
        "rtsp://admin:123456@172.18.45.14:554/h264/ch1/main/av_stream",  # 展厅西南角
        "rtsp://admin:123456@172.18.45.15:554/h264/ch1/main/av_stream",  # 展厅西北角--反光衣
        "rtsp://admin:123456@172.18.45.16:554/h264/ch1/main/av_stream",  # 展厅东北角
        "rtsp://admin:123456@172.18.45.17:554/h264/ch1/main/av_stream",  # 展厅东南角--keypoint
        "rtsp://admin:asdf1234@172.18.45.18:554/h264/ch1/main/av_stream",  # 展厅球机 -- 抽烟识别
    ]
    debug_flag = True
    if not debug_flag:
        p_list = []
        for stream in stream_list:
            p = Process(target=save_img, args=(stream,))
            p_list.append(p)
        for p in p_list:
            p.start()
        for p in p_list:
            p.join()
    else:
        save_img()
 

用另一种方式读取图片并截图:

import sys
import uuid

import cv2
import os, time
import datetime
from multiprocessing import Process

sys.path.append(os.path.abspath(os.path.join(__file__, "..", "..")))
import feishu

folder_name = "/data/camera/shapan_own"
log_path = "/data/camera/shapan_own/xferlog"
os.makedirs(folder_name, exist_ok=True)
timeF = 25  # 视频帧计数间隔频率, 这样就是1秒抽取1帧率


def save_img(video_path=r"rtsp://admin:123456@172.18.45.15:554/h264/ch1/main/av_stream", v_ip=""):
    ip = video_path.split("@")[1][0:12]
    vc = cv2.VideoCapture(video_path)  # 读入视频文件
    c = 1
    if vc.isOpened():  # 判断是否正常打开
        rval, frame = vc.read()
    else:
        error_msg = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " can not open:" + video_path
        feishu.Feishu()(file=__file__, line_no=sys._getframe().f_lineno, msg=error_msg)
        raise Exception(error_msg)

    while rval:  # 循环读取视频帧
        rval, frame = vc.read()
        pic_path = folder_name + '/' + v_ip
        if not os.path.exists(pic_path):
            os.makedirs(pic_path, exist_ok=True)
        if (c % timeF == 0):  # 每隔timeF帧进行存储操作
            t = time.localtime()
            pic_name = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") + "_" + uuid.uuid4().hex + ".jpg"
            full_path_name = os.path.join(pic_path, pic_name)
            cv2.imwrite(full_path_name, frame)  # 存储为图像,保存名为 文件夹名_数字(第几个文件).jpg
            print(full_path_name)
            log_path_pic_name = "/" + ip + "/" + pic_name
            line = f"{time.asctime(t)} 0 {ip} {frame.size} {log_path_pic_name} a _ i r test ftp 0 * c{os.linesep}"
            with open(log_path, "a") as f:
                f.write(line)
        c = c + 1
        cv2.waitKey(1)
    vc.release()


if __name__ == '__main__':
    save_img("rtsp://admin:abc123456@172.18.45.29:554/Streaming/Channels/1001", '172.18.200.1001')
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值