Я разработал приложение, которое содержит кнопку. При нажатии кнопки запускается веб-камера для захвата кадров с использованием OpenCV в бесконечном цикле. Программа освобождает экземпляр веб-камеры, когда пользователь нажимает «Q». Когда я закрываю приложение, приложение успешно закрывается, но экземпляр веб-камеры не освобождается и продолжает работать. Как сделать так, чтобы ресурсы веб-камеры высвобождались при закрытии приложения.
Webcam.py: -
import cv2
def hello():
camera = cv2.VideoCapture(0)
top, right, bottom, left = 10, 350, 225, 590
num_frames = 0
while True:
_, frame = camera.read()
clone = frame.copy()
roi = frame[top:bottom, right:left]
cv2.rectangle(clone, (left, top), (right, bottom), (0, 255, 0), 2)
num_frames += 1
cv2.imshow("Video Feed", clone)
keypress = cv2.waitKey(1) & 0xFF
if keypress == ord("q"):
break
camera.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
hello()
Application.py: -
from PyQt5 import QtCore, QtGui, QtWidgets
from Webcam import hello
import sys
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.window = MainWindow
self.window.setObjectName("self.window")
self.window.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(self.window)
self.centralwidget.setObjectName("centralwidget")
self.startButton = QtWidgets.QPushButton(self.centralwidget)
self.startButton.setText("&Start")
self.startButton.clicked.connect(self.open_cam)
self.window.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def open_cam(self):
hello()
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.setupUi(self)
def closeEvent(self, event):
result = QtWidgets.QMessageBox.question(self,
"Confirm Exit...",
"Are you sure you want to exit ?",
QtWidgets.QMessageBox.Yes| QtWidgets.QMessageBox.No)
event.ignore()
if result == QtWidgets.QMessageBox.Yes:
event.accept()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())