Я создал приложение на pyqt5, которое принимает ввод из поля со списком. я могу получить индекс выделенного текста в поле со списком. Я хочу использовать этот индекс, чтобы получить значение из другого списка и использовать это значение в opencv VideoCapture. Я пробовал это:
self.pushButton.clicked.connect(self.start_webcam)
self.pushButton_2.clicked.connect(self.stop_webcam)
self.face_Enabled=False
try:
df1 = pd.read_csv("names.csv")
area = df1["names"].to_list()
urls = df1["urls"].to_list()
self.comboBox.addItems(area)
except:
pass
def start_webcam(self):
try:
i = self.comboBox.currentIndex()
a = '"{}"'.format(urls[i-1])
self.capture=cv2.VideoCapture(a)
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
когда я печатаю i, я получаю индекс. но opencv, похоже, не получает ссылку. Как я могу это сделать?
Вот мой полный код:
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(1500, 617)
self.processedImgLabel = QtWidgets.QLabel(Dialog)
self.processedImgLabel.setGeometry(QtCore.QRect(50, 70, 1420, 520))
self.processedImgLabel.setFrameShape(QtWidgets.QFrame.Box)
self.processedImgLabel.setText("")
self.processedImgLabel.setObjectName("processedImgLabel")
self.widget = QtWidgets.QWidget(Dialog)
self.widget.setGeometry(QtCore.QRect(50, 10, 1291, 25))
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.startButton = QtWidgets.QPushButton(self.widget)
self.startButton.setObjectName("startButton")
self.horizontalLayout.addWidget(self.startButton)
self.stopButton = QtWidgets.QPushButton(self.widget)
self.stopButton.setObjectName("stopButton")
self.comboBox = QtWidgets.QComboBox(Dialog)
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.horizontalLayout.addWidget(self.stopButton)
self.horizontalLayout.addWidget(self.comboBox)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "App"))
self.startButton.setText(_translate("Dialog", "Start"))
self.stopButton.setText(_translate("Dialog", "Stop"))
self.comboBox.setItemText(0, _translate("Dialog", "Camera Name"))
class FaceDetection(QDialog, Ui_Dialog):
def __init__(self):
super(FaceDetection,self).__init__()
self.setupUi(self)
self.processedImage=None
self.startButton.clicked.connect(self.start_webcam)
self.stopButton.clicked.connect(self.stop_webcam)
self.face_Enabled=False
df1 = pd.read_csv("names.csv")
area = df1["names"].to_list()
urls = df1["urls"].to_list()
self.comboBox.addItems(area)
def start_webcam(self):
try:
i = self.comboBox.currentIndex()
a = '"{}"'.format(urls[i-1])
self.capture=cv2.VideoCapture(a)
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,480)
self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
except:
self.capture=cv2.VideoCapture(0)
self.timer=QTimer(self)
self.timer.timeout.connect(self.update_frame)
self.timer.start(5)
def update_frame(self):
ret,self.image=self.capture.read()
if not ret:
print("Nope")
self.image=cv2.flip(self.image,1)
detected_image=self.detect_face(self.image)
self.displayImage(detected_image,1)
def stop_webcam(self):
self.timer.stop()
def displayImage(self,img,window=1):
qformat=QImage.Format_Indexed8
if len(img.shape)==3:
if img.shape[2]==4:
qformat=QImage.Format_RGBA8888
else:
qformat=QImage.Format_RGB888
outImage=QImage(img,img.shape[1],img.shape[0],img.strides[0],qformat)
#BGR>>RGB
outImage=outImage.rgbSwapped()
if window==1:
self.processedImgLabel.setPixmap(QPixmap.fromImage(outImage))
self.processedImgLabel.setScaledContents(True)
if __name__=='__main__':
app=QApplication(sys.argv)
window=FaceDetection()
window.setWindowTitle('Title')
window.show()
sys.exit(app.exec_())
а вот имена.csv
names urls
garadge rtsp://username:password@IP:port/1