【OpenCV-PyQt5-PyGame-imutils】探索Python中的图像和视频捕获:性能分析与选择指南

前言

随着计算机视觉和多媒体应用的不断发展,图像和视频捕获变得越来越重要。在Python中,有多种库和工具可供选择,用于打开摄像头、捕获图像、以及处理视频流。本文旨在为读者提供对这些捕获方法的全面了解,并介绍如何计算平均帧率以评估性能。

文章目录

  • 前言
  • 环境配置
    • 新的空白解释器环境创建
      • Windows
      • Linux
      • 相关库配置
  • Python中的视频流处理:不同库和工具的使用
    • 1. OpenCV
    • 2. Pillow
    • 3. Pygame
    • 4. PyQt
    • 5. imutils
    • 6. av
    • 7. SimpleCV
  • 测试函数,捕捉100帧并返回平均帧率
    • python3
      • 可处理摄像头或视频帧
        • 1. OpenCV Frame Capture
        • 2. Pygame Frame Capture
        • 3. PyQt Frame Capture
        • 4. imutils Frame Capture
      • 分析和总结:
      • 捕获屏幕帧
        • 1. pyautogui Frame Capture
      • 音频和视频捕捉
        • 2. av Frame Capture
    • python 2
      • SimpleCV Frame Capture
  • 总结

环境配置

新的空白解释器环境创建

解释器环境创建方式基于
半自动化使用.bat手动打包迁移python项目

Windows

python -m venv venv
call venv\Scripts\activate.bat
python -m pip install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip setuptools

注:以下报错是由于你在powershell输入了以上命令,你需要切换成cmd,直接输入cmd即可

PS E:\PRODUCE\dli\recognition-dlib\RetinaFace-FaceNet> call
venv\Scripts\activate.bat call : 无法将“call”项识别为
cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1

  • call venv\Scripts\activate.bat
  •   + CategoryInfo          : ObjectNotFound: (call:String) [], CommandNotFoundException+ FullyQualifiedErrorId : CommandNotFoundException
    

Linux

python -m venv venv 
source venv/bin/activate
python -m pip install -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip setuptools
  • 你也可以使用conda管理你的 Python 环境,但是我实际使用时的体验来看,以上方法当你的电脑已经安装了任意版本的python,打开cmd即可使用,且比conda安装新的包更快,速度与直接pip install在系统解释器中几乎一致
  • 若使用conda,你必须先下载conda,但是conda可以很好的处理各种包不匹配的问题,也可以下载到的很多pip找不到的特殊版本

以上两种方法就对应PyCharm中的这两种方法
在这里插入图片描述

相关库配置

1. OpenCV

pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv-python==4.5.3.56

2. Pygame

pip install -i https://mirrors.aliyun.com/pypi/simple/ Pygame

3. pyqt5

pip install -i https://mirrors.aliyun.com/pypi/simple/ pyqt5 pyqt5-sip pyqt5-tools

建议三个库相关库一起装不然可能会报错

This application failed to start because no Qt platform plugin could be
initialized.Reinstalling the application may fix this problem.

在这里插入图片描述

4. imutils

pip install -i https://mirrors.aliyun.com/pypi/simple/ imutils

5. pyautogui

pip install -i https://mirrors.aliyun.com/pypi/simple/ pyautogui

6. av

pip install -i https://mirrors.aliyun.com/pypi/simple/ av

7. SimpleCV
Python2库,python3已不支持

pip install -i https://mirrors.aliyun.com/pypi/simple/ SimpleCV

Python中的视频流处理:不同库和工具的使用

视频流处理在计算机视觉和多媒体应用中占据着重要地位。本文将介绍Python中的不同库和工具,用于摄像头捕捉、图像处理和视频流处理。我们将提供示例代码和描述,以帮助读者了解这些工具的使用方法。

1. OpenCV

OpenCV 是一个流行的计算机视觉库,可以用于摄像头捕捉和图像处理。以下是使用 OpenCV 打开摄像头并拍照的示例代码:

import cv2# 初始化摄像头
cap = cv2.VideoCapture(0)if not cap.isOpened():print("摄像头未找到或无法访问。")
else:while True:# 捕获一帧图像ret, frame = cap.read()cv2.imshow("Press Space to Capture", frame)key = cv2.waitKey(1)if key == 32:  # 按下空格键# 将图像保存为文件cv2.imwrite('captured_image.jpg', frame)print("拍照成功!图像已保存为captured_image.jpg")break# 释放摄像头cap.release()cv2.destroyAllWindows()

