Python——桌面攝像頭軟件(附源碼+打包)

目錄

一、前言

二、桌面攝像頭軟件

2.1、下載項目

2.2、功能介紹

三、打包工具(nuitka)

?四、項目文件復制(我全部合到一個文件里面了)

五、結語


一、前言

看見b站的向軍大叔用electron制作了一個桌面攝像頭軟件

但是,我不怎么熟悉前端,自己就用pyside6簡單制作一個

二、桌面攝像頭軟件

2.1、下載項目

軟件下載地址:(下載后,雙擊即可運行——60MB左右)

https://wwm.lanzout.com/ibIEL1q0xt8d
密碼:eg34

工程文件下載地址:

camera-python.zip - 藍奏云

啟動項目:

# 下載包
pip install -r requirements.txt# 運行項目
python main.py

2.2、功能介紹

啟動后,會自動打開默認攝像頭

基礎操作

左鍵長按:拖拽移動

滾輪上下滑動:放大和縮小攝像頭畫面

右鍵設置操作

選擇邊框顏色(rgb格式)

選擇攝像頭(自由切換)

窗口變形(正方形窗口和圓形窗口的切換)

隱藏

退出

系統托盤(可右鍵選擇隱藏或出現,以及退出)

三、打包工具(nuitka)

?Python——Windows使用Nuitka2.0打包(保姆級教程)-CSDN博客

我的打包命令:

?

nuitka --mingw64 --show-progress --standalone --disable-console --enable-plugin=pyside6 --plugin-enable=numpy --onefile --remove-output --windows-icon-from-ico=logo.ico camera.py

?四、項目文件復制(我全部合到一個文件里面了)

