当前位置: 首页 > news >正文

网站建设 钱百度人工服务在线咨询

网站建设 钱,百度人工服务在线咨询,不写编程可以做网站建设,雁塔区住房和城乡建设局网站#1024程序员节 | 征文# 这两天才因为项目需要,对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案,就直接拿来做demo测试使用。 …

#1024程序员节 | 征文#

     这两天才因为项目需要,对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案,就直接拿来做demo测试使用。

 先说说onvif协议:

Onvif,即Open Network Video Interface Forum ,可以译为开放型网络视频接口论坛,是安迅士、博世、索尼在2008年共同成立的一个国际性、开发型网络视频产品标准网络接口的开发论坛,后来由于这个技术开发论坛共同制定的开发型行业标准,就用该论坛的大写字母命名,即ONVIF 网络视频标准规范,习惯简称为:ONVIF协议。

Onvif协议的出现,解决了不同厂商之间开发的各类失败不能融合使用的难题,提供了统一的网络视频开发标准,即最终能够通过Onvif这个标准化的平台实现不同产品之间的集成。

测试

onvif Device test tool工具测试

python实现步骤

  1. 安装必要的库

    • 使用 pip install onvif 安装 ONVIF 库。
    • 根据人形识别所用的库进行安装,比如使用 pip install volo(假设使用 volo 进行人形识别)。
  2. 初始化 ONVIF 摄像头

    • 设置摄像头的 IP 地址、端口、用户名和密码等参数。
    • 创建 ONVIFCamera 对象并更新其地址。
    • 获取 PTZ(Pan/Tilt/Zoom)服务,用于控制摄像头的云台和变焦。
  3. 实现摄像头变焦控制

    • 定义变焦速度等参数。
    • 通过调用 PTZ 服务的相关方法实现拉近(zoom in)、拉远(zoom out)和停止变焦操作。
  4. 人形识别与跟踪

    • 使用选定的人形识别库加载模型并进行图像分析。
    • 在视频流中检测人形,获取人形的位置信息。
    • 根据人形位置调整摄像头的云台和变焦,实现跟踪。

完整代码

