100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python应用实例:通过rtsp取流实时监测海康威视监控摄像机画面是否异常 并记录到Mysq

Python应用实例:通过rtsp取流实时监测海康威视监控摄像机画面是否异常 并记录到Mysq

时间:2020-01-31 01:56:46

相关推荐

Python应用实例:通过rtsp取流实时监测海康威视监控摄像机画面是否异常 并记录到Mysq

单位上千路监控摄像头,全靠人工看画面正不正常,如果用ping来判断有时又会出现摄像机在线,存储却取不到流不能录像,所以写了这个,目前运行正常,很有效哦,都不用人工报修了,还可以用报表工具统计故障率、维修时长效率等,本人新手,发文记录一下自学历程,各位大神勿喷。

import jsonimport osimport timefrom configparser import ConfigParserimport datetimeimport cv2import requestsimport pymysql#连接数据库db = pymysql.connect(host="127.0.0.1", user="admin", password="admin", database="test", port=3306)cursor = db.cursor()def now(): #取现行时间 到秒i = datetime.datetime.now()ii = str(i)ii = ii[0:19]return iidef readdb(ipaddr): #读取某ip地址的最新一条数据的conntime字段 也就是取流恢复的时间sql = "SELECT conntime FROM jiankong WHERE ID =(SELECT MAX(ID) FROM jiankong WHERE IP='" + ipaddr + "')"cursor.execute(sql)result = cursor.fetchall()if result != ():aa = result[0][0]else:aa = resultreturn aadef readtime(ipaddr): #读取某IP地址的最新一条数据的misstime字段 也就是取流失败的时间 sql = "SELECT misstime FROM jiankong WHERE ID =(SELECT MAX(ID) FROM jiankong WHERE IP='" + ipaddr + "')"cursor.execute(sql)result = cursor.fetchall()if result != ():aa = result[0][0]else:aa = resultreturn aadef readusetime(ipaddr): #读取某IP地址的最新一条数据的fixtime字段 也就是从故障到恢复的时间sql = "SELECT fixtime FROM jiankong WHERE ID =(SELECT MAX(ID) FROM jiankong WHERE IP='" + ipaddr + "')"cursor.execute(sql)result = cursor.fetchall()if result != ():aa = result[0][0]else:aa = resultreturn aadef writemissdb(name, ip): #新插入一条取流失败的数据,在conntime里写入1 用来判断是否已报修避免重复报修sql = "INSERT INTO jiankong (name,ip,misstime,conntime) VALUES ('" + name + "','" + ip + "','" + now() + "','1')"result = cursor.execute(sql)mit()def writefixdb(ip): #写入取流恢复时间 并将fixtime写入从故障到恢复的时间now2 = usetime(readtime(ip), now())sql = "UPDATE jiankong SET conntime ='" + now() + "',fixtime ='" + now2 + "' WHERE ID IN(SELECT * FROM (SELECT MAX(ID) FROM jiankong WHERE IP='" + ip + "') A)"result = cursor.execute(sql)mit()def usetime(time1, time2): #计算两个时间的差first = datetime.datetime.strptime(time1, "%Y-%m-%d %H:%M:%S")last = datetime.datetime.strptime(time2, "%Y-%m-%d %H:%M:%S")result = last - firstresult = str(result)return resultkey = #群机器人的keydef send_msg(content):"""艾特全部,并发送指定信息"""data = json.dumps({"msgtype": "text", "text": {"content": content, "mentioned_list": ["@all"]}})r = requests.post("https://qyapi./cgi-bin/webhook/send?key=" + key, data,auth=('Content-Type', 'application/json'))print(r.json)#config文件读取path = os.path.abspath('.')configpath = path + '\\conf.ini'exist = os.path.exists(configpath)def ex(lpath): exi = os.path.exists(lpath)return exidef main():try:while exist is True:conn = ConfigParser()conn.read(configpath, encoding='utf-8-sig')ip = conn.sections()user = conn.get('user', 'user')login = conn.get('login', 'admin')ip.remove('user')ip.remove('login')for item in ip:img1 = cv2.VideoCapture(login + item + ':554/Streaming/Channels/1')ret, img = img1.read()if ret:#cv2.imwrite(path + '\\' + item + '.jpg', img)a = 0print(item + "--取流成功")nam = conn.get(item, 'nam')x = readdb(item)y = readtime(item)if x == '1':writefixdb(item)timeuse = readusetime(item)send_msg(nam + "已恢复,本次故障时长" + timeuse)else: #一次取流失败后再取一次,两次失败才确诊img1 = cv2.VideoCapture(login + item + ':554/Streaming/Channels/1')ret, img = img1.read()if not ret:nam = conn.get(item, 'nam')x = readdb(item)# expath = path + nam + '.txt'# # print(expath)if x != "1":print(nam + item + '此摄像机取流失败')send_msg('@所有人 监控画面丢失报警:\n' + nam + ' ' + item + '\n此摄像机取流失败,画面丢失,请安排维修')writemissdb(nam, item)# log = open(expath, 'w')# log.write(str(datetime.datetime.now()))# log.close()else:cv2.imwrite(os.path.join(path, item + '.jpg'), img)print(item + "--取流成功")nam = conn.get(item, 'nam')x = readdb(item)# expath = os.path.join(path, nam + '.txt')# if ex(expath) is True:#os.remove(expath)if x == '1':writefixdb(item)timeuse = readusetime(item)send_msg(nam + "已恢复,本次维修用时"+timeuse)else:print('未找到conf.ini,即将退出')time.sleep(5)os._exit(0)except Exception as n:print(n)if __name__ == '__main__':main()

conf.ini文件内容

[192.168.0.54]

nam=大门口

[192.168.0.55]

nam=库房

[192.168.0.56]

nam=财务

[user]

user=zhangsan|lisi|wangwu

[login]

admin=rtsp://admin:admin@

Python应用实例:通过rtsp取流实时监测海康威视监控摄像机画面是否异常 并记录到Mysql数据库 计算故障到恢复的时间 通过企业微信群机器人推送消息到群里

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。