# -*- coding: utf-8 -*-
# @Author : pan
import time
import cv2
import numpy as npfrom PySide6.QtCore import (Qt, QTimer, QPropertyAnimation, QEasingCurve,QParallelAnimationGroup, QThread, QMutex,Signal, Slot, QCoreApplication, QDate, QDateTime,QLocale, QMetaObject, QObject, QPoint, QRect,QSize, QTime, QUrl, QAbstractAnimation, QEvent)
from PySide6.QtGui import (QPixmap, QPainter, QColor, QFontMetrics, QPen,QWheelEvent, QCursor, QAction, QImage, QPainterPath,QBrush, QConicalGradient, QFont, QFontDatabase,QGradient, QIcon, QKeySequence, QLinearGradient,QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QWidget, QLabel, QMenu, QDialog,QVBoxLayout, QLineEdit, QPushButton, QMessageBox,QInputDialog, QFrame, QHBoxLayout, QLayout,QSizePolicy, QSpacerItem, QSystemTrayIcon)# 提示組件
class Toast(QWidget):def __init__(self,text: str,duration: int = 3000,parent: QWidget = None,):super().__init__(parent)self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)self.setAttribute(Qt.WA_TranslucentBackground, True)self.duration = durationlabel = QLabel(self)label.setText(text)label.setStyleSheet("""background-color: rgba(60, 179, 113, 0.8);color: white;font-size: 16px;padding: 12px;border-radius: 4px;""")label.setAlignment(Qt.AlignCenter)fm = QFontMetrics(label.font())width = fm.boundingRect(text).width() + 80# 高度與寬度label.setFixedWidth(width)label.setFixedHeight(40)self.setGeometry(*self.calculatePosition(label.sizeHint()))self.fadeIn()self.animationTimer = QTimer()self.animationTimer.timeout.connect(self.fadeOut)self.animationTimer.start(self.duration)def calculatePosition(self, sizeHint):if self.parent() is not None:# 如果存在父窗口,計算使Toast窗口相對于父窗口居中的位置x = self.parent().width() / 2 - sizeHint.width()/2y = 10else:# 如果沒有父窗口,計算使Toast窗口相對于屏幕居中的位置desktopRect = QApplication.primaryScreen().availableGeometry()x = (desktopRect.width() - sizeHint.width()) // 2y = (desktopRect.height() - sizeHint.height()) // 2return x, y, sizeHint.width(), sizeHint.height()def fadeIn(self):# 創建并設置淡入動畫fadeInAnimation = QPropertyAnimation(self, b"windowOpacity", self)fadeInAnimation.setStartValue(0)fadeInAnimation.setEndValue(1)fadeInAnimation.setDuration(500)fadeInAnimation.finished.connect(lambda: print('加載成功'))# 啟動淡入動畫fadeInAnimation.start()print('in')# 淡出動畫def fadeOut(self):print('out')# 停止計時器self.animationTimer.stop()# 斷開計時器的超時信號與當前方法的連接self.animationTimer.timeout.disconnect(self.fadeOut)# 創建并設置并行動畫組self.parallelAnimation = QParallelAnimationGroup()# 創建并設置不透明度動畫self.opacityAnimation = QPropertyAnimation(self, b"windowOpacity")self.opacityAnimation.setStartValue(1.0)self.opacityAnimation.setEndValue(0.0)self.opacityAnimation.setDuration(500)# 創建并設置位置動畫self.yAnimation = QPropertyAnimation(self, b"geometry")targetY = self.y() - 10self.yAnimation.setStartValue(self.geometry())self.yAnimation.setEndValue(self.geometry().translated(0, targetY))self.yAnimation.setDuration(500)self.yAnimation.setEasingCurve(QEasingCurve.OutCubic)# 將動畫添加到并行動畫組中self.parallelAnimation.addAnimation(self.opacityAnimation)self.parallelAnimation.addAnimation(self.yAnimation)# 連接并行動畫組的完成信號與關閉窗口的槽self.parallelAnimation.finished.connect(self.close)# 啟動動畫組self.parallelAnimation.start(QAbstractAnimation.DeleteWhenStopped)def paintEvent(self, event):painter = QPainter(self)painter.fillRect(self.rect(), QColor(0, 0, 0, 0))def mousePressEvent(self, event):pass# 彈窗 輸入框
class Ui_InputColor(QWidget):textEntered = Signal(str)  # 定義一個帶有字符串參數的信號def __init__(self):super().__init__()self.drag_position = Nonedef setupUi(self, Form):Form.setObjectName("Form")  # 直接設置對象名稱Form.resize(200, 70)# 設置背景顏色和透明度Form.setWindowFlags(Qt.FramelessWindowHint)  # 設置無邊框窗口Form.setAttribute(Qt.WA_TranslucentBackground)  # 設置窗口透明self.bg_gray = QFrame(Form)self.bg_gray.setObjectName(u"bg_gray")self.bg_gray.setGeometry(QRect(0, 0, 200, 65))self.bg_gray.setStyleSheet(u".QFrame{\n"
"	background-color: rgb(234,236,243);\n"
"	border-radius:5px;\n"
"}")self.bg_gray.setFrameShape(QFrame.StyledPanel)self.bg_gray.setFrameShadow(QFrame.Raised)self.verticalLayout_3 = QVBoxLayout(self.bg_gray)self.verticalLayout_3.setSpacing(0)self.verticalLayout_3.setObjectName(u"verticalLayout_3")self.verticalLayout_3.setContentsMargins(10, 11, 4, 11)self.verticalLayout_2 = QVBoxLayout()# 設置右側邊距為5pxself.verticalLayout_2.setContentsMargins(0, 0, 7, 0)self.verticalLayout_2.setObjectName(u"verticalLayout_2")self.window_top = QHBoxLayout()self.window_top.setSpacing(10)self.window_top.setObjectName(u"window_top")self.window_top.setSizeConstraint(QLayout.SetFixedSize)self.window_top.setContentsMargins(0, 0, 0, 0)self.text_title = QLabel(self.bg_gray)self.text_title.setObjectName(u"text_title")self.text_title.setStyleSheet(u"    font-size: 9pt;\n"
"    font-family: \"\u5fae\u8f6f\u96c5\u9ed1\";\n"
"    color: #333;\n"
"font-weight: bold;")self.window_top.addWidget(self.text_title)self.h_spacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)self.window_top.addItem(self.h_spacer)self.btn_min = QPushButton(self.bg_gray)self.btn_min.setObjectName(u"btn_min")sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.btn_min.sizePolicy().hasHeightForWidth())self.btn_min.setSizePolicy(sizePolicy)self.btn_min.setMaximumSize(QSize(10, 10))self.btn_min.setStyleSheet(u"QPushButton {\n"
"    background-color: #07BB2C;\n"
"    border: 2px solid #07BB2C;\n"
"    color: #3498db;\n"
"    padding: 1px;\n"
"    border-radius: 5px;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
"    background-color: #09ED3A;\n"
"    color: #ffffff;\n"
"}")self.window_top.addWidget(self.btn_min)self.btn_max = QPushButton(self.bg_gray)self.btn_max.setObjectName(u"btn_max")self.btn_max.setMaximumSize(QSize(10, 10))self.btn_max.setStyleSheet(u"QPushButton {\n"
"    background-color: #FFB206;\n"
"    border: 2px solid #FFB206;\n"
"    color: #3498db;\n"
"    padding: 1px;\n"
"    border-radius: 5px;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
"    background-color: #FFC033;\n"
"    color: #ffffff;\n"
"}")self.window_top.addWidget(self.btn_max)self.btn_stop = QPushButton(self.bg_gray)self.btn_stop.setObjectName(u"btn_stop")self.btn_stop.clicked.connect(self.hide)  # 關聯關閉窗口事件self.btn_stop.setMaximumSize(QSize(10, 10))self.btn_stop.setStyleSheet(u"\n"
"\n"
"QPushButton {\n"
"    background-color: #EE514A;\n"
"    border: 2px solid #EE514A;\n"
"    color: #3498db;\n"
"    padding: 1px;\n"
"    border-radius: 5;\n"
"}\n"
" \n"
"QPushButton:hover {\n"
"    background-color: #F1756F;\n"
"    color: #ffffff;\n"
"}")self.window_top.addWidget(self.btn_stop)self.verticalLayout_2.addLayout(self.window_top)self.horizontalLayout = QHBoxLayout()self.horizontalLayout.setObjectName(u"horizontalLayout")self.lineEdit = QLineEdit(self.bg_gray)self.lineEdit.setObjectName(u"lineEdit")self.horizontalLayout.addWidget(self.lineEdit)self.b_submit = QPushButton(self.bg_gray)self.b_submit.clicked.connect(self.emitSignal)  # 點擊按鈕時連接到發射信號的方法self.b_submit.setObjectName(u"b_submit")self.b_submit.setMinimumSize(QSize(0, 0))self.b_submit.setStyleSheet(u"            QPushButton {\n"
"                border-style: solid;\n"
"                border-width: 2px;\n"
"                border-radius: 15px;\n"
"                border-color: rgb(88, 180, 107);\n"
"                font-size: 7pt;\n"
"                font-weight: bold;\n"
"                padding: 2px;\n"
"                background-color: rgb(88, 180, 107);\n"
"                color: rgb(255, 255, 255);\n"
"            }\n"
"            QPushButton:hover {\n"
"                border-color: rgb(100, 100, 100);\n"
"                background-color: rgb(183, 255, 189);\n"
"				color: rgb(88, 180, 107);\n"
"            }\n"
"            QPushButton:pressed {\n"
"                border-color: rgb(42, 42, 42);\n"
"                background-color: rgb(160, 255, 163);\n"
"				color: rgb(88, 180, 107);\n"
"            }")self.horizontalLayout.addWidget(self.b_submit)self.verticalLayout_2.addLayout(self.horizontalLayout)self.verticalLayout_3.addLayout(self.verticalLayout_2)self.retranslateUi(Form)QMetaObject.connectSlotsByName(Form)# setupUi@Slot()def emitSignal(self):text = self.lineEdit.text()self.textEntered.emit(text)  # 發射信號,并傳遞lineEdit中的文本def retranslateUi(self, Form):Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None))self.text_title.setText(QCoreApplication.translate("Form", u"\u8bf7\u8f93\u5165\u8272\u53f7", None))self.btn_min.setText("")self.btn_max.setText("")self.btn_stop.setText("")self.lineEdit.setPlaceholderText(QCoreApplication.translate("Form", u"255,255,255", None))self.b_submit.setText(QCoreApplication.translate("Form", u"\u786e\u8ba4", None))# retranslateUidef mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.drag_position = event.globalPosition().toPoint() - self.frameGeometry().topLeft()event.accept()def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton and self.drag_position:self.move(event.globalPosition().toPoint() - self.drag_position)event.accept()def mouseReleaseEvent(self, event):if event.button() == Qt.LeftButton:self.drag_position = Noneevent.accept()# 攝像頭檢測類
class Camera:def __init__(self, cam_preset_num=5):self.cam_preset_num = cam_preset_numdef get_cam_num(self):cnt = 0devices = []for device in range(0, self.cam_preset_num):stream = cv2.VideoCapture(device, cv2.CAP_DSHOW)grabbed = stream.grab()stream.release()if not grabbed:continueelse:cnt = cnt + 1devices.append(device)return cnt, devices# 攝像頭線程
class CameraThread(QThread):change_pixmap_signal = Signal(np.ndarray)def __init__(self, device_id=0):super().__init__()self.device_id = device_idself.is_paused = Falseself.mutex = QMutex()self.exiting = Falseself.cap = Nonedef run(self):self.cap = cv2.VideoCapture(self.device_id)while not self.exiting:self.mutex.lock()if not self.is_paused:ret, frame = self.cap.read()if ret:self.change_pixmap_signal.emit(frame)else:breakself.mutex.unlock()self.cap.release()self.cap = Nonedef set_device_id(self, device_id):self.device_id = device_iddef pause(self):self.mutex.lock()self.is_paused = Trueself.mutex.unlock()def resume(self):self.mutex.lock()self.is_paused = Falseself.mutex.unlock()def stop(self):self.exiting = Trueself.wait()def set_device_id(self, device_id):self.device_id = device_iddef stop(self):self.exiting = True# 主窗口
class MyWindow(QWidget):def __init__(self,text: str,parent: QWidget = None,):super().__init__(parent)# 設置窗口屬性self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)self.setAttribute(Qt.WA_TranslucentBackground, True)# 窗口大小self.size = 200self.color = "255,255,255"self.window_shape = 0  # 0是圓# 子線程self.camera_thread = CameraThread()self.camera_thread.change_pixmap_signal.connect(self.image_data_slot)self.camera_thread.start()self.select_camera = Falseself.input_color_window = None# 創建標簽并設置樣式self.label = QLabel(self)self.label.setText(text)self.reset_style()  # 樣式刷新self.label.setAlignment(Qt.AlignCenter)# 設置標簽尺寸self.label.setAlignment(Qt.AlignCenter)self.label.setFixedSize(self.size, self.size)  # 設置標簽的寬度和高度# 設置窗口位置self.setGeometry(*self.calculatePosition(self.label.sizeHint()))self.fadeIn()def fadeIn(self):# 創建并設置淡入動畫fadeInAnimation = QPropertyAnimation(self, b"windowOpacity", self)fadeInAnimation.setStartValue(0)fadeInAnimation.setEndValue(1)fadeInAnimation.setDuration(500)fadeInAnimation.finished.connect(lambda: print('窗口 加載成功'))# 啟動淡入動畫fadeInAnimation.start()# 出現在屏幕居中的位置def calculatePosition(self, sizeHint):desktopRect = QApplication.primaryScreen().availableGeometry()x = (desktopRect.width() - sizeHint.width()) // 2y = (desktopRect.height() - sizeHint.height()) // 2return x, y, sizeHint.width(), sizeHint.height()def paintEvent(self, event):painter = QPainter(self)painter.fillRect(self.rect(), QColor(0, 0, 0, 0))def image_data_slot(self, image_data):if self.select_camera is True:self.label.clear()self.label.setText('請重新選擇攝像頭')returnself.image = cv2.cvtColor(image_data, cv2.COLOR_BGR2RGB)height, width, channel = self.image.shapebytesPerLine = 3 * widthimage = QImage(self.image.data, width, height, bytesPerLine, QImage.Format_RGB888)# 將圖片先裁剪為正方形width = image.width()height = image.height()size = min(width, height)square_image = image.copy((width - size) // 2, (height - size) // 2, size, size)# 計算縮放比例new_size = self.size - 10label_size = self.label.sizeHint()scaled_image = square_image.scaled(new_size, new_size, Qt.KeepAspectRatio)# 將 QImage 轉換為 QPixmappixmap = QPixmap.fromImage(scaled_image)# 創建一個圓形路徑path = QPainterPath()path.addEllipse(0, 0, new_size, new_size)# 創建一個與 scaled_image 大小相同的的 QPixmapresult_pixmap = QPixmap(new_size, new_size)result_pixmap.fill(Qt.transparent)# 在 result_pixmap 上繪制圓形圖像painter = QPainter(result_pixmap)if self.window_shape == 0:painter.setClipPath(path)  # 設置裁剪路徑painter.setRenderHint(QPainter.Antialiasing)  # 設置抗鋸齒painter.drawPixmap(0, 0, pixmap)  # 繪制原始圖像painter.end()# 在 label 上顯示圓形圖像self.label.setPixmap(result_pixmap)def reset_style(self, flag=1):try:if flag == 0:r = 0else:r = self.size / 2self.label.setStyleSheet(f"""font-family: Arial, sans-serif; /* 設置字體 */font-size: 12pt; /* 設置字體大小 */background-color: rgb({self.color}); /* 設置背景顏色為紅色 */padding: 0px; border-radius: {r}; /* 設置圓角大小為寬度的一半 */""")except Exception as e:print(e)def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.drag_position = event.globalPosition().toPoint() - self.frameGeometry().topLeft()event.accept()# 右鍵 打開菜單if event.button() == Qt.RightButton:menu = QMenu(self)set_color_action = menu.addAction("設置邊框色")set_camera_action = menu.addAction("選擇攝像頭")set_camera_shape = menu.addAction('圓形窗口') if self.window_shape == 1 else menu.addAction('正方形窗口')set_hide_action = menu.addAction("隱藏")set_quit_action = menu.addAction("退出")# 修改 exec_ 棄用警告action = menu.exec(self.mapToGlobal(event.position().toPoint()))if action == set_color_action:# 打開窗口 Ui_InputColorself.open_input_color_window()# 獲取目前所有攝像頭的設備號,然后把設備號弄成一個菜單,讓用戶選擇if action == set_camera_action:self.select_camera = True# 如果有攝像頭在運行if self.camera_thread.cap is not None:# 這里給我繪制一個標簽,等待2s再消失self.toast = Toast("正在關閉攝像頭中", 1000, self)self.toast.show()time.sleep(1)self.camera_thread.stop()  # 停止攝像頭播放return# 檢測攝像頭可用設備,把設備號弄成一個菜單,讓用戶選擇# 獲取本地攝像頭數量_, cams = Camera().get_cam_num()popMenu = QMenu()popMenu.setFixedWidth(110)popMenu.setStyleSheet('''QMenu {font-size: 9px;font-family: "Microsoft YaHei UI";font-weight: light;color:white;padding-left: 5px;padding-right: 5px;padding-top: 4px;padding-bottom: 4px;border-style: solid;border-width: 0px;border-color: rgba(255, 212, 255, 255);border-radius: 3px;background-color: rgba(16,155,226,50);}''')for cam in cams:action = QAction(f'{cam} 號攝像頭')popMenu.addAction(action)pos = QCursor.pos()action = popMenu.exec(pos)# 設置攝像頭來源if action:str_temp = ''selected_stream_source = str_temp.join(filter(str.isdigit, action.text()))  # 獲取攝像頭號,去除非數字字符self.toast = Toast(f"攝像頭設備是:{selected_stream_source}", 1000, self)self.toast.show()self.select_camera = Falseself.camera_thread = CameraThread()self.camera_thread.device_id = int(selected_stream_source)self.camera_thread.change_pixmap_signal.connect(self.image_data_slot)self.camera_thread.start()# 切換窗口if action == set_camera_shape:#if self.window_shape == 1:self.window_shape = 0 # 切換為圓形self.reset_style()  # 切換為圓形else:self.window_shape = 1self.reset_style(flag=0)  # 背景 變成正方形# 隱藏if action == set_hide_action:self.hide()# 退出if action == set_quit_action:self.close()# 顏色設置def colorEntered(self, text):print(1)# TODO 數據處理self.color = textself.reset_style()self.input_color_window.hide()#  打開窗口 Ui_InputColordef open_input_color_window(self):if self.input_color_window is None:  # 只有當窗口對象尚未創建時才創建它self.input_color_window = Ui_InputColor()self.input_color_window.setupUi(self.input_color_window)self.input_color_window.setWindowFlag(Qt.FramelessWindowHint)  # 設置窗口標志:隱藏窗口邊框self.input_color_window.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)  # 設置窗口標志位self.input_color_window.textEntered.connect(self.colorEntered)  # 連接子窗口的信號和父窗口的槽# 窗口顯示在父窗口的中心self.input_color_window.move(self.x() + (self.width() - self.input_color_window.width()) / 2,self.y() + (self.height() - self.input_color_window.height()) / 2)self.input_color_window.show()def mouseMoveEvent(self, event):# 左鍵 移動創建if event.buttons() == Qt.LeftButton:self.move(event.globalPosition().toPoint() - self.drag_position)event.accept()def mouseReleaseEvent(self, event):self.drag_position = None# 窗口大小變換def row_event(self, up=0, down=0):self.size = self.size + upself.size = self.size - downif self.window_shape == 1:self.reset_style(flag=0)  # 背景 變成正方形else:self.reset_style()  # 切換為圓形self.label.setFixedSize(self.size, self.size)  # 設置標簽的寬度和高度self.setFixedSize(self.size, self.size)def event(self, event):if event.type() == QWheelEvent.Wheel:# 阻止默認的滾動行為event.ignore()# 獲取滾動方向和距離delta = event.angleDelta().y() / 120# 根據滾動方向和距離執行相應操作if delta < 0:# 向下滾動(觸發兩次 因為背景上有bugself.row_event(down=1)self.row_event(down=1)else:# 向上滾動(觸發兩次 因為背景上有bugself.row_event(up=1)self.row_event(up=1)return Truereturn super().event(event)if __name__ == "__main__":app = QApplication([])# 創建系統托盤圖標tray_icon = QSystemTrayIcon(QIcon("logo.jpg"), parent=app)tray_icon.setToolTip("Camera By Pan")# 創建并設置托盤圖標的右鍵菜單menu = QMenu()show_action = menu.addAction("出現")     # 讓window窗口出現hide_action = menu.addAction("隱藏")     # 讓window窗口隱藏exit_action = menu.addAction("退出")tray_icon.setContextMenu(menu)# 顯示托盤圖標tray_icon.show()window = MyWindow("Camera Software By Pan")# 使窗口不在任務欄出現window.setWindowFlags(window.windowFlags() | Qt.Tool)  # 或者使用 Qt.SubWindow,根據你的需求和測試結果選擇# 注意:# 使用Qt.Tool標志會使得窗口不在任務欄顯示,這對于某些輔助工具或臨時窗口是有用的。# 然而,這種改變也可能影響窗口的關閉行為和資源管理,尤其是在與系統托盤圖標交互的上下文中。# 這導致我在關閉子窗口的時候,會導致程序崩潰!!!# 這導致我在關閉子窗口的時候,會導致程序崩潰!!!# 這導致我在關閉子窗口的時候,會導致程序崩潰!!!window.show()# 連接信號到槽函數exit_action.triggered.connect(app.quit)show_action.triggered.connect(window.show)hide_action.triggered.connect(window.hide)app.exec()


