openCV 多线程调用多个海康威视摄像头(避免画面不同步),进行人脸识别

这篇具有很好参考价值的文章主要介绍了openCV 多线程调用多个海康威视摄像头(避免画面不同步),进行人脸识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、创建多个线程来拉取不同的视频流,不使用多线程的话,所有的视频流就在排一个队,会出现画面不同步的情况

代码:

from threading import Thread
import cv2


#视频流拉取类
class vStream:
    def __init__(self,src):
        self.capture = cv2.VideoCapture(src)
        self.thread = Thread(target=(self.update),args=())
        self.thread.daemon = True
        self.thread.start()
    def update(self):
        while True:
            _,self.frame = self.capture.read()
    def getFrame(self):
        return self.frame


#我的网络摄像头
cam1 = vStream('rtsp://admin:qwertyuiop123@192.168.31.103/Streaming/Channels/2')
cam2 = vStream('rtsp://admin:JGSYS123@192.168.31.123/Streaming/Channels/2')

while True:
    try:
        myframe1 = cam1.getFrame()
        myframe2 = cam2.getFrame()
        cv2.imshow('webCam1',myframe1)
        cv2.imshow('webCam2',myframe2)
    except:
        print('frame not available')

    if cv2.waitKey(1) ==ord('q'):
        cam1.capture.release()
        cam2.capture.release()
        cv2.destroyAllWindows()
        exit(1)
        break

2、使用numpy将多个画面放在同一个frame中,图像就是矩阵,numpy是用来处理矩阵的类

代码:

import time
from threading import Thread
import cv2
import numpy as np


#视频流拉取类
class vStream:
    def __init__(self,src,width,height):
        #frame 初始尺寸
        self.width = width
        self.height = height
        self.capture = cv2.VideoCapture(src)
        self.thread = Thread(target=(self.update),args=())
        self.thread.daemon = True
        self.thread.start()
    def update(self):
        while True:
            _,self.frame = self.capture.read()
            self.frame2 = cv2.resize(self.frame,(self.width,self.height))

    def getFrame(self):
        return self.frame2

ip1 = 'rtsp://admin:qwertyuiop123@192.168.31.103/Streaming/Channels/2'
ip2 = 'rtsp://admin:JGSYS123@192.168.31.123/Streaming/Channels/2'

disW = 640
disH = 360
cam1 = vStream(ip1,disW,disH)
cam2 = vStream(ip2,disW,disH)
#显示帧率
font = cv2.FONT_HERSHEY_SIMPLEX
startTime = time.time()
dtav = 1#没啥意义,只是为了第一次进入循环时没有dtav避免错误

while True:
    try:
        myframe1 = cam1.getFrame()
        myframe2 = cam2.getFrame()
        #将myframe1,myframe2 放在同一个画面
        frameCombine = np.hstack((myframe1,myframe2))

        #显示帧率
        dt = time.time() - startTime
        startTime = time.time()
        # 低通滤波,避免fps误差太大
        dtav = .90 * dtav + .1 * dt
        fps = 1 / dtav
        fps = round(fps, 2)
        # print('fps is:',round(dtav,1))
        cv2.rectangle(frameCombine, (0, 0), (100, 40), (0, 0, 255), -1)
        cv2.putText(frameCombine, str(round(fps, 1)) + 'fps', (0, 25), font, .75, (0, 255, 255, 2))
        cv2.imshow('combine frame', frameCombine)

    except:
        print('frame not available')

    keyCode = cv2.waitKey(1) & 0xFF
    if keyCode == 27:  # ESC键退出
        cam1.capture.release()
        cam2.capture.release()
        cv2.destroyAllWindows()
        exit(1)
        break

ivms opencv,opencv,python,人工智能

 进行人脸识别,网不好帧率太低文章来源地址https://www.toymoban.com/news/detail-857184.html

import face_recognition
import pickle
import time
from threading import Thread
import cv2
import numpy as np

