怎么使用Python+PyQt5自制監(jiān)控小工具_(dá)第1頁(yè)
怎么使用Python+PyQt5自制監(jiān)控小工具_(dá)第2頁(yè)
怎么使用Python+PyQt5自制監(jiān)控小工具_(dá)第3頁(yè)
怎么使用Python+PyQt5自制監(jiān)控小工具_(dá)第4頁(yè)
怎么使用Python+PyQt5自制監(jiān)控小工具_(dá)第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第怎么使用Python+PyQt5自制監(jiān)控小工具利用opencv的圖像處理功能可以輕松對(duì)計(jì)算機(jī)攝像頭的調(diào)用實(shí)現(xiàn)實(shí)時(shí)圖像的采集效果。

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

pipinstallPyQt5

pipinstallpython-opencv

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

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

#Itsjustanaliasforthecv2module.

importcv2ascv_

#ItsimportingalltheclassesfromtheQtGuimodule.

fromPyQt5.QtGuiimport*

#ItsimportingalltheclassesfromtheQtCoremodule.

fromPyQt5.QtCoreimport*

#ItsimportingalltheclassesfromtheQtWidgetsmodule.

fromPyQt5.QtWidgetsimport*

#Itsimportingthesysmodule.

importsys

#Itsimportingtheosmodule.

importos

#Itsimportingthetimemodule.

importtime

#Itsimportingthetracebackmodule.

importtraceback

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

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

classCameraUI(QWidget):

def__init__(self):

super(CameraUI,self).__init__()

self.init_ui()

definit_ui(self):

self.setWindowTitle(本地監(jiān)控工具公眾號(hào):Python集中營(yíng))

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(日志處理過(guò)程區(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)

defshow_message(self,text):

cursor=self.brower.textCursor()

cursor.movePosition(QTextCursor.End)

self.brower.append(text)

self.brower.setTextCursor(cursor)

self.brower.ensureCursorVisible()

defimage_path_btn_clk(self):

dir=QFileDialog.getExistingDirectory(self,選擇文件夾,os.getcwd())

self.image_path.setText(dir)

defvideo_path_btn_clk(self):

dir=QFileDialog.getExistingDirectory(self,選擇文件夾,os.getcwd())

self.video_path.setText(dir)

defstart_listen_btn_clk(self):

self.listen_thread.start()

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

將該線程作為業(yè)務(wù)類實(shí)現(xiàn)調(diào)用本地?cái)z像頭完成監(jiān)控的效果。

classListenWorkThread(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

defrun(self):

try:

image_path=self.parent.image_path.text()

video_path=self.parent.video_path.text()

ifimage_path.strip()==orvideo_path.strip()==:

self.message.emit(相關(guān)路徑設(shè)置不能為空,請(qǐng)檢查設(shè)置!)

return

self.cap=cv_.VideoCapture(0)

self.cap.set(3,300)

self.cap.set(4,400)

ifself.cap.isOpened():

self.message.emit(攝像頭已成功打開!)

n=0

self.message.emit(正在進(jìn)行視頻監(jiān)控中....)

start_time=time.clock()

whileTrue:

ret,img=self.cap.read()

ifos.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)

exceptExceptionase:

traceback.print_exc()

self.message.emit(程序運(yùn)行錯(cuò)誤,請(qǐng)檢查參數(shù)是否設(shè)置正確!)

self.finished.emit(True)

defsave_image(self,image=None,file_name=None,image_path=None):

ifimageisnotNone:

cv_.imwrite(os.path.join(image_path,f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論