五、結語

  • 如果你有任何問題,歡迎在評論區留言,我會盡快回復。
  • 很久沒有碰pyside6,而且學的很淺顯,寫了屎山代碼
  • 目前只能保證功能實現,里面還有一些小bug
  • 但是不影響正常使用,就這樣吧~

PS:其實我只是想自己拿來用用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715943.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PPT 批量刪除每頁相同位置的內容

方法&#xff1a; 選擇【視圖】&#xff0c;【宏】&#xff0c;設置宏的名稱&#xff0c;點創建將下列函數復制到宏中&#xff0c;在ppt中先選擇某個要刪除的對象&#xff0c;然后運行宏即可 函數內容如下 Sub Delete( ) Dim oSlide As Slide, oShape As Shape Dim myWidt…

如何在jupyter notebook 中下載第三方庫

在anconda 中找到&#xff1a; Anaconda Prompt 進入頁面后的樣式&#xff1a; 在黑色框中輸入&#xff1a; 下載第三方庫的命令 第三方庫&#xff1a; 三種輸入方式 標準保證正確 pip instsall 包名 -i 鏡像源地址 pip install pip 是 Python 包管理工具&#xff0c;…

新項目,Linux上一鍵安裝MySQL,Redis,Nacos,Minio

大家好&#xff0c;我是 jonssonyan 分享一個我的一個開源項目&#xff0c;這是一個在 Linux 平臺上一鍵安裝各種軟件的腳本項目&#xff0c;腳本使用 Shell 語言編寫&#xff0c;后續還會增加更多軟件的一鍵安裝&#xff0c;代碼在 GitHub 上全部開源的&#xff0c;開源地址如…