with open('train.pkl','rb')as f:
    Names = pickle.load(f)
    Encodings = pickle.load(f)



#视频流拉取类
class vStream:
    def __init__(self,src,width,height):
        #frame 初始尺寸
        self.width = width
        self.height = height
        self.capture = cv2.VideoCapture(src)
        self.thread = Thread(target=(self.update),args=())
        self.thread.daemon = True
        self.thread.start()
    def update(self):
        while True:
            _,self.frame = self.capture.read()
            self.frame2 = cv2.resize(self.frame,(self.width,self.height))

    def getFrame(self):
        return self.frame2

ip1 = 'rtsp://admin:qwertyuiop123@192.168.31.103/Streaming/Channels/2'
ip2 = 'rtsp://admin:JGSYS123@192.168.31.123/Streaming/Channels/2'

disW = 640
disH = 360
cam1 = vStream(ip1,disW,disH)
cam2 = vStream(ip2,disW,disH)
#显示帧率
font = cv2.FONT_HERSHEY_SIMPLEX
startTime = time.time()
dtav = 1
scaleFactor=.25

while True:
    try:
        myframe1 = cam1.getFrame()
        myframe2 = cam2.getFrame()
        #将myframe1,myframe2 放在同一个画面
        frameCombine = np.hstack((myframe1,myframe2))
        #将图像转换缩小,加载模型识别
        frameRGB = cv2.cvtColor(frameCombine, cv2.COLOR_BGR2RGB)
        frameRGBSmall = cv2.resize(frameRGB, (0, 0), fx=scaleFactor, fy=scaleFactor)
        facePositions = face_recognition.face_locations(frameRGBSmall, model='cnn')
        allEncodings = face_recognition.face_encodings(frameRGBSmall, facePositions)

        for (top, right, bottom, left), face_encoding in zip(facePositions, allEncodings):
            name = 'Unkown Person'
            matches = face_recognition.compare_faces(Encodings, face_encoding)
            if True in matches:
                first_match_index = matches.index(True)
                name = Names[first_match_index]
                # 将检测框放大scalefactor倍,上面图片是缩小三倍检测的结果,检测框也是缩小三倍的
            top = int(top / scaleFactor)
            right = int(right / scaleFactor)
            bottom = int(bottom / scaleFactor)
            left = int(left / scaleFactor)
            cv2.rectangle(frameCombine, (left, top), (right, bottom), (0, 0, 255), 2)
            cv2.putText(frameCombine, name, (left, top - 6), font, .75, (0, 0, 255), 2)

        #显示帧率
        dt = time.time() - startTime
        startTime = time.time()
        # 低通滤波,避免fps误差太大
        dtav = .90 * dtav + .1 * dt
        fps = 1 / dtav
        fps = round(fps, 2)
        # print('fps is:',round(dtav,1))
        cv2.rectangle(frameCombine, (0, 0), (100, 40), (0, 0, 255), -1)
        cv2.putText(frameCombine, str(round(fps, 1)) + 'fps', (0, 25), font, .75, (0, 255, 255, 2))
        cv2.imshow('combine frame', frameCombine)

    except:
        print('frame not available')

    keyCode = cv2.waitKey(1) & 0xFF
    if keyCode == 27:  # ESC键退出
        cam1.capture.release()
        cam2.capture.release()
        cv2.destroyAllWindows()
        exit(1)
        break

