欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

pip?install?PyQt5

pip?install?python-opencv

若是沒有安裝相關(guān)的模塊,可以選擇上述pip的方式進(jìn)行安裝。

接下來我們將需要的python模塊導(dǎo)入到代碼塊中。

#?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)控工具相關(guān)的頁面組件及布局。

將控件按鈕等對應(yīng)的槽函數(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è)務(wù)類實現(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('相關(guān)路徑設(shè)置不能為空,請檢查設(shè)置!')
????????????????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('正在進(jìn)行視頻 監(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('程序運(yùn)行錯誤,請檢查參數(shù)是否設(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è)務(wù)子線程的邏輯就開發(fā)完成了,然后使用python模塊的main函數(shù)調(diào)用。

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

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

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

相關(guān)文章

  • python xlwt如何設(shè)置單元格的自定義背景顏色

    python xlwt如何設(shè)置單元格的自定義背景顏色

    這篇文章主要介紹了python xlwt如何設(shè)置單元格的自定義背景顏色,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • python詞云庫wordcloud自定義詞云制作步驟分享

    python詞云庫wordcloud自定義詞云制作步驟分享

    這篇文章主要介紹了python詞云庫wordcloud自定義詞云制作步驟分享,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 開啟Django博客的RSS功能的實現(xiàn)方法

    開啟Django博客的RSS功能的實現(xiàn)方法

    這篇文章主要介紹了開啟Django博客的RSS功能的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Django中反向生成models.py的實例講解

    Django中反向生成models.py的實例講解

    今天小編就為大家分享一篇Django中反向生成models.py的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python實現(xiàn)的破解字符串找茬游戲算法示例

    Python實現(xiàn)的破解字符串找茬游戲算法示例

    這篇文章主要介紹了Python實現(xiàn)的破解字符串找茬游戲算法,簡單分析了找茬游戲的原理,并結(jié)合具體實例形式分析了Python實現(xiàn)破解找茬游戲的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • python正則表達(dá)式中匹配次數(shù)與貪心問題詳解(+??*)

    python正則表達(dá)式中匹配次數(shù)與貪心問題詳解(+??*)

    正則表達(dá)式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,下面這篇文章主要給大家介紹了關(guān)于python正則表達(dá)式中匹配次數(shù)與貪心問題(+??*)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Python編程tkinter庫Canvas實現(xiàn)涂鴉顏色表及圍棋盤示例

    Python編程tkinter庫Canvas實現(xiàn)涂鴉顏色表及圍棋盤示例

    這篇文章主要為大家介紹了Python編程中如何使用tkinter庫Canvas來實現(xiàn)涂鴉,顏色表及圍棋盤的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 14 個Python小游戲 源碼分享

    14 個Python小游戲 源碼分享

    今天給大家?guī)?4個py小游戲如:吃金幣、打乒乓、滑雪、并夕夕版飛機(jī)大戰(zhàn)、打地鼠、小恐龍、消消樂、俄羅斯方塊、貪吃蛇、24點小游戲、平衡木、外星人入侵、貪心鳥、井字棋888‘’,文章都帶了源碼,感興趣的小伙伴感快收藏起來吧
    2021-09-09
  • Pandas讀取csv的實現(xiàn)

    Pandas讀取csv的實現(xiàn)

    本文主要介紹了Pandas讀取csv的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python覆蓋寫入,追加寫入的實例

    python覆蓋寫入,追加寫入的實例

    今天小編就為大家分享一篇python覆蓋寫入,追加寫入的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06

最新評論