【Python】進階學習:pandas--如何根據指定條件篩選數據

【Python】進階學習&#xff1a;pandas–如何根據指定條件篩選數據 &#x1f308; 個人主頁&#xff1a;高斯小哥 &#x1f525; 高質量專欄&#xff1a;Matplotlib之旅&#xff1a;零基礎精通數據可視化、Python基礎【高質量合集】、PyTorch零基礎入門教程&#x1f448; 希望…

2024第二次培訓:win11系統下使用nginx、JDK、mysql搭建基于vue2、java前后端分離的web應用運行環境

一.背景 公司安排了帶徒弟的任務&#xff0c;給培訓寫點材料。前面分開介紹了mysql、jdk、nginx的安裝&#xff0c;都只是零星的介紹&#xff0c;只能算零散的學習。學習了有什么用呢&#xff1f;能解決什么問題&#xff1f;能完成什么工作&#xff1f; 今天我們要用之前的幾篇…

為什么要在業務系統中引入大寬表?

在高度系統化驅動的業務中&#xff0c;查看業務報表已經是一個很常見的需求了。在分工非常明確的大型企業里&#xff0c;往往有專門的數據分析團隊 BI 或者數據開發團隊&#xff0c;他們能夠勝任此類需求&#xff08;但也未必是輕松的&#xff0c;或者說高效的&#xff09;。 …