2. Pillow

Pillow 是一个强大的图像处理库,也可以用于摄像头捕捉。以下是使用 Pillow 打开摄像头并拍照的示例代码:

from PIL import Image
from io import BytesIO
import requests# 初始化摄像头
with Image.open(requests.get('http://localhost:8080/picture/1/current/', stream=True).raw) as camera:# 拍照camera.save("pillow_capture.jpg")

3. Pygame

Pygame 是一个游戏开发库,也可以用于摄像头捕捉。以下是使用 Pygame 打开摄像头并拍照的示例代码:

import pygame
import pygame.camera
from pygame.locals import *def main():pygame.init()pygame.camera.init()# 打开默认摄像头camera = pygame.camera.Camera(pygame.camera.list_cameras()[0])camera.start()# 设置窗口尺寸和标题screen = pygame.display.set_mode((640, 480))pygame.display.set_caption('Camera Feed')capturing = Falsewhile True:for event in pygame.event.get():if event.type == QUIT:camera.stop()pygame.quit()returnelif event.type == KEYDOWN and event.key == K_c:# 按 'C' 键来拍照image = camera.get_image()pygame.image.save(image, 'captured_image.png')capturing = Trueif not capturing:# 从摄像头获取图像并显示image = camera.get_image()screen.blit(image, (0, 0))pygame.display.update()else:# 显示拍摄的照片captured_image = pygame.image.load('captured_image.png')screen.blit(captured_image, (0, 0))pygame.display.update()if __name__ == "__main__":main()

4. PyQt

