最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+PyQt5自制監(jiān)控小工具

 更新時間:2023年03月17日 09:40:05   作者:Sir 老王  
這篇文章主要為大家詳細介紹了如何通過使用python實現(xiàn)對計算機攝像頭的調(diào)用從而實現(xiàn)攝像監(jiān)控的功能,文中的示例代碼講解詳細,需要的可以參考一下

本篇文章通過使用python實現(xiàn)對計算機攝像頭的調(diào)用從而實現(xiàn)攝像監(jiān)控的功能。

利用opencv的圖像處理功能可以輕松對計算機攝像頭的調(diào)用實現(xiàn)實時圖像的采集效果。

最終將圖片進行保存后生成監(jiān)控的歷史視頻記錄。

pip?install?PyQt5

pip?install?python-opencv

若是沒有安裝相關的模塊,可以選擇上述pip的方式進行安裝。

接下來我們將需要的python模塊導入到代碼塊中。

#?It's?just?an?alias?for?the?cv2?module.
import?cv2?as?cv_

#?It's?importing?all?the?classes?from?the?QtGui?module.
from?PyQt5.QtGui?import?*

#?It's?importing?all?the?classes?from?the?QtCore?module.
from?PyQt5.QtCore?import?*

#?It's?importing?all?the?classes?from?the?QtWidgets?module.
from?PyQt5.QtWidgets?import?*

#?It's?importing?the?sys?module.
import?sys

#?It's?importing?the?os?module.
import?os

#?It's?importing?the?time?module.
import?time

#?It's?importing?the?traceback?module.
import?traceback

創(chuàng)建名稱為CameraUI的python類,開發(fā)監(jiān)控工具相關的頁面組件及布局。

將控件按鈕等對應的槽函數(shù)也放到該類中。

class?CameraUI(QWidget):
????def?__init__(self):
????????super(CameraUI,?self).__init__()
????????self.init_ui()

????def?init_ui(self):
????????self.setWindowTitle('本地監(jiān)控工具?公眾號:Python 集中營')
????????self.setWindowIcon(QIcon('ico.png'))
????????self.resize(600,?400)

????????self.label_view?=?QLabel()

????????self.image_path?=?QLineEdit()
????????self.image_path.setReadOnly(True)
????????self.image_path.setPlaceholderText('視頻流圖片保存地址')

????????self.image_path_btn?=?QPushButton()
????????self.image_path_btn.setText('打開')
????????self.image_path_btn.clicked.connect(self.image_path_btn_clk)

????????self.video_path?=?QLineEdit()
????????self.video_path.setReadOnly(True)
????????self.video_path.setPlaceholderText('監(jiān)控視頻保存地址')

????????self.video_path_btn?=?QPushButton()
????????self.video_path_btn.setText('打開')
????????self.video_path_btn.clicked.connect(self.video_path_btn_clk)

????????self.start_listen_btn?=?QPushButton()
????????self.start_listen_btn.setText('開啟監(jiān)控')
????????self.start_listen_btn.clicked.connect(self.start_listen_btn_clk)

????????self.brower?=?QTextBrowser()
????????self.brower.setReadOnly(True)
????????self.brower.setFont(QFont('宋體',?8))
????????self.brower.setPlaceholderText('日志處理過程區(qū)域...')
????????self.brower.ensureCursorVisible()

????????hbox?=?QHBoxLayout()
????????vbox_left?=?QVBoxLayout()
????????vbox_right?=?QVBoxLayout()

????????vbox_left.addWidget(self.label_view)
????????vbox_right_grid1?=?QGridLayout()
????????vbox_right_grid1.addWidget(self.image_path,?0,?0,?1,?2)
????????vbox_right_grid1.addWidget(self.image_path_btn,?0,?2,?1,?1)
????????vbox_right_grid1.addWidget(self.video_path,?1,?0,?1,?2)
????????vbox_right_grid1.addWidget(self.video_path_btn,?1,?2,?1,?1)

????????vbox_right_grid2?=?QGridLayout()
????????vbox_right_grid2.addWidget(self.brower,?0,?0,?1,?3)
????????vbox_right_grid2.addWidget(self.start_listen_btn,?1,?0,?1,?3)

????????vbox_right.addLayout(vbox_right_grid1)
????????vbox_right.addLayout(vbox_right_grid2)

????????hbox.addLayout(vbox_left)
????????hbox.addLayout(vbox_right)

????????self.listen_thread?=?ListenWorkThread(self)
????????self.listen_thread.message.connect(self.show_message)
????????self.listen_thread.finished.connect(lambda:?self.start_listen_btn.setEnabled(True))

????????self.setLayout(hbox)

????def?show_message(self,?text):
????????cursor?=?self.brower.textCursor()
????????cursor.movePosition(QTextCursor.End)
????????self.brower.append(text)
????????self.brower.setTextCursor(cursor)
????????self.brower.ensureCursorVisible()

????def?image_path_btn_clk(self):
????????dir?=?QFileDialog.getExistingDirectory(self,?"選擇文件夾",?os.getcwd())
????????self.image_path.setText(dir)

????def?video_path_btn_clk(self):
????????dir?=?QFileDialog.getExistingDirectory(self,?"選擇文件夾",?os.getcwd())
????????self.video_path.setText(dir)

????def?start_listen_btn_clk(self):
????????self.listen_thread.start()

開發(fā)一個ListenWorkThread類并且繼承自QThread的子線程。

將該線程作為業(yè)務類實現(xiàn)調(diào)用本地攝像頭完成監(jiān)控的效果。

class?ListenWorkThread(QThread):
????message?=?pyqtSignal(str)
????finished?=?pyqtSignal(bool)