中國電子學會(CEIT)2023年05月真題C語言軟件編程等級考試二級(含解析答案)

中國電子學會(CEIT)考評中心歷屆真題(含解析答案) C語言軟件編程等級考試二級 2023年05月 編程題五道 總分:100分一、數字放大(20分) 給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。 時間限制: 1000 內存限制: 65536 輸入 包含三行:第一行為N,…

Stable Diffusion 模型分享:AAM XL (Anime Mix)(動漫截屏風格 XL)

本文收錄于《AI繪畫從入門到精通》專欄&#xff0c;專欄總目錄&#xff1a;點這里。 文章目錄 模型介紹生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下載地址 模型介紹 AAM XL (Anime Mix) 是一個動漫截屏風格的模型&#xff0c;是 AAM - AnyLoRA Anime Mix 模…

【yolov8部署實戰】VS2019環境下使用C++和OpenCV環境部署yolo項目|含詳細注釋源碼

一、前言 之前一陣子一直在做的就是怎么把yolo項目部署成c項目&#xff0c;因為項目需要嵌套進yolo模型跑算法。因為自己也是本科生小白一枚&#xff0c;基本上對這方面沒有涉獵過&#xff0c;自己一個人從網上到處搜尋資料&#xff0c;寫代碼&#xff0c;調試&#xff0c;期間…