PyQt 是一个GUI库,它也提供了摄像头访问和图像捕捉功能。你可以使用 PyQt 的相机模块来实现这一功能。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtMultimedia import QCamera, QCameraInfo
from PyQt5.QtMultimediaWidgets import QCameraViewfinder
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QImageclass CameraApp(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle('Camera App')self.setGeometry(100, 100, 640, 480)self.central_widget = QWidget(self)self.setCentralWidget(self.central_widget)self.layout = QVBoxLayout(self.central_widget)self.viewfinder = QCameraViewfinder(self)self.layout.addWidget(self.viewfinder)self.camera_info = QCameraInfo.defaultCamera()self.camera = QCamera(self.camera_info)self.camera.setViewfinder(self.viewfinder)self.camera.start()self.capture_button = QPushButton('拍照', self)self.layout.addWidget(self.capture_button)self.capture_button.clicked.connect(self.capture_image)def capture_image(self):image = self.viewfinder.grab()if not image.isNull():image.save('captured_image.png', 'PNG')def closeEvent(self, event):self.camera.stop()self.camera.unload()if __name__ == '__main__':app = QApplication(sys.argv)window = CameraApp()window.show()sys.exit(app.exec_())

5. imutils

imutils 是一个用于图像处理的工具集,它包括了一些用于打开摄像头并捕捉图像的函数。

from imutils.video import VideoStream
import cv2def main():vs = VideoStream(src=0).start()  # 打开默认摄像头frame_count = 0while True:frame = vs.read()  # 读取一帧图像# 显示图像cv2.imshow('Camera', frame)key = cv2.waitKey(1)if key == 32:  # 如果按下空格键,拍照# 保存图像cv2.imwrite(f'photo_{frame_count}.jpg', frame)frame_count += 1if key == 27:  # 如果按下ESC键,退出循环break# 释放摄像头和销毁窗口vs.stop()cv2.destroyAllWindows()if __name__ == "__main__":capture_frame_count = 0main()

6. av

av 是一个多媒体处理库,它支持音频和视频捕捉。虽然它主要用于音视频处理,但也可以用于摄像头捕捉。

import av
import numpy as np
from av.video import VideoFrame# 打开摄像头
container = av.open("R.mp4")# 获取视频流
stream = container.streams.video[0]# 读取图像帧
for frame in container.decode(stream):img = frame.to_image()img.save("av_capture.jpg")break  # 捕捉一帧后退出

7. SimpleCV

python2方法,python3不可用
SimpleCV 是一个计算机视觉库,内置了摄像头捕捉和图像处理工具。

from SimpleCV import Camera# 初始化摄像头
camera = Camera()# 拍照
image = camera.getImage()
image.save("simplecv_capture.jpg")

测试函数,捕捉100帧并返回平均帧率

平均帧率(Average Frame Rate)的计算方法是将总共捕获的帧数除以经过的时间,以得到每秒的帧数(FPS)。以下是具体的计算步骤:

  1. 记录一个起始时间 start_time,通常使用毫秒为单位。你可以使用类似 QTime.currentTime() 的方法来获取当前时间。

  2. 在每一帧捕获之后,递增一个帧数计数器 frame_count,用于跟踪已捕获的帧数。

  3. 当达到指定的帧数(例如100帧)时,停止捕获过程。

  4. 记录一个结束时间 end_time,通常也以毫秒为单位。

  5. 计算经过的时间,即结束时间减去起始时间,以毫秒为单位。这可以使用下面的方法计算:elapsed_time = end_time - start_time

  6. 将经过的时间转换为秒,因为帧率通常以每秒的帧数(FPS)表示。这可以通过将elapsed_time除以1000来实现,得到经过的时间(秒)。

  7. 计算帧率 frame_rate,将已捕获的帧数 frame_count除以经过的时间(秒)。帧率的计算公式为:frame_rate = frame_count / elapsed_time

  8. 最后,你可以将 frame_rate 打印出来,以表示捕获的平均帧率。

这个帧率表示了程序在捕获和显示帧的过程中的性能。通常,帧率越高,程序运行得越流畅。这个值对于评估图像处理应用程序的性能非常重要。

python3

可处理摄像头或视频帧

1. OpenCV Frame Capture

OpenCV 是一个流行的计算机视觉库,可以用于摄像头捕捉和图像处理。这个程序测试使用 OpenCV 打开摄像头并返回平均帧率。

import cv2
import timeitdef capture_and_display_opencv():cap = cv2.VideoCapture(0)frame_count = 0start_time = timeit.default_timer()while frame_count < 100:ret, frame = cap.read()frame_count += 1# 显示捕获的帧cv2.imshow("Camera Feed", frame)if cv2.waitKey(1) & 0xFF == 27:  # 按下 ESC 键退出breakcap.release()cv2.destroyAllWindows()end_time = timeit.default_timer()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_timereturn frame_rateif __name__ == "__main__":frame_rate = capture_and_display_opencv()print("OpenCV Frame Rate:", frame_rate)

OpenCV Frame Rate: 23.629290831107372

此程序使用 OpenCV 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。

2. Pygame Frame Capture

Pygame 是一个游戏开发库,也可以用于摄像头捕捉。以下是测试使用 Pygame 打开摄像头并返回平均帧率的程序:

import pygame.camera
from pygame.locals import *
import timeit
import pygamedef capture_and_display_pygame():pygame.init()pygame.camera.init()camera = pygame.camera.Camera(pygame.camera.list_cameras()[0])camera.start()# 创建 Pygame 窗口用于显示摄像头画面screen = pygame.display.set_mode((640, 480))pygame.display.set_caption("Camera Feed")frame_count = 0start_time = timeit.default_timer()running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:running = False# 捕获摄像头画面image = camera.get_image()# 将捕获的画面显示在 Pygame 窗口上screen.blit(image, (0, 0))pygame.display.flip()frame_count += 1if frame_count >= 100:running = Falseend_time = timeit.default_timer()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_time# 关闭 Pygame 窗口pygame.quit()return frame_rateif __name__ == "__main__":frame_rate = capture_and_display_pygame()print("Pygame Frame Rate:", frame_rate)

此程序使用 Pygame 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。
Pygame Frame Rate: 28.42875197551398

3. PyQt Frame Capture

PyQt 是一个强大的GUI库,它包括了对摄像头的访问功能。以下是测试使用 PyQt 打开摄像头并返回平均帧率的程序:

import sys
from PyQt5.QtCore import Qt, QTimer, QTime
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtMultimedia import QCamera, QCameraInfo
from PyQt5.QtMultimediaWidgets import QCameraViewfinderclass CameraApp(QMainWindow):def __init__(self, capture_frame_count):super().__init__()self.capture_frame_count = capture_frame_countself.initUI()def initUI(self):self.setWindowTitle('Camera Feed')self.setGeometry(100, 100, 640, 480)self.central_widget = QWidget(self)self.setCentralWidget(self.central_widget)self.layout = QVBoxLayout(self.central_widget)self.viewfinder = QCameraViewfinder(self)self.layout.addWidget(self.viewfinder)self.camera_info = QCameraInfo.defaultCamera()self.camera = QCamera(self.camera_info)self.camera.setViewfinder(self.viewfinder)self.camera.start()self.frame_count = 0self.start_time = QTime.currentTime()self.timer = QTimer(self)self.timer.timeout.connect(self.capture_frame)self.timer.start(30)  # 30毫秒更新一次def capture_frame(self):if self.frame_count < self.capture_frame_count:self.frame_count += 1# 实时显示捕获的帧self.viewfinder.show()else:self.timer.stop()self.camera.stop()self.camera.unload()self.close()def closeEvent(self, event):elapsed_time = self.start_time.msecsTo(QTime.currentTime())frame_rate = self.frame_count / (elapsed_time / 1000)print("PyQt5 Frame Rate:", frame_rate)if __name__ == '__main__':app = QApplication(sys.argv)capture_frame_count = 100window = CameraApp(capture_frame_count)window.show()sys.exit(app.exec_())

PyQt5 Frame Rate: 26.32964718272775

此程序使用 PyQt 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。

接下来,我们将继续介绍使用 SimpleCV、imutils 和其他捕捉方法的程序。

4. imutils Frame Capture

使用 imutils 库可以方便地捕获视频帧,但要显示图像,您通常仍然需要使用 OpenCV 或其他类似的库。 imutils 用于帮助处理图像和视频帧的读取、处理和转换,但它本身不提供图像显示的功能。所以在捕获和实时显示视频帧时,通常需要结合使用 imutils 和 OpenCV。

import time
import timeit
import cv2
from imutils.video import VideoStreamdef capture_imutils(capture_frame_count):vs = VideoStream(src=0).start()  # 打开默认摄像头time.sleep(2.0)  # 等待摄像头预热frame_count = 0start_time = timeit.default_timer()while frame_count < capture_frame_count:frame = vs.read()cv2.imshow("Frame", frame)if cv2.waitKey(1) & 0xFF == 27:  # 按下 ESC 键退出breakframe_count += 1end_time = timeit.default_timer()vs.stop()cv2.destroyAllWindows()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_timereturn frame_rateif __name__ == "__main__":capture_frame_count = 100  # 指定捕获帧数frame_rate = capture_imutils(capture_frame_count)print("imutils Frame Rate:", frame_rate)

imutils Frame Rate: 100.61413256692732

此程序使用 imutils 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。

分析和总结:

根据提供的数据,imutils 明显具有最高的帧速率,远高于其他库。这可能是因为 imutils 专注于提供快速的计算机视觉函数。
Pygame 也表现出相对较高的帧速率,但低于 imutils。
OpenCV 和 PyQt5 的帧速率较低,但仍然足够处理许多计算机视觉和多媒体应用程序的需求。
帧速率的选择通常取决于您的应用程序要求。如果您需要更高的性能和实时处理,imutils 或 Pygame 可能是更好的选择。如果您开发桌面应用程序或不需要高帧速率,OpenCV 和 PyQt5 可能足够满足您的需求。

捕获屏幕帧

1. pyautogui Frame Capture

如果您想在代码中使用pyautogui,您需要导入pyautogui模块。以下是修改后的代码:

import cv2
import numpy as np
import timeit
import pyautoguidef capture_and_display_frames(num_frames):frame_count = 0start_time = timeit.default_timer()# 创建一个窗口来显示捕获的屏幕帧cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL)while frame_count < num_frames:# 截取屏幕上的帧screenshot = pyautogui.screenshot()screenshot = np.array(screenshot)# 显示捕获的屏幕帧cv2.imshow("Screen Capture", cv2.cvtColor(screenshot, cv2.COLOR_BGR2RGB))frame_count += 1# 按下q键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakend_time = timeit.default_timer()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_timereturn frame_rateif __name__ == "__main__":num_frames = 100frame_rate = capture_and_display_frames(num_frames)print(f"Frame Rate for {num_frames} frames: {frame_rate:.2f} FPS")# 关闭窗口并释放资源cv2.destroyAllWindows()

这段代码已经导入了pyautogui模块,并可以使用pyautogui来捕获屏幕帧。按下"q"键可以提前退出捕获过程。确保您已经安装了相关库,然后运行这段代码以执行所需的操作。

音频和视频捕捉

2. av Frame Capture

av 是一个多媒体处理库,它支持音频和视频捕捉。虽然它主要用于音视频处理,但也可以用于摄像头捕捉。以下是测试使用 av 打开摄像头并返回平均帧率的程序:

import av
import timeitdef capture_av():container = av.open("R.mp4")stream = container.streams.video[0]frame_count = 0start_time = timeit.default_timer()while frame_count < 100:frame = next(container.decode(stream))img = frame.to_image()# Process the captured frame as neededpassframe_count += 1end_time = timeit.default_timer()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_timereturn frame_rateif __name__ == "__main__":frame_rate = capture_av()print("av Frame Rate:", frame_rate)

此程序使用 av 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。

接下来,我们将继续介绍使用 Twisted 和其他捕捉方法的程序。

python 2

SimpleCV Frame Capture

SimpleCV 是一个用于计算机视觉任务的库,它内置了摄像头捕捉和图像处理功能。以下是测试使用 SimpleCV 打开摄像头并返回平均帧率的程序:

from SimpleCV import Camera
import timeitdef capture_simplecv():camera = Camera()frame_count = 0start_time = timeit.default_timer()while frame_count < 100:image = camera.getImage()# Process the captured frame as neededpassframe_count += 1end_time = timeit.default_timer()elapsed_time = end_time - start_timeframe_rate = frame_count / elapsed_timereturn frame_rateif __name__ == "__main__":frame_rate = capture_simplecv()print("SimpleCV Frame Rate:", frame_rate)

此程序使用 SimpleCV 打开摄像头,捕捉100帧并返回平均帧率。请将此代码保存为一个单独的Python文件并运行。

总结

图像和视频帧捕获是计算机视觉和多媒体应用的基本组成部分。在Python中,有多种库和工具可供选择,适用于不同的需求和场景。本文提供了一个全面的指南,帮助读者了解不同的捕获方法,包括OpenCV、Pillow、Pygame、PyQt、imutils、av和SimpleCV。我们还强调了计算平均帧率的重要性,以评估性能。通过本文的指南,读者可以更好地选择适合其项目的图像和视频帧捕获方法,从而实现更高质量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02 stm32-hal库 timer 基本定时器设定

1.配置始终时钟参数 >2. 初始化 MX_TIM3_Init();/* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim3);> 3.增加回调函数 4 中断服务函数 void TIM3_IRQHandler(void) {/* USER CODE BEGIN TIM3_IRQn 0 *//* USER CODE END TIM3_IRQn 0 */HAL_TIM_IRQHandler(&…

jupyter 切换虚拟环境

当前只有两个环kernel 我已经创建了很多虚拟环境&#xff0c;如何在notebook中使用这些虚拟环境呢&#xff1f;请看下面 比如说我要添加nlp 这个虚拟环境到notebook中 1. 切换到nlp环境 2. 安装如下模块 pip install ipykernel 3. 执行如下命令 python -m ipykernel install …

半监督学习介绍(为什么半监督学习是机器学习的未来)

文章目录 半监督学习的好处半监督学习原理半监督范式总结 半监督学习是一种利用标记和未标记数据的机器学习方法。半监督学习的目标是结合监督学习和无监督学习的优点&#xff1b;利用标记数据的准确性以及未标记数据的丰富性和较低成本。半监督学习可以被认为是 监督学习&…

【通义千问】大模型Qwen GitHub开源工程学习笔记(4)-- 模型的量化与离线部署

摘要: 量化方案基于AutoGPTQ,提供了Int4量化模型,其中包括Qwen-7B-Chat和Qwen-14B-Chat。更新承诺在模型评估效果几乎没有损失的情况下,降低存储要求并提高推理速度。量化是指将模型权重和激活的精度降低以节省存储空间并提高推理速度的过程。AutoGPTQ是一种专有量化工具。…

[每周一更]-(第67期):docker-compose 部署php的laravel项目

容器化部署laravel框架的php项目 操作步骤 参考&#xff1a; https://www.cnblogs.com/jingjingxyk/p/16842937.htmlhttps://developer.aliyun.com/article/708976 0、plv项目修改 composer install.env 修改后台地址 IP:端口chmod -R 777 public / chmod -R 777 storagevi…

Mac删除不在程序坞的程序

现象描述&#xff1a;删除某个程序时&#xff08;通过‘程序’列表中将该应用移动到废纸篓里&#xff09;&#xff0c;该应用程序正在运行中&#xff0c;删除过程该程序未提示正在运行中&#xff0c;仅仅删除了图标&#xff08;在此吐槽下该程序的交互&#xff0c;产品没有考虑…

*常用函数

文章目录 nn.PReLU() 激活函数 nn.PReLU() 激活函数 PReLU(Parametric Rectified Linear Unit), 顾名思义&#xff1a;带参数的ReLU 其中a代表的是可学习的参数 ReLU、PReLU的比较&#xff1a; 如果ai0&#xff0c;那么PReLU退化为ReLU&#xff1b; 如果ai是一个很小的固定…

Git Commit Message规范

概述 Git commit message规范是一种良好的实践&#xff0c;可以帮助开发团队更好地理解和维护代码库的历史记录。它可以提高代码质量、可读性和可维护性。下面是一种常见的Git commit message规范&#xff0c;通常被称为"Conventional Commits"规范&#xff1a; 一…

Windows下DataGrip连接Hive

DataGrip连接Hive 1. 启动Hadoop2. 启动hiveserver2服务3. 启动元数据服务4. 启动DG 1. 启动Hadoop 在控制台中输入start-all.cmd后&#xff0c;弹出下图4个终端&#xff08;注意终端的名字&#xff09;2. 启动hiveserver2服务 单独开一个窗口启动hiveserver2服务&#xff0c;…

Kafka基础入门

Kafka介绍 Kafka是什么&#xff1f; kafka是一种分布式的&#xff0c;基于发布/订阅的消息系统。 Kafka的特点 分布式&#xff0c;吞吐量高&#xff0c;发布订阅模式&#xff0c;轻量灵活&#xff0c;较长时间持久化 Kafka的应用场景 解耦 原先一个微服务是通过接口&…

0基础学习VR全景平台篇 第108篇:全景图细节处理(下,航拍)

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; &#xff08;调色前图库&#xff09; &#xff08;原图-大图&#xff09; 一、导入文件 单击右下角导入按钮&#xff0c;选择航拍图片所在文件夹&#xff0c;选择图片&#xff0…

【运维笔记】swow源码编译安装

swow的github网址 https://github.com/swow/swow 从github中拉取源码 git pull https://github.com/swow/swow.git 编译安装 github中readme文件讲述了安装方法 这里整理了命令&#xff0c;进入拉取项目的目录后依次执行命令即可 #pwd 确保自己在swow目录中&#xff0c;如…

docker 搭建本地Chat GPT

要在CentOS7上安装Docker&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1、更新系统包列表 sudo yum update2、安装Docker存储库的必要软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm23、添加Docker存储库 sudo yum-config-manager --add…

3DEXPERIENCE® SOLIDWORKS® 新功能

先前版本的兼容性 优点 即使其他用户正在使用旧版 SOLIDWORKS&#xff0c;也能轻松与其 协作。 • 通过将您的 3DEXPERIENCE SOLIDWORKS 设计作品保存为旧 版本&#xff0c;与使用旧版本的供应商无缝协作。 • 将零件、装配体和工程图保存为最新版本前两年之内的 3DEXPERIENC…

centos7部署Nginx和RabbitMQ

文章目录 Nginx安装部署【简单】简介安装 RabbitMQ安装部署【简单】简介安装 Nginx安装部署【简单】 简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务&am…

从零开始使用webpack搭建一个react项目

先做一个正常编译es6语法的webpack demo 1. 初始化package.json文件 npm init一路enter下去 2. 添加插件 {"name": "demo","version": "1.0.0","description": "","main": "index.js",&q…

《RISC-V体系结构编程与实践》的benos_payload程序——mysbi跳转到benos分析

1、benos_payload.bin结构分析 韦东山老师提供的开发文档里已经对程序的结构做了分析&#xff0c;这里不再赘述&#xff0c;下面是讨论mysbi跳转到benos的问题&#xff1b; 2、mysbi跳转到benos的代码 3、跳转产生的疑问 我认为mysbi.bin最后跳转到0x22000地址处执行&#xff0…

Pytorch从零开始实战05

Pytorch从零开始实战——运动鞋识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——运动鞋识别环境准备数据集模型选择数据可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.0.1cu118…

代码混淆界面介绍

代码混淆界面介绍 代码混淆功能包括oc&#xff0c;swift&#xff0c;类和函数设置区域。其他flutter&#xff0c;混合开发的最终都会转未oc活着swift的的二进制&#xff0c;所以没有其他语言的设置。 代码混淆功能分顶部的显示控制区域&#xff1a;显示方式&#xff0c;风险等…

centos7安装db2 version11.1

centos7安装DB2 操作系统 linux centos7 DB2版本 11.1 1、取包 IBM MRS Tool 将安装包放在 /home/software 下面 mkdir -p /home/software cd /home/software wget https://iwm.dhe.ibm.com/sdfdl/v2/regs2/db2pmopn/Express-C/DB2ExpressC11/Xa.2/Xb.aA_60_-i7wWKFMFpbW1xl1…