import cv2
import numpy as np
import serial
from onvif import ONVIFCamera
import time
import asyncio
from zeep import Client
import tkinter as tk
from threading import Thread
import logginglogging.basicConfig(level=logging.DEBUG)# 摄像头配置常量
CAMERA_IP = "192.168.0.132"
CAMERA_PORT = 8080
CAMERA_USERNAME = "admin"
CAMERA_PASSWORD = "admin123"# 串口配置常量
SERIAL_PORT = 'COM4'
BAUDRATE = 115200# 初始化串口
ser = serial.Serial(SERIAL_PORT, BAUDRATE)# 初始化摄像头
camera = None
try:camera = ONVIFCamera(CAMERA_IP, CAMERA_PORT, CAMERA_USERNAME, CAMERA_PASSWORD)camera.update_xaddrs()except Exception as e:logging.error(f"初始化摄像机错误: {e}")
# 获取 PTZ 服务
def get_ptz_service(camera):try:if camera:return camera.create_ptz_service()else:print("摄像机未初始化.")return Noneexcept Exception as e:print(f"PTZ 服务初始化错误: {e}")return None
ptz_service = get_ptz_service(camera)
# ONVIF摄像头设置
def get_stream_url():if camera:media_service = camera.create_media_service()return media_service.GetStreamUri({'StreamSetup': {'Stream': 'RTP-Unicast','Transport': {'Protocol': 'RTSP'}},'ProfileToken': camera.media.GetProfiles()[0].token}).Urielse:return None
async def process_video_async(cap):while True:ret, frame = cap.read()if not ret:print("视频读取失败")breakresized_frame = cv2.resize(frame, (899, 600))cv2.imshow('Video', resized_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakawait asyncio.sleep(0)def start_video_processing():stream_url = get_stream_url()if stream_url:cap = cv2.VideoCapture(stream_url)cap.set(cv2.CAP_PROP_FPS, 30)asyncio.run(process_video_async(cap))cap.release()else:print("无法获取视频流 URL。")
# 摄像头控制
class CameraControl:def __init__(self, ptz_service, camera):self.ptz_service = ptz_serviceself.zoom_speed = 0.1self.camera_profile_token = 'P2'def zoom_in(self):try:if self.camera_profile_token and 'P2':self.ptz_service.ContinuousMove({'ProfileToken': 'P2','Velocity': {'PanTilt': {'x': 0.0, 'y': 0.0},'Zoom': {'x': self.zoom_speed}}})print("拉近操作进行中")else:print("摄像头或 PTZ 服务未正确初始化。")except Exception as e:print(f"拉近操作失败:{e}")def zoom_out(self):try:if self.camera_profile_token and self.ptz_service:self.ptz_service.ContinuousMove({'ProfileToken': 'P2','Velocity': {'PanTilt': {'x': 0.0, 'y': 0.0},'Zoom': {'x': -self.zoom_speed} }})print("拉远操作进行中")else:print("摄像头或 PTZ 服务未正确初始化。")except Exception as e:print(f"拉远操作失败:{e}")def stop_zoom(self):try:if self.camera_profile_token and self.ptz_service:# 尝试不同的停止方法self.ptz_service.Stop({'ProfileToken': 'P2', 'PanTilt': True, 'Zoom': True})print("停止变焦操作")else:print("摄像头或 PTZ 服务未正确初始化。")except Exception as e:print(f"停止变焦失败:{e}")# 创建 GUI
class CameraApp:def __init__(self, master, camera_control):self.master = mastermaster.title("Camera Control")self.camera_control = camera_controlself.zoom_in_button = tk.Button(master, text="拉近", command=self.camera_control.zoom_in)self.zoom_in_button.pack()self.zoom_out_button = tk.Button(master, text="拉远", command=self.camera_control.zoom_out)self.zoom_out_button.pack()self.stop_button = tk.Button(master, text="停止变焦", command=self.camera_control.stop_zoom)self.stop_button.pack()self.quit_button = tk.Button(master, text="退出", command=self.quit)self.quit_button.pack()def quit(self):self.camera_control.stop_zoom()if ser.is_open:ser.close()self.master.quit()
if __name__ == "__main__":# 启动视频处理线程video_thread = Thread(target=start_video_processing)video_thread.start()# 创建摄像头控制实例if camera and ptz_service:camera_control = CameraControl(ptz_service, camera)else:print("无法创建摄像头控制实例,摄像头或 PTZ 服务未正确初始化。")# 启动 GUIroot = tk.Tk()if camera_control:app = CameraApp(root, camera_control)else:print("无法启动 GUI,摄像头控制实例未创建。")root.mainloop()

   

http://www.hkea.cn/news/63153/

相关文章:

  • 做公司标志用哪个网站营销自动化
  • wordpress5.0.3厦门百度seo
  • 网站开发 企业 定制系统优化大师安卓版
  • 网站内链符号seo百度站长工具
  • 网站页面太多是否做静态seo优化软件
  • mac下怎么安装wordpress关键词排名优化易下拉霸屏
  • 国内做国外代购在哪个网站好百度平台客服怎么联系
  • 菏泽网站获客网站建设公司中国站长网入口
  • 黄冈网站建设推荐seo查询排名软件
  • 自己怎么做百度网站广州seo网站公司
  • 京东企业的电子网站建设百度seo教程网
  • 弥勒网站设计公司share群组链接分享
  • 网站建设栏目管理百度推广搜索排名
  • 企业管理类的网站全球搜是什么公司
  • 网站开发自我介绍seo报告
  • 网站应用软件设计海口seo网络公司
  • 武汉站建设深圳网站开发制作
  • 网站建设的平台分析北京seo技术
  • 手表价格网站百度推广天津总代理
  • 如何将域名和网站绑定排名seo怎么样
  • 旅游网站推广方案色盲测试图
  • 现在开发个网站多少钱安全优化大师
  • 网站开发工程师工资多少百度统计工具
  • 征信报告优化大师好用吗
  • 一个ip地址做多个网站网络营销公司是做什么的
  • 赤峰网站建设公司旅行网站排名
  • seo网站优化工具软件拉新推广平台
  • 政府网站设计方案无锡网站制作优化
  • 社交网站盈利吗如何在各种网站投放广告
  • 建设工程合同民法典东莞快速优化排名