黑馬JavaWeb開發跟學(三)Web前端開發Vue-Element

黑馬JavaWeb開發跟學三.Web前端開發Vue-Element 1 Ajax1.1 Ajax介紹1.1.1 Ajax概述1.1.2 Ajax作用1.1.3 同步異步 1.2 原生Ajax1.3 Axios1.3.1 Axios的基本使用1.3.2 Axios快速入門1.3.3 請求方法的別名1.3.4 案例 2 前后臺分離開發2.1 前后臺分離開發介紹2.2 YAPI2.2.1 YAPI介…

CNN文本分類(tensorflow實現)

前言 實現步驟 1.安裝tensorflow2.導入所需要的tensorflow庫和其它相關模塊3.設置隨機種子4.定義模型相關超參數5.加載需要的數據集6.對加載的文本內容進行填充和截斷7.構建自己模型8.訓練構建的模型9.評估完成的模型 CNN&#xff08;卷積神經網絡&#xff09;在文本分類任務中…

【GPU驅動開發】-mesa簡介

前言 不必害怕未知&#xff0c;無需恐懼犯錯&#xff0c;做一個Creator&#xff01; 一、mesa介紹 Mesa 是一個開源的3D圖形庫&#xff0c;它實現了多種圖形API&#xff0c;包括 OpenGL、Vulkan 和 OpenCL。Mesa 的目標是提供一個開源、跨平臺的圖形庫&#xff0c;使得開發者…