到了这里,关于openCV 多线程调用多个海康威视摄像头(避免画面不同步),进行人脸识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 搜索海康威视网络摄像头

    源代码 https://download.csdn.net/download/syukugai/88299251

    2024年02月10日
    浏览(48)
  • 海康威视监控摄像头连接电脑教程

    官网下载SADP软件:https://www.wolai.com/wM6rWeBrRtrfmMH2BTVUXZ 双击下载的软件进行安装 打开软件,将设备连接到摄像头,便可在软件中搜索到摄像头 选择摄像头,输入管理员密码,即可完成对摄像头的控制 设置摄像机IP地址与网口地址处于同一网段 设置网络摄像机IP地址时,保持设

    2024年02月04日
    浏览(202)
  • 海康威视网络摄像头网线直连电脑

    1、网络相机型号:DS-2CD3T86FWDV2 2.摄像头上电,摄像头、电脑连接同一个网线 客户端软件 - 桌面应用软件 - 海康威视 Hikvision 下载客户端软件  安装完成,创建用户,密码 设备管理--设备  刷新 ,就会看到设备,默认的ip地址的192.168.1.64 到控制面板,”以太网“ 就是我们跟摄

    2024年02月11日
    浏览(64)
  • 海康威视摄像头播放录像视频(RTSP协议)

    旧URL:rtsp://[username]:[password]@[ipaddress]/[videotype]/ch[number]/[streamtype] 如:rtsp://admin:12345@192.168.25.64:554/h264/ch1/main/av_stream 新URL:rtsp://[username]:[password]@[IP]:554/Streaming/Channels/[channelID][streamID] 如:rtsp://admin:12345@192.168.25.64:554/Streaming/Channels/101 录像机其实和摄像机基本一样,旧URL中摄像

    2024年02月12日
    浏览(75)
  • SpringBoot+海康威视摄像头实现在前端的预览

    本文是之前文章的一篇完善文,如果你是才接触海康威视摄像头的二次开发请先阅读入门篇 在实现摄像头的预览的时候需要搞懂什么是rtsp。 rtsp是一种实时流传输协议(Real Time Streaming Protocol,RTSP),主要使用TCP和UDP完成数据的传输。 1.1 了解海康威视rtsp的url规范 【老版本】

    2023年04月08日
    浏览(57)
  • vue+js+海康web开发包接入海康威视摄像头

    一、登录海康开放平台下载web开发包,下载需要先登录海康账号,没有的需先注册一个。 海康开放平台web开发包下载地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10id=4c945d18fa5f49638ce517ec32e24e24 二、将web开发包引入vue项目 下载后解压的包目录如下: 将把webs下的整个

    2024年02月02日
    浏览(54)
  • 海康威视摄像头的多通道rtsp地址格式

    海康摄像头的rtsp地址通常格式为: “rtsp://username:password@192.168.1.64:554//Streaming/Channels/1” ### 1 代表主流,2代表子流 但在多通道的摄像机,例如红外摄像机,既有rgb图也有红外图,分别在两个通道里,需要独立打开时,就需要指定通道号。 那么可以这样来给rtsp最后的数字串:

    2024年02月13日
    浏览(120)
  • 公网ip与树莓派实现异地访问海康威视摄像头

    通过openv建立异地局域网,使用树莓派端口转发摄像头端口,实现异地访问。 1.公网ip服务器端: 2.将配置文件拷贝到需要组网的设备。 3.编辑配置文件,加入路由规则,仅将10.8.0.0的数据走公网ip通道。 客户端: 通过树莓派在公网中分配的ip既可访问摄像头。

    2024年02月15日
    浏览(52)
  • 通过java解码web前端直接预览海康威视摄像头

            最近进行项目开发时遇到了需要前端直接调用摄像头,并直接进行播放的需求。原本计划通过海康威视官网的《WEB无插件开发包 V3.2》直接进行控制、交互,实现摄像头直接登录以及取流预览。但是前端人员现场驻场开发后反映各种兼容性问题频发,反正就是不能友

    2024年02月01日
    浏览(54)
  • 海康威视网络摄像头通过浏览器网页的配置流程

    一、登录 输入网络摄像机IP地址,显示登录窗口,输入用户名和密码后,点击登录。如果是新设备,需要先激活设备,设置登录密码。(Edge浏览器如何访问海康设备?) 二、界面介绍 登入界面后,会显示预览,回放,图片,配置。登陆后界面右上角会显示用户名和注销标签

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包