????def?__init__(self,?parent=None):
????????super(ListenWorkThread,?self).__init__(parent)
????????self.parent?=?parent
????????self.working?=?True

????def?__del__(self):
????????self.working?=?False

????def?run(self):
????????try:
????????????image_path?=?self.parent.image_path.text()
????????????video_path?=?self.parent.video_path.text()
????????????if?image_path.strip()?==?''?or?video_path.strip()?==?'':
????????????????self.message.emit('相關路徑設置不能為空,請檢查設置!')
????????????????return
????????????self.cap?=?cv_.VideoCapture(0)
????????????self.cap.set(3,?300)
????????????self.cap.set(4,?400)
????????????if?self.cap.isOpened():
????????????????self.message.emit('攝像頭已成功打開!')
????????????????n?=?0
????????????????self.message.emit('正在進行視頻 監(jiān)控中....')
????????????????start_time?=?time.clock()
????????????????while?True:
????????????????????ret,?img?=?self.cap.read()
????????????????????if?os.path.exists(os.path.join(image_path,?str(n)?+?'.jpg')):
????????????????????????os.remove(os.path.join(image_path,?str(n)?+?'.jpg'))
????????????????????self.save_image(img,?str(n),?image_path)
????????????????????time.sleep(0.1)
????????????????????pixmap_?=?QPixmap(os.path.join(image_path,?str(n)?+?'.jpg'))
????????????????????self.parent.label_view.setPixmap(pixmap_)
????????????????????n?=?n?+?1

????????????self.finished.emit(True)
????????except?Exception?as?e:
????????????traceback.print_exc()
????????????self.message.emit('程序運行錯誤,請檢查參數(shù)是否設置正確!')
????????????self.finished.emit(True)

????def?save_image(self,?image=None,?file_name=None,?image_path=None):
????????if?image?is?not?None:
????????????cv_.imwrite(os.path.join(image_path,?file_name?+?'.jpg'),?image)

以上整個業(yè)務子線程的邏輯就開發(fā)完成了,然后使用python模塊的main函數(shù)調(diào)用。

將整個程序的運行加入到主體循環(huán)當中。

if?__name__?==?'__main__':
????app?=?QApplication(sys.argv)
????main?=?CameraUI()
????main.show()
????sys.exit(app.exec_())

到此這篇關于Python+PyQt5自制監(jiān)控小工具的文章就介紹到這了,更多相關Python PyQt5監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中幾種屬性訪問的區(qū)別與用法詳解

    Python中幾種屬性訪問的區(qū)別與用法詳解

    這篇文章主要給大家介紹了關于Python中幾種屬性訪問的區(qū)別和用法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • Python中可變和不可變對象的深入講解

    Python中可變和不可變對象的深入講解

    python與C/C++不一樣,它的變量使用有自己的特點,學python的時候一定要記住一切皆為對象,一切皆為對象的引用,這篇文章主要給大家介紹了關于Python中可變和不可變對象的相關資料,需要的朋友可以參考下
    2021-07-07
  • python中的列表和元組區(qū)別分析

    python中的列表和元組區(qū)別分析

    這篇文章主要介紹了python中的列表和元組區(qū)別分析,需要的朋友可以參考下
    2020-12-12
  • python中的print()函數(shù)end=' '的使用及說明

    python中的print()函數(shù)end=' '的使用及說明

    這篇文章主要介紹了python中的print()函數(shù)end=' '的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python繪制散點圖詳細步驟(從0到1必會)

    python繪制散點圖詳細步驟(從0到1必會)

    這篇文章主要介紹了如何使用Python繪制散點圖,包括導入包、準備數(shù)據(jù)、繪制圖像、修飾圖像(添加標題、坐標軸標簽、顏色圖例)以及整合所有代碼,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • 深入解析Python中的變量和賦值運算符

    深入解析Python中的變量和賦值運算符

    這篇文章主要介紹了深入解析Python中的變量和賦值運算符,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10
  • python包導入的兩種方式

    python包導入的兩種方式

    本文主要介紹了python包導入的方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python編寫第一個交互程序步驟示例教程

    python編寫第一個交互程序步驟示例教程

    這篇文章主要為大家介紹了python編寫第一個交互程序示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 使用Python向DataFrame中指定位置添加一列或多列的方法

    使用Python向DataFrame中指定位置添加一列或多列的方法

    今天小編就為大家分享一篇使用Python向DataFrame中指定位置添加一列或多列的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python采集某網(wǎng)站文檔并保存word格式的示例

    Python采集某網(wǎng)站文檔并保存word格式的示例

    這篇文章主要介紹了Python采集某網(wǎng)站文檔并保存word格式的示例,我們平常需要下載文檔的時候,是不是發(fā)現(xiàn),要么不能下載,要么不能復制,那么我們今天來分享一下,如何用Python將這些不給下載的文檔給批量下載下來,需要的朋友可以參考下
    2023-07-07

最新評論

江津市| 康乐县| 集安市| 嘉荫县| 永登县| 双鸭山市| 扎赉特旗| 天等县| 刚察县| 额尔古纳市| 潢川县| 广元市| 子洲县| 商南县| 文化| 沛县| 五常市| 汝城县| 获嘉县| 梅河口市| 龙岩市| 齐齐哈尔市| 平阴县| 婺源县| 友谊县| 卓资县| 陇西县| 红原县| 铜陵市| 高邮市| 洪洞县| 贵德县| 开鲁县| 福泉市| 广饶县| 盐边县| 普兰店市| 特克斯县| 江西省| 称多县| 阿拉善盟|