ABAP - SALV教程08 列設置熱點及綁定點擊事件

實現思路&#xff1a;將列設置成熱點&#xff0c;熱點列是可點擊的&#xff0c;再給SALV實例對象注冊點擊事件即可&#xff0c;一般作用于點擊單號跳轉到前臺等功能 "設置熱點方法METHODS:set_hotspot CHANGING co_alv TYPE REF TO cl_salv_table...."事件處理方法M…

SMART原則

在軟件研發領域&#xff0c;項目管理和目標設定尤為關鍵。一個成功的軟件項目不僅需要先進的技術支持&#xff0c;還需要一個清晰、明確且可實現的目標。SMART原則&#xff0c;作為一種高效的目標設定和管理方法&#xff0c;為軟件研發提供了有力的指導。SMART是五個英文單詞首…

合宙esp32-c3 進入深度睡眠無法喚醒解決一例

手賤&#xff0c;昨天收到了嘉立創最新的esp32 s3,想測試一下電流功耗&#xff0c;于是順便測試了一下以前的合宙esp32 c3 無串口芯片的版本 打算對比一下c3和s3的功耗相差多少&#xff0c;結果把自己玩死了&#xff1a; void setup() {esp_deep_sleep_start();// esp_light_s…

oppo手機備忘錄記錄怎么轉移到華為手機?

