多进程截取海康相机视频帧存储(demo)

简介: 多进程截取海康相机视频帧存储(demo)

通过数据库查询ip,username, password 模块


import pymysql
class BaseSet():
    # 连接数据库基础参数
    def __init__(self):
        # 连接数据库
        self.conn = pymysql.connect(host='localhost'  # 连接名称,默认127.0.0.1
                                    , user='root'  ## 用户名
                                    , passwd='root'  # 密码
                                    , port=3306  # 端口,默认为3306
                                    , db='cam'  # 数据库名称
                                    , charset='utf8'  # 字符编码
                                    )
        self.cur = self.conn.cursor()  # 生成游标对象
        # Sql语句
        self.ConstructionSql = 'SELECT ip,username, password FROM cams'
    def GetCamIDInfo(self):
        try:
            self.cur.execute(self.ConstructionSql)  # 执行插入的sql语句
            return self.cur.fetchall()
        except:
            self.conn.commit()  # 提交到数据库执



多进程截取图像帧模块


import datetime
import multiprocessing
import time
from Config import BaseSet
import uuid
import cv2
def getInfolIST():
    Config = BaseSet()
    IPlIST = []
    usernamelIST = []
    passwordlIST = []
    for ip, username, password in Config.GetCamIDInfo():
        IPlIST.append(ip)
        usernamelIST.append(username)
        passwordlIST.append(password)
    return IPlIST, usernamelIST, passwordlIST
def SaveFrams(username, password, ip):
    save_imgs_path = "./imgs/"
    rtsp = "rtsp://%s:%s@%s:554/cam/realmonitor?channel=1&subtype=1" % (username, password, ip)
    cap = cv2.VideoCapture(rtsp)
    if cap.isOpened():
        ret, frame = cap.read()  # read_latest_frame() 替代 read()
        if ret:
            print("Can receive frame (stream start!). Starting ..")
            frame = cv2.resize(frame, (1920, 1080))  # 图像大小为1920, 1080
            cv2.imwrite(save_imgs_path + str(ip) +  str(uuid.uuid1()) + '.jpg', frame)
            cap.release()
        else:
            cap.release()
if __name__ == '__main__':
    IPlIST, usernamelIST, passwordlIST = getInfolIST()
    try:
        while True:
            time.sleep(1)
            p = multiprocessing.Pool(32)
            r_list = []
            for username, password, ip in zip(usernamelIST, passwordlIST, IPlIST):
                r_list.append(p.apply_async(SaveFrams, args=(username, password, ip)))
            p.close()
            for r in r_list:
                r.get()
    except KeyboardInterrupt:
        p.terminate()
        print('[-] main exit')
    p.join()


相关文章
|
3月前
|
存储 C语言
【C语言】进程间通信之存储映射区mmap
【C语言】进程间通信之存储映射区mmap
42 0
|
6月前
|
监控 Linux
linux实现守护进程demo
linux实现守护进程demo
40 0
|
存储 Unix Linux
【Linux进程间通信】四、mmap共享存储映射(二)
【Linux进程间通信】四、mmap共享存储映射
171 0
【Linux进程间通信】四、mmap共享存储映射(二)
|
存储 Linux
【Linux进程间通信】四、mmap共享存储映射
【Linux进程间通信】四、mmap共享存储映射
170 0
【Linux进程间通信】四、mmap共享存储映射
|
Shell
SHELL下根据进程号得到内存,并截取为整数
SHELL下根据进程号得到内存,并截取为整数
95 0
|
存储 SQL 关系型数据库
多进程截取海康相机视频帧存储
多进程截取海康相机视频帧存储
299 0
|
Shell
SHELL下获得指定进程的进程号,并截取为整数
SHELL下获得指定进程的进程号,并截取为整数
149 0
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
4月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
176 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)