oppo手機備忘錄記錄怎么轉移到華為手機?使用oppo手機已經有三四年了&#xff0c;因為平時習慣&#xff0c;在手機系統的備忘錄中記錄了很多重要的筆記&#xff0c;比如工作會議的要點、讀書筆記、購物清單、朋友的生日提醒等。這些記錄對我來說非常重要&#xff0c;我可以通過…

STM32 HAL庫 串口使用問題記錄

文章目錄 STM32 HAL庫 串口使用問題記錄情況一&#xff1a;串口導致程序假死機情況二&#xff1a;其它程序正常運行&#xff0c;串口不再接收數據 STM32 HAL庫 串口使用問題記錄 情況一&#xff1a;串口導致程序假死機 多數應該出現在未開啟DMA模式使用中斷方式接收數據的情況…

鉀是人體內重要的電解質之一

鉀是人體內重要的電解質之一&#xff0c;是維持細胞生理活動的主要陽離子&#xff0c;在保持機體的正常滲透壓及酸堿平衡&#xff0c;維持內環境的穩定性&#xff0c;參與糖及蛋白質代謝&#xff0c;保證神經肌肉的正常功能&#xff0c;在興奮性等方面具有重要的作用。人體內的…

2000-2021年300+地級市進出口總額數據

2000-2021年300地級市進出口總額數據 1、時間&#xff1a;2000-2021年 2、指標&#xff1a;進出口總額 3、單位&#xff1a;萬美元 4、來源&#xff1a;城市年鑒、各省年鑒、城市公報、2021年為城市統計年鑒中進口額出口額加總之后換算成萬美元&#xff0c;已盡最大可能進行…

20240303

1.在優勢、劣勢、機會與威脅(SWOT)的分析期間&#xff0c;團隊發現另一個項目通過與該團隊合作可能從規模經濟中獲益。兩個項目的成本都可能大幅降低&#xff0c;并可能實現公司的利益&#xff0c;項目經理應該怎么做? A.在風險登記冊中記錄該發現 B.詢問項目發起人的意見 …