From 5408430646b3b96f5bc44a3543898703b9f2c202 Mon Sep 17 00:00:00 2001 From: VladislavOstapov Date: Tue, 22 Nov 2022 20:51:20 +0300 Subject: [PATCH] Initial commit --- lab2_1/lab2_1.py | 162 ++ lab2_2/Operate.txt | 21 + lab2_2/lab2_2.py | 271 +++ lab4/1.yml | 81 + lab4/lab4.py | 214 +++ lab4/sift_keypoints.jpg | Bin 0 -> 52669 bytes lab6_1/lab6_1.py | 87 + lab6_2/lab6_2.py | 96 + lab8/1.xml | 3654 +++++++++++++++++++++++++++++++++++++++ lab8/lab8.py | 18 + 10 files changed, 4604 insertions(+) create mode 100644 lab2_1/lab2_1.py create mode 100644 lab2_2/Operate.txt create mode 100644 lab2_2/lab2_2.py create mode 100644 lab4/1.yml create mode 100644 lab4/lab4.py create mode 100644 lab4/sift_keypoints.jpg create mode 100644 lab6_1/lab6_1.py create mode 100644 lab6_2/lab6_2.py create mode 100644 lab8/1.xml create mode 100644 lab8/lab8.py diff --git a/lab2_1/lab2_1.py b/lab2_1/lab2_1.py new file mode 100644 index 0000000..b3e7937 --- /dev/null +++ b/lab2_1/lab2_1.py @@ -0,0 +1,162 @@ +import os +import sys +import cv2 +import numpy as np +from matplotlib import pyplot as plt + + +def menu(): + print("Выберите пункт меню:\n1.Linear filter\n2.Blur\n3.Median blur\n4.GaussianBlur\n5.Erode") + print("6.Dilate\n7.MORPH_OPERATIONS\n8.Sobel\n9.Laplacian\n10.Canny\n11.CalcHist\n12.EqualizeHist") + print("13.Save\n14.Add Figure\n15.Del Figure\n16.Exit") + + +def main(): + image1 = cv2.imread("D:\\MACH\\LAB_2\\image0.jpg") + image2 = image1.copy() + im = image1.copy() + while True: + menu() + try: + s = int(input()) + if s == 1: + image2 = image1.copy() + kernel = np.array([[-0.1, 0.2, -0.1], [0.2, 3.0, 0.2], [-0.1, 0.2, -0.1]]) + image2 = cv2.filter2D(image2, -1, kernel) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 2: + image2 = image1.copy() + image2 = cv2.blur(image2, (5, 5)) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 3: + image2 = image1.copy() + image2 = cv2.medianBlur(image2, 5) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 4: + image2 = image1.copy() + image2 = cv2.GaussianBlur(image2, (9, 9), cv2.BORDER_DEFAULT) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 5: + image2 = image1.copy() + image2 = cv2.erode(image2, np.ones((11, 11))) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 6: + image2 = image1.copy() + image2 = cv2.dilate(image2, np.ones((11, 11))) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 7: + image2 = image1.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + cv2.imshow("Image_load", image1) + kernel = np.ones((6, 6), np.uint8) + image3 = cv2.morphologyEx(image3, cv2.MORPH_OPEN, kernel, iterations=1) + cv2.imshow("MORPH_OPEN", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_CLOSE, kernel, iterations=1) + cv2.imshow("MORPH_CLOSE", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_GRADIENT, kernel, iterations=1) + cv2.imshow("MORPH_GRADIENT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_TOPHAT, kernel, iterations=1) + cv2.imshow("MORPH_TOPHAT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.morphologyEx(image3, cv2.MORPH_BLACKHAT, kernel, iterations=1) + cv2.imshow("MORPH_BLACKHAT", image3) + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + cv2.waitKey(0) + if s == 8: + image2 = image1.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) + image3 = cv2.GaussianBlur(image3, (3, 3), 0) + im3 = cv2.Sobel(image3, cv2.CV_64F, 1, 0, ksize=5) + im4 = cv2.Sobel(image3, cv2.CV_64F, 0, 1, ksize=5) + im5 = cv2.Sobel(image3, cv2.CV_8UC1, 0, 1, ksize=5) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image_X", im3) # x + cv2.imshow("Result_Image_Y", im4) # y + cv2.imshow("Result_Gradient", im5) # gradient + cv2.waitKey(0) + if s == 9: + image2 = image1.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) + image3 = cv2.GaussianBlur(image3, (3, 3), 0) + im3 = cv2.Laplacian(image3, cv2.CV_64F) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", im3) # x + cv2.waitKey(0) + if s == 10: + image2 = image1.copy() + image3 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) + image3 = cv2.blur(image2, (5, 5)) + image3 = cv2.Canny(image3, 100, 100) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image3) # x + cv2.waitKey(0) + if s == 11: + image2 = image1.copy() + color = ('b', 'g', 'r') + cv2.imshow("Image_load", image1) + for i, col in enumerate(color): + histr = cv2.calcHist([image2], [i], None, [256], [0, 256]) + plt.plot(histr, color=col) + plt.xlim([0, 256]) + plt.show() + plt.close() + cv2.waitKey(0) + if s == 12: + image2 = image1.copy() + image2 = cv2.cvtColor(image2, cv2.COLOR_RGB2GRAY) + image2 = cv2.equalizeHist(image2) + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.waitKey(0) + if s == 13: + cv2.imshow("Image_load", image1) + cv2.imshow("Result_Image", image2) + cv2.imwrite("D:\\im1.jpg", image1) + cv2.imwrite("D:\\im2.jpg", image2) + cv2.waitKey(0) + if s == 14: + image2 = image1.copy() + cv2.imshow("Image_load", image1) + image2 = cv2.line(image2, (15, 15), (270, 270), (76, 187, 23), 10) # линия + image2 = cv2.rectangle(image2, (20, 20), (100, 100), (0, 0, 255), 10) # нарисуем четырехугольник + image2 = cv2.circle(image2, (100, 100), 40, (0, 255, 0), 10) # нарисуем круг + cv2.imshow("Result_Image", image2) + image1 = image2 + cv2.waitKey(0) + if s == 15: + cv2.imwrite("1.jpg", im) + cv2.imwrite("2.jpg", image1) + img = cv2.imread("1.jpg") + mask = cv2.imread("2.jpg", 0) + res = cv2.bitwise_and(img, img, mask=mask) + image2 = res.copy() + image1 = res.copy() + cv2.imshow("Result_Image", res) + + cv2.waitKey(0) + os.remove("1.jpg") + os.remove("2.jpg") + if s == 16: + cv2.destroyAllWindows() + sys.exit(0) + except ValueError: + print("Неверный пункт меню!!!! Выберите другое!") + + +if __name__ == "__main__": + main() diff --git a/lab2_2/Operate.txt b/lab2_2/Operate.txt new file mode 100644 index 0000000..7dfcb1c --- /dev/null +++ b/lab2_2/Operate.txt @@ -0,0 +1,21 @@ +1.Image +2.Linear filter +3.Blur +4.Median blur +5.GaussianBlur +6.Erode +7.Dilate +8.1.MORPH_MORPH_OPEN +8.2.MORPH_MORPH_CLOSE +8.3.MORPH_MORPH_GRADIENT +8.4.MORPH_MORPH_TOPHAT +8.5.MORPH_MORPH_BLACKHAT +9.Sobel_X +10.Sobel_Y +11.Sobel_Gradient +12.Laplacian +13.Canny +14.CalcHist +15.EqualizeHist +16.Add Figure +17.Del Figure diff --git a/lab2_2/lab2_2.py b/lab2_2/lab2_2.py new file mode 100644 index 0000000..4326d71 --- /dev/null +++ b/lab2_2/lab2_2.py @@ -0,0 +1,271 @@ +import sys +import cv2 +import numpy +from PyQt5.QtGui import QImage, QPixmap +from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QFileDialog,QComboBox,QMessageBox +from PyQt5.QtCore import Qt +from matplotlib import pyplot as plt +class Example(QWidget): + def __init__(self): + super().__init__() + self.image = None + self.label = QLabel() + self.initUI() + + def initUI(self): + self.label.setText('OpenCV Image') + self.label.setAlignment(Qt.AlignCenter) + + btn_open = QPushButton('Открыть изображение') + btn_open.clicked.connect(self.openImage) + + btn_procesar = QPushButton('Сохранить изображение') + btn_procesar.clicked.connect(self.saveImage) + + + f=open("Operate.txt","r") + attr=f.read().splitlines() + f.close() + self.oper=QComboBox() + self.oper.addItems(attr) + self.oper.currentIndexChanged.connect(self.combobox) + + top_bar = QHBoxLayout() + top_bar.addWidget(btn_open) + top_bar.addWidget(btn_procesar) + top_bar.addWidget(self.oper) + + root = QVBoxLayout(self) + root.addLayout(top_bar) + root.addWidget(self.label) + self.resize(540, 574) + self.setWindowTitle('ST_2_2') + self.show() + + def openImage(self): + self.filename, _ = QFileDialog.getOpenFileName(None, 'Buscar Imagen', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') + if self.filename: + with open(self.filename, "rb") as file: + data = numpy.array(bytearray(file.read())) + self.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) + self.mostrarImagen(self.image) + self.image2=self.image + + + + + def saveImage(self): + filename = QFileDialog.getSaveFileName(self,"QFileDialog.getSaveFileName()","","Image Files (*.jpg)") + img=self.image2 + cv2.imwrite(filename[0],img) + + + + def mostrarImagen(self,s): + size = s.shape + step = s.size / size[0] + qformat = QImage.Format_Indexed8 + if len(size) == 3: + if size[2] == 4: + qformat = QImage.Format_RGBA8888 + else: + qformat = QImage.Format_RGB888 + img = QImage(s, size[1], size[0], step, qformat) + img = img.rgbSwapped() + self.label.setPixmap(QPixmap.fromImage(img)) + self.resize(self.label.pixmap().size()) + + + def combobox(self, index): + if index==0: + self.i0() + if index==1: + self.i1() + if index==2: + self.i2() + if index==3: + self.i3() + if index==4: + self.i4() + if index==5: + self.i5() + if index==6: + self.i6() + if index==7: + self.i7() + if index==8: + self.i8() + if index==9: + self.i9() + if index==10: + self.i10() + if index==11: + self.i11() + if index==12: + self.i12() + if index==13: + self.i13() + if index==14: + self.i14() + if index==15: + self.i15() + if index==16: + self.i16() + if index==17: + self.i17() + if index==18: + self.i18() + if index==19: + self.i19() + if index==20: + self.i20() + + + def i0(self): + self.image2=self.image + self.mostrarImagen(self.image) + + def i1(self): + self.image2=self.image + kernel = numpy.array([[-0.1,0.2,-0.1],[0.2,3.0,0.2],[-0.1,0.2,-0.1]]) + self.image2=cv2.filter2D(self.image2,-1,kernel) + self.mostrarImagen(self.image2) + + + def i2(self): + self.image2=self.image + self.image2 = cv2.blur(self.image2,(5,5)) + self.mostrarImagen(self.image2) + + + def i3(self): + self.image2=self.image + self.image2 = cv2.medianBlur(self.image2,5) + self.mostrarImagen(self.image2) + + def i4(self): + self.image2=self.image + self.image2 = cv2.GaussianBlur(self.image2, (9,9),cv2.BORDER_DEFAULT) + self.mostrarImagen(self.image2) + + def i5(self): + self.image2=self.image + self.image2 = cv2.erode(self.image2, numpy.ones((11, 11))) + self.mostrarImagen(self.image2) + + def i6(self): + self.image2=self.image + self.image2 = cv2.dilate(self.image2, numpy.ones((11, 11))) + self.mostrarImagen(self.image2) + + def i7(self): + self.image2=self.image + kernel = numpy.ones((6,6),numpy.uint8) + self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_OPEN, kernel,iterations = 1) + self.mostrarImagen(self.image2) + + def i8(self): + self.image2=self.image + kernel = numpy.ones((6,6),numpy.uint8) + self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_CLOSE, kernel,iterations = 1) + self.mostrarImagen(self.image2) + + def i9(self): + self.image2=self.image + kernel = numpy.ones((6,6),numpy.uint8) + self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_GRADIENT, kernel,iterations = 1) + self.mostrarImagen(self.image2) + + def i10(self): + self.image2=self.image + kernel = numpy.ones((6,6),numpy.uint8) + self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_TOPHAT, kernel,iterations = 1) + self.mostrarImagen(self.image2) + + def i11(self): + self.image2=self.image + kernel = numpy.ones((6,6),numpy.uint8) + self.image2=cv2.morphologyEx(self.image2, cv2.MORPH_BLACKHAT, kernel,iterations = 1) + self.mostrarImagen(self.image2) + + + def i12(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) + self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) + self.image2 = cv2.Sobel(self.image2,cv2.CV_64F,1,0,ksize=5) + self.mostrarImagen(self.image2) + + def i13(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) + self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) + self.image2 = cv2.Sobel(self.image2,cv2.CV_64F,0,1,ksize=5) + self.mostrarImagen(self.image2) + + def i14(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_BGR2GRAY) + self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) + self.image2 = cv2.Sobel(self.image2,cv2.CV_8UC1,0,1,ksize=5) + self.mostrarImagen(self.image2) + + def i15(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) + self.image2 = cv2.GaussianBlur(self.image2,(3,3),0) + self.image2 = cv2.Laplacian(self.image2,cv2.CV_64F) + self.mostrarImagen(self.image2) + + def i16(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) + self.image2 = cv2.blur(self.image2,(5,5)) + self.image2 = cv2.Canny(self.image2, 100, 100) + self.mostrarImagen(self.image2) + + def i17(self): + self.image2=self.image + color = ('b','g','r') + for i,col in enumerate(color): + histr = cv2.calcHist([self.image2],[i],None,[256],[0,256]) + plt.plot(histr,color = col) + plt.xlim([0,256]) + plt.show() + + + def i18(self): + self.image2=self.image + self.image2 = cv2.cvtColor(self.image2,cv2.COLOR_RGB2GRAY) + self.image2 = cv2.equalizeHist(self.image2) + self.mostrarImagen(self.image2) + + def i19(self): + + self.image2=self.image + self.image2 = cv2.line(self.image2,(15,15),(270,270),(76,187,23),10)#линия + self.image2 = cv2.rectangle(self.image2,(20,20),(100,100),(0,0,255),10)#нарисуем четырехугольник + self.image2 = cv2.circle(self.image2,(100,100),40,(0,255,0),10)#нарисуем круг + self.image=self.image2 + self.mostrarImagen(self.image2) + + def i20(self): + if self.filename: + with open(self.filename, "rb") as file: + data = numpy.array(bytearray(file.read())) + self.image = cv2.imdecode(data, cv2.IMREAD_UNCHANGED) + self.mostrarImagen(self.image) + self.mostrarImagen(self.image) + self.image2=self.image + + def closeEvent(self, event): + close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) + if close == QMessageBox.Yes: + event.accept() + else: + event.ignore() + +if __name__ == '__main__': + app = QApplication(sys.argv) + win = Example() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/lab4/1.yml b/lab4/1.yml new file mode 100644 index 0000000..c864de8 --- /dev/null +++ b/lab4/1.yml @@ -0,0 +1,81 @@ +%YAML:1.0 +--- +opencv_ml_svm: + format: 3 + svmType: C_SVC + kernel: + type: RBF + gamma: 1. + C: 1. + term_criteria: { epsilon:1.1920928955078125e-07, iterations:1000 } + var_count: 1 + class_count: 2 + class_labels: !!opencv-matrix + rows: 2 + cols: 1 + dt: i + data: [ -1, 1 ] + sv_total: 50 + support_vectors: + - [ 0. ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 0. ] + - [ 2.80259693e-45 ] + - [ 0. ] + - [ 2.80259693e-45 ] + - [ 2.80259693e-45 ] + - [ 2.80259693e-45 ] + - [ 2.80259693e-45 ] + - [ 4.20389539e-45 ] + - [ 2.80259693e-45 ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 2.80259693e-45 ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 2.80259693e-45 ] + - [ 2.80259693e-45 ] + - [ 1.40129846e-45 ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 0. ] + - [ 2.80259693e-45 ] + - [ 0. ] + - [ 1.40129846e-45 ] + - [ 2.80259693e-45 ] + - [ 1.40129846e-45 ] + - [ 0. ] + decision_functions: + - + sv_count: 50 + rho: 0. + alpha: [ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., + 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., + -1., -1., -1., -1., -1., -1., -1., -1., -1., -1. ] + index: [ 12, 15, 2, 16, 4, 5, 21, 24, 8, 31, 10, 11, 23, 13, 14, + 29, 30, 32, 33, 40, 42, 44, 46, 47, 48, 19, 26, 27, 28, 1, + 3, 25, 0, 7, 34, 35, 36, 37, 38, 39, 9, 41, 6, 43, 17, 45, + 18, 20, 22, 49 ] diff --git a/lab4/lab4.py b/lab4/lab4.py new file mode 100644 index 0000000..4131c40 --- /dev/null +++ b/lab4/lab4.py @@ -0,0 +1,214 @@ +#import numpy as np +#import cv2 +#img = cv2.imread("D:\MACH\LAB_4\crocodile\image_0001.jpg") +#gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) +#sift = cv2.SIFT_create() +#kp = sift.detect(gray,None) +#img=cv2.drawKeypoints(gray,kp,img) +#cv2.imshow("R",img) +#cv2.waitKey(0) +#cv2.destroyAllWindows() +import sys +import cv2 +import numpy as np +import random +import math +from sklearn.ensemble import RandomForestClassifier +from sklearn.metrics import accuracy_score +from PyQt5.QtGui import QImage, QPixmap +from PyQt5.QtWidgets import (QWidget, QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, + QFileDialog,QComboBox,QMessageBox,QTextBrowser) +from PyQt5.QtCore import Qt +class Example(QWidget): + def __init__(self): + super().__init__() + self.image = None + self.textbrowser = QTextBrowser() + self.initUI() + + def initUI(self): + + self.btn_open = QPushButton('Изображения folder1') + self.btn_open.clicked.connect(self.openImages1) + + self.btn_open1 = QPushButton('Изображения folder2') + self.btn_open1.clicked.connect(self.openImages2) + + + self.btn_ = QPushButton('Обучить и создать матрицы') + self.btn_.clicked.connect(self.matrix_and_train) + + + self.btn1 = QPushButton('Детектировать тестовые изображения') + self.btn1.clicked.connect(self.detect_image) + + self.btn2 = QPushButton('Сформировать лес и натренировать полученную модель') + self.btn2.clicked.connect(self.form_les_and_train) + + self.btn_.setVisible(False) + self.btn1.setVisible(False) + self.btn2.setVisible(False) + + + top_bar = QHBoxLayout() + top_bar.addWidget(self.btn_open) + top_bar.addWidget(self.btn_open1) + top_bar.addWidget(self.btn_) + top_bar.addWidget(self.btn1) + top_bar.addWidget(self.btn2) + root = QVBoxLayout(self) + root.addLayout(top_bar) + root.addWidget(self.textbrowser) + + self.spisok=list() + self.spisok2=list() + self.spisok3=list() + + + self.train=list() + self.matrix=list() + self.resize(540, 574) + self.setWindowTitle('ST_4') + self.show() + + def openImages1(self): + filenames1 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') + lk=filenames1[0] + self.erroropened(lk,"1") + self.mass(lk,1) + lk.clear() + + + def openImages2(self): + filenames2 = QFileDialog.getOpenFileNames(None, 'Открыть изображения', '.', 'Image Files (*.png *.jpg *.jpeg *.bmp)') + lk=filenames2[0] + self.erroropened(lk,"2") + self.mass(lk,2) + lk.clear() + + def erroropened(self,s,s1): + if len(s)!=0: + q=QMessageBox.information(self,"Информация","Изображения из "+s1+" папки получены!") + else: + q=QMessageBox.information(self,"Информация","Вы не выбрали изображения!") + + + def mass(self,p,s1): + if s1==1: + self.spisok3.clear() + for v in range(len(p)): + self.spisok.append(str(p[v])) + self.spisok3.append(str(p[v])+"SKT") + self.appendos("Тестовый набор картинок",self.spisok) + if s1==2: + for v in range(len(p)): + self.spisok2.append(str(p[v])) + self.spisok3.append(str(p[v])+"NO") + self.spisok3=list(set(self.spisok3)) + self.appendos("Набор картинок для тренировки",self.spisok2) + self.btn_open.setVisible(False) + self.btn_open1.setVisible(False) + self.btn_.setVisible(True) + q=QMessageBox.information(self,"Информация","Количество изображений тестовой категории: "+str(len(self.spisok))+"\nКоличество изображений основной категории: "+str(len(self.spisok2))+"\nОбщее количество изображений: "+str(int(len(self.spisok)+int(len(self.spisok2))))) + + def matrix_and_train(self): + for v in range(len(self.spisok3)): + s=str(self.spisok3[v]) + if s.endswith("SKT"): + self.train.append(round(float(0.5),1)) + self.matrix.append(round(float(1.0),1)) + if s.endswith("NO"): + q=round(float(random.uniform(1.0,3.0)),1) + self.train.append(q) + self.matrix.append(round(float(-1.0),1)) + + self.appendos("Ваши тренировочные данные",self.train) + self.appendos("Ваша матрица",self.matrix) + train=np.array([self.train],dtype=int) + labels = np.array(self.matrix,dtype=int) + self.svm = cv2.ml.SVM_create() + self.svm.train(train, cv2.ml.COL_SAMPLE, labels) + self.svm.save("1.yml") + self.textbrowser.append("Модель сохранена!") + close = QMessageBox.question(self,"Поздравляем!","Ваша модель натренирована!",QMessageBox.Yes | QMessageBox.No) + if close == QMessageBox.Yes: + pass + self.btn_.setVisible(False) + self.btn1.setVisible(True) + + def appendos(self,s1,s2): + self.textbrowser.append(s1) + for v in range(len(s2)): + self.textbrowser.append(str(s2[v])) + + def detect_image(self): + self.model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') + self.spisok3.clear() + for v in range(len(self.spisok)): + lkst=list() + img = cv2.imread(str(self.spisok[v])) + gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) + sift = cv2.SIFT_create() + kp = sift.detect(gray,None) + for keyPoint in kp: + #self.spisok3.append(keyPoint.pt[0]) + #self.spisok3.append(keyPoint.pt[1]) + #print(keyPoint.pt[0]) + #print(keyPoint.pt[1]) + lkst.append(keyPoint.pt[0]) + lkst.append(keyPoint.pt[1]) + + #self.spisok3.append(lkst) + train=np.array([lkst],dtype=int) + labels = np.array([lkst],dtype=int) + self.model.fit(train, labels) + self.textbrowser.append("Модель натренирована на рисунке "+str(v)) + #print(len(self.spisok3)) + self.textbrowser.append("Выявлены контурные точки на тестовых изображениях!") + + #s = keyPoint.size + #print(x,y,s) + self.btn1.setVisible(False) + self.btn2.setVisible(True) + + def form_les_and_train(self): + + #print(self.spisok3) + for v in range(len(self.spisok2)): + lk=list() + img = cv2.imread(str(self.spisok2[v])) + gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) + sift = cv2.SIFT_create() + kp = sift.detect(gray,None) + for keyPoint in kp: + #self.spisok3.append(keyPoint.pt[0]) + #self.spisok3.append(keyPoint.pt[1]) + #print(keyPoint.pt[0]) + #print(keyPoint.pt[1]) + lkst.append(keyPoint.pt[0]) + lkst.append(keyPoint.pt[1]) + train =np.array([lkst],dtype=int) + self.model.predict(train) + #self.model. + print("RED") + #train = np.array([self.spisok3],dtype=int) + #labels = np.array([self.spisok3],dtype=int) + #model = RandomForestClassifier(n_estimators=100,bootstrap = True,max_features = 'sqrt') + #model.fit(train, labels) + #tree = DecisionTreeClassifier() + #tree.fit(self.spisok3, self.spisok3) + #accuracy = accuracy_score(len(self.spisok3), len(self.spisok3)) + #print('Model Accuracy:',accuracy) + + + def closeEvent(self, event): + close = QMessageBox.question(self,"Выход","Вы хотите завершить работу?",QMessageBox.Yes | QMessageBox.No) + if close == QMessageBox.Yes: + event.accept() + else: + event.ignore() + +if __name__ == '__main__': + app = QApplication(sys.argv) + win = Example() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/lab4/sift_keypoints.jpg b/lab4/sift_keypoints.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d852d0e38893a63ca1c32501b4ed4440f910f541 GIT binary patch literal 52669 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 + + + + + 20 20 + + <_> + + + <_> + + <_> + + + + <_> + 6 12 8 8 -1. + <_> + 6 16 8 4 2. + 0 + 0.0452074706554413 + -0.7191650867462158 + 0.7359663248062134 + <_> + + <_> + + + + <_> + 1 12 18 1 -1. + <_> + 7 12 6 1 3. + 0 + -0.0161712504923344 + 0.5866637229919434 + -0.5909150242805481 + <_> + + <_> + + + + <_> + 7 18 5 2 -1. + <_> + 7 19 5 1 2. + 0 + 0.0119725503027439 + -0.3645753860473633 + 0.8175076246261597 + <_> + + <_> + + + + <_> + 5 12 11 4 -1. + <_> + 5 14 11 2 2. + 0 + 0.0554178208112717 + -0.5766019225120544 + 0.8059020042419434 + -1.0691740512847900 + -1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 12 18 2 -1. + <_> + 7 12 6 2 3. + 0 + -0.0243058893829584 + 0.5642552971839905 + -0.7375097870826721 + <_> + + <_> + + + + <_> + 3 1 14 6 -1. + <_> + 3 3 14 2 3. + 0 + -0.0302439108490944 + 0.5537161827087402 + -0.5089462995529175 + <_> + + <_> + + + + <_> + 4 8 12 9 -1. + <_> + 4 11 12 3 3. + 0 + -0.1937028020620346 + 0.7614368200302124 + -0.3485977053642273 + <_> + + <_> + + + + <_> + 8 18 12 2 -1. + <_> + 14 18 6 1 2. + <_> + 8 19 6 1 2. + 0 + 0.0120156398043036 + -0.4035871028900146 + 0.6296288967132568 + <_> + + <_> + + + + <_> + 0 12 6 6 -1. + <_> + 2 12 2 6 3. + 0 + 2.9895049519836903e-03 + -0.4086846113204956 + 0.4285241067409515 + <_> + + <_> + + + + <_> + 6 11 9 8 -1. + <_> + 6 15 9 4 2. + 0 + 0.1299877017736435 + -0.2570166885852814 + 0.5929297208786011 + <_> + + <_> + + + + <_> + 1 6 10 2 -1. + <_> + 1 6 5 1 2. + <_> + 6 7 5 1 2. + 0 + -6.0164160095155239e-03 + 0.5601549744606018 + -0.2849527895450592 + -1.0788700580596924 + 0 + -1 + <_> + + + <_> + + <_> + + + + <_> + 3 2 14 12 -1. + <_> + 3 6 14 4 3. + 0 + 0.0943963602185249 + -0.5406976938247681 + 0.5407304763793945 + <_> + + <_> + + + + <_> + 1 11 18 9 -1. + <_> + 7 11 6 9 3. + 0 + -0.0279577299952507 + 0.3281945884227753 + -0.7144141197204590 + <_> + + <_> + + + + <_> + 5 12 10 4 -1. + <_> + 5 14 10 2 2. + 0 + 0.0635356530547142 + -0.3744345009326935 + 0.5956786870956421 + <_> + + <_> + + + + <_> + 6 18 9 2 -1. + <_> + 6 19 9 1 2. + 0 + 0.0211040005087852 + -0.4845815896987915 + 0.7378302812576294 + <_> + + <_> + + + + <_> + 9 12 2 8 -1. + <_> + 9 16 2 4 2. + 0 + 2.6957250665873289e-03 + -0.8702409863471985 + 0.2475769072771072 + <_> + + <_> + + + + <_> + 15 3 3 16 -1. + <_> + 15 11 3 8 2. + 0 + 0.0110464803874493 + -0.5981134176254272 + 0.1849218010902405 + <_> + + <_> + + + + <_> + 7 9 1 6 -1. + <_> + 7 11 1 2 3. + 0 + -1.3549139839597046e-04 + 0.3266639113426208 + -0.8332661986351013 + <_> + + <_> + + + + <_> + 6 0 8 6 -1. + <_> + 6 3 8 3 2. + 0 + -0.0495516993105412 + 0.7439032196998596 + -0.4024896025657654 + <_> + + <_> + + + + <_> + 1 13 6 1 -1. + <_> + 4 13 3 1 2. + 0 + -1.9892829004675150e-03 + 0.5047793984413147 + -0.5123764276504517 + <_> + + <_> + + + + <_> + 10 10 6 1 -1. + <_> + 12 10 2 1 3. + 0 + -5.7016697246581316e-04 + 0.2391823977231979 + -0.2104973942041397 + <_> + + <_> + + + + <_> + 4 10 6 1 -1. + <_> + 6 10 2 1 3. + 0 + 5.4985969327390194e-03 + -0.3141318857669830 + 0.7439212799072266 + <_> + + <_> + + + + <_> + 6 6 8 3 -1. + <_> + 6 7 8 1 3. + 0 + -7.7209789305925369e-03 + 0.6021335721015930 + -0.3841854035854340 + -1.5200910568237305 + 1 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 12 14 1 -1. + <_> + 8 12 7 1 2. + 0 + -1.1992900399491191e-03 + 0.2906270921230316 + -0.7548354268074036 + <_> + + <_> + + + + <_> + 5 2 15 12 -1. + <_> + 5 6 15 4 3. + 0 + 0.0943495184183121 + -0.4595882892608643 + 0.3241611123085022 + <_> + + <_> + + + + <_> + 7 18 6 2 -1. + <_> + 7 19 6 1 2. + 0 + 0.0227251593023539 + -0.2826507091522217 + 0.7242512702941895 + <_> + + <_> + + + + <_> + 5 12 10 4 -1. + <_> + 5 14 10 2 2. + 0 + 0.0585403405129910 + -0.5193219780921936 + 0.6013407111167908 + <_> + + <_> + + + + <_> + 2 19 4 1 -1. + <_> + 4 19 2 1 2. + 0 + 2.8358890631352551e-05 + -0.6561384201049805 + 0.3897354006767273 + <_> + + <_> + + + + <_> + 10 12 10 8 -1. + <_> + 10 16 10 4 2. + 0 + 3.9341559750027955e-04 + -0.8008638024330139 + 0.2018187046051025 + <_> + + <_> + + + + <_> + 1 13 6 6 -1. + <_> + 4 13 3 6 2. + 0 + -5.8259762590751052e-04 + 0.2970958054065704 + -0.8628513216972351 + <_> + + <_> + + + + <_> + 9 18 6 2 -1. + <_> + 12 18 3 1 2. + <_> + 9 19 3 1 2. + 0 + 2.7955149562330917e-05 + -0.4508801102638245 + 0.1758446991443634 + <_> + + <_> + + + + <_> + 1 10 9 10 -1. + <_> + 1 15 9 5 2. + 0 + 1.2162160128355026e-03 + -0.8695623278617859 + 0.2619656026363373 + <_> + + <_> + + + + <_> + 1 2 18 5 -1. + <_> + 7 2 6 5 3. + 0 + 0.0133769698441029 + -0.6464508175849915 + 0.3887208998203278 + <_> + + <_> + + + + <_> + 1 12 18 4 -1. + <_> + 7 12 6 4 3. + 0 + -0.0113867800682783 + 0.2826564013957977 + -0.8351002931594849 + <_> + + <_> + + + + <_> + 9 11 6 3 -1. + <_> + 9 11 3 3 2. + 0 + 2.6949660386890173e-03 + -0.5282859802246094 + 0.6657627820968628 + <_> + + <_> + + + + <_> + 5 10 3 2 -1. + <_> + 6 10 1 2 3. + 0 + 2.8329479391686618e-05 + -0.6864507794380188 + 0.5240061283111572 + <_> + + <_> + + + + <_> + 8 12 9 8 -1. + <_> + 8 16 9 4 2. + 0 + 1.4069270109757781e-03 + -0.8969905972480774 + 0.2389785945415497 + <_> + + <_> + + + + <_> + 6 1 3 2 -1. + <_> + 6 2 3 1 2. + 0 + -2.9115570214344189e-05 + 0.4608972072601318 + -0.8574141860008240 + <_> + + <_> + + + + <_> + 2 12 18 6 -1. + <_> + 2 14 18 2 3. + 0 + 4.5082978904247284e-03 + -0.7511271238327026 + 0.4849173128604889 + <_> + + <_> + + + + <_> + 0 11 18 1 -1. + <_> + 6 11 6 1 3. + 0 + -0.0198406204581261 + 0.6246759295463562 + -0.7629678845405579 + <_> + + <_> + + + + <_> + 9 5 6 3 -1. + <_> + 9 6 6 1 3. + 0 + 3.8021910004317760e-03 + -0.4809493124485016 + 0.6243296861648560 + <_> + + <_> + + + + <_> + 3 11 4 6 -1. + <_> + 3 14 4 3 2. + 0 + 1.1158349661855027e-04 + -0.8559886217117310 + 0.3861764967441559 + <_> + + <_> + + + + <_> + 12 18 2 2 -1. + <_> + 13 18 1 1 2. + <_> + 12 19 1 1 2. + 0 + 2.7662550564855337e-05 + -0.7629433274269104 + 0.3604950010776520 + <_> + + <_> + + + + <_> + 3 12 9 8 -1. + <_> + 3 16 9 4 2. + 0 + 2.7047859039157629e-03 + -0.9496951103210449 + 0.3921845853328705 + <_> + + <_> + + + + <_> + 6 12 9 2 -1. + <_> + 9 12 3 2 3. + 0 + 5.1935878582298756e-04 + -0.8682754039764404 + 0.4790566861629486 + <_> + + <_> + + + + <_> + 2 12 12 8 -1. + <_> + 2 12 6 4 2. + <_> + 8 16 6 4 2. + 0 + 1.0928940173471346e-04 + -0.9670708775520325 + 0.6848754286766052 + <_> + + <_> + + + + <_> + 1 6 19 3 -1. + <_> + 1 7 19 1 3. + 0 + 5.7576759718358517e-03 + -0.9778658747673035 + 0.8792119026184082 + <_> + + <_> + + + + <_> + 0 0 8 2 -1. + <_> + 0 0 4 1 2. + <_> + 4 1 4 1 2. + 0 + -4.2572239181026816e-05 + 1. + -1. + <_> + + <_> + + + + <_> + 12 0 8 2 -1. + <_> + 16 0 4 1 2. + <_> + 12 1 4 1 2. + 0 + 3.4698568924795836e-05 + -0.8942371010780334 + 0.6385173201560974 + <_> + + <_> + + + + <_> + 1 0 13 15 -1. + <_> + 1 5 13 5 3. + 0 + 6.0833231545984745e-03 + -0.9911761283874512 + 0.8617964982986450 + <_> + + <_> + + + + <_> + 17 18 1 2 -1. + <_> + 17 19 1 1 2. + 0 + 1.5569420065730810e-04 + -1. + 0.9989972114562988 + <_> + + <_> + + + + <_> + 0 0 4 3 -1. + <_> + 2 0 2 3 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 9 19 4 1 -1. + <_> + 9 19 2 1 2. + 0 + 5.8437039115233347e-05 + -0.9401987791061401 + 0.9499294161796570 + <_> + + <_> + + + + <_> + 3 13 14 4 -1. + <_> + 3 15 14 2 2. + 0 + 8.5243082139641047e-04 + -1. + 1.0000870227813721 + <_> + + <_> + + + + <_> + 17 0 3 4 -1. + <_> + 17 2 3 2 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 7 1 2 3 -1. + <_> + 7 2 2 1 3. + 0 + 8.8114888058044016e-05 + -1. + 1.0001029968261719 + <_> + + <_> + + + + <_> + 17 0 3 4 -1. + <_> + 17 2 3 2 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 1 12 18 2 -1. + <_> + 7 12 6 2 3. + 0 + -1.6535379691049457e-03 + 0.9649471044540405 + -0.9946994185447693 + <_> + + <_> + + + + <_> + 16 3 2 4 -1. + <_> + 17 3 1 2 2. + <_> + 16 5 1 2 2. + 0 + 2.2355250257533044e-04 + -0.8841317892074585 + 0.5885220170021057 + <_> + + <_> + + + + <_> + 3 13 10 2 -1. + <_> + 3 13 5 1 2. + <_> + 8 14 5 1 2. + 0 + -2.0420220680534840e-03 + 0.8850557208061218 + -0.9887136220932007 + <_> + + <_> + + + + <_> + 11 13 6 2 -1. + <_> + 11 13 3 2 2. + 0 + -2.7822980191558599e-03 + 0.8021606206893921 + -0.8011325001716614 + <_> + + <_> + + + + <_> + 6 4 6 12 -1. + <_> + 9 4 3 12 2. + 0 + 2.6262819301337004e-03 + -0.8629643917083740 + 0.9028394818305969 + <_> + + <_> + + + + <_> + 14 5 2 14 -1. + <_> + 15 5 1 7 2. + <_> + 14 12 1 7 2. + 0 + -5.8437039115233347e-05 + 0.5506380796432495 + -0.8834760189056396 + <_> + + <_> + + + + <_> + 3 2 12 10 -1. + <_> + 9 2 6 10 2. + 0 + -1.1351429857313633e-03 + 0.9118285179138184 + -0.8601468205451965 + <_> + + <_> + + + + <_> + 16 11 4 4 -1. + <_> + 16 13 4 2 2. + 0 + 6.5544509561732411e-04 + -0.5529929995536804 + 0.6181765794754028 + <_> + + <_> + + + + <_> + 5 19 10 1 -1. + <_> + 10 19 5 1 2. + 0 + 3.8200760172912851e-05 + -0.8676869273185730 + 0.7274010777473450 + <_> + + <_> + + + + <_> + 15 2 1 18 -1. + <_> + 15 11 1 9 2. + 0 + -6.2933329900261015e-05 + 0.3377492129802704 + -0.8335667848587036 + <_> + + <_> + + + + <_> + 1 4 5 16 -1. + <_> + 1 12 5 8 2. + 0 + 2.8638119692914188e-04 + -0.8729416131973267 + 0.7917960286140442 + <_> + + <_> + + + + <_> + 7 6 12 6 -1. + <_> + 7 8 12 2 3. + 0 + 3.6316178739070892e-04 + -0.9013931751251221 + 0.7772005200386047 + <_> + + <_> + + + + <_> + 2 11 12 6 -1. + <_> + 2 11 6 3 2. + <_> + 8 14 6 3 2. + 0 + 1.2007999466732144e-03 + -0.9860498905181885 + 0.8049355149269104 + <_> + + <_> + + + + <_> + 6 0 14 18 -1. + <_> + 6 6 14 6 3. + 0 + -2.3152970243245363e-03 + 1. + -1. + <_> + + <_> + + + + <_> + 0 0 19 18 -1. + <_> + 0 6 19 6 3. + 0 + 0.0144739197567105 + -0.9682086706161499 + 0.9563586115837097 + <_> + + <_> + + + + <_> + 10 17 1 3 -1. + <_> + 10 18 1 1 3. + 0 + -3.2585670705884695e-03 + 1. + -0.9941142201423645 + <_> + + <_> + + + + <_> + 2 10 5 10 -1. + <_> + 2 15 5 5 2. + 0 + 0.0134088601917028 + -0.9944000840187073 + 0.8795533776283264 + <_> + + <_> + + + + <_> + 17 0 3 1 -1. + <_> + 18 0 1 1 3. + 0 + 4.0174949390348047e-05 + -0.9955059885978699 + 0.4559975862503052 + <_> + + <_> + + + + <_> + 0 16 5 3 -1. + <_> + 0 17 5 1 3. + 0 + 1.8752219330053777e-04 + -1. + 1.0003039836883545 + <_> + + <_> + + + + <_> + 19 0 1 2 -1. + <_> + 19 1 1 1 2. + 0 + 0. + 0. + -1. + <_> + + <_> + + + + <_> + 0 12 14 1 -1. + <_> + 7 12 7 1 2. + 0 + -5.7442798279225826e-03 + 1. + -1. + <_> + + <_> + + + + <_> + 13 12 6 6 -1. + <_> + 13 14 6 2 3. + 0 + 2.8128331177867949e-04 + -0.9679043292999268 + 0.5377150774002075 + <_> + + <_> + + + + <_> + 0 11 4 4 -1. + <_> + 0 13 4 2 2. + 0 + 2.9258249560371041e-04 + -0.9925985932350159 + 0.7377948760986328 + <_> + + <_> + + + + <_> + 10 17 3 3 -1. + <_> + 10 18 3 1 3. + 0 + -7.6873782090842724e-03 + 0.4390138089656830 + -0.9956768155097961 + <_> + + <_> + + + + <_> + 2 10 15 5 -1. + <_> + 7 10 5 5 3. + 0 + -1.6997690545395017e-04 + 0.8890876173973083 + -0.9900755286216736 + <_> + + <_> + + + + <_> + 14 9 1 4 -1. + <_> + 14 11 1 2 2. + 0 + -2.8665470381383784e-05 + 0.4759410917758942 + -0.9352231025695801 + <_> + + <_> + + + + <_> + 5 9 6 4 -1. + <_> + 5 9 3 2 2. + <_> + 8 11 3 2 2. + 0 + 4.4182338751852512e-04 + -0.7511792182922363 + 0.8805574178695679 + -4.9593520164489746 + 2 + -1 + <_> + + + <_> + + <_> + + + + <_> + 0 3 14 14 -1. + <_> + 0 3 7 7 2. + <_> + 7 10 7 7 2. + 0 + -0.0127300098538399 + 0.4832380115985870 + -0.7198603749275208 + <_> + + <_> + + + + <_> + 0 2 20 8 -1. + <_> + 0 6 20 4 2. + 0 + 0.0589522011578083 + -0.4658026993274689 + 0.4875808060169220 + <_> + + <_> + + + + <_> + 0 12 8 8 -1. + <_> + 0 16 8 4 2. + 0 + 7.8740529716014862e-04 + -0.7789018750190735 + 0.2557401061058044 + <_> + + <_> + + + + <_> + 7 12 6 6 -1. + <_> + 7 14 6 2 3. + 0 + 0.0105524603277445 + -0.6375812888145447 + 0.3461680114269257 + <_> + + <_> + + + + <_> + 1 18 8 2 -1. + <_> + 1 18 4 1 2. + <_> + 5 19 4 1 2. + 0 + 8.0834580585360527e-03 + -0.6557192206382751 + 0.6636518239974976 + <_> + + <_> + + + + <_> + 8 10 4 8 -1. + <_> + 8 14 4 4 2. + 0 + 0.0235214307904243 + -0.9006652832031250 + 0.4957715868949890 + <_> + + <_> + + + + <_> + 0 12 6 5 -1. + <_> + 2 12 2 5 3. + 0 + 2.1901269792579114e-04 + -0.9414082765579224 + 0.4645870029926300 + <_> + + <_> + + + + <_> + 10 8 9 12 -1. + <_> + 10 12 9 4 3. + 0 + -1.5295119374059141e-04 + 0.1733245998620987 + -0.9518421888351440 + <_> + + <_> + + + + <_> + 5 5 10 15 -1. + <_> + 5 10 10 5 3. + 0 + -4.9944370985031128e-03 + 0.2332555055618286 + -0.9303036928176880 + <_> + + <_> + + + + <_> + 1 2 18 14 -1. + <_> + 10 2 9 7 2. + <_> + 1 9 9 7 2. + 0 + -2.8488549869507551e-03 + 0.5224574208259583 + -0.6394140124320984 + <_> + + <_> + + + + <_> + 2 3 3 16 -1. + <_> + 2 11 3 8 2. + 0 + 8.3920639008283615e-03 + -0.6068183183670044 + 0.4723689854145050 + <_> + + <_> + + + + <_> + 6 17 13 3 -1. + <_> + 6 18 13 1 3. + 0 + -3.5511489841155708e-05 + 0.2968985140323639 + -0.6452224850654602 + <_> + + <_> + + + + <_> + 5 11 9 3 -1. + <_> + 8 11 3 3 3. + 0 + 2.1621841005980968e-03 + -0.4258666932582855 + 0.5548338890075684 + <_> + + <_> + + + + <_> + 1 12 18 4 -1. + <_> + 7 12 6 4 3. + 0 + -5.1551498472690582e-03 + 0.3051683902740479 + -0.8206862807273865 + <_> + + <_> + + + + <_> + 3 9 4 2 -1. + <_> + 3 9 2 1 2. + <_> + 5 10 2 1 2. + 0 + 1.7603079322725534e-04 + -0.4252283871173859 + 0.4734784960746765 + <_> + + <_> + + + + <_> + 7 3 8 3 -1. + <_> + 7 4 8 1 3. + 0 + -5.6310528889298439e-03 + 0.4430184960365295 + -0.5268139839172363 + <_> + + <_> + + + + <_> + 0 17 2 3 -1. + <_> + 0 18 2 1 3. + 0 + 1.0609399760141969e-04 + -0.4128456115722656 + 0.4862971007823944 + <_> + + <_> + + + + <_> + 5 8 10 4 -1. + <_> + 5 10 10 2 2. + 0 + -0.0146872196346521 + 0.3483710885047913 + -0.6565722227096558 + <_> + + <_> + + + + <_> + 1 12 15 6 -1. + <_> + 1 14 15 2 3. + 0 + 0.0810066536068916 + -0.3347136080265045 + 0.6498758792877197 + <_> + + <_> + + + + <_> + 6 19 14 1 -1. + <_> + 6 19 7 1 2. + 0 + 7.1147878770716488e-05 + -0.5422406792640686 + 0.2807042896747589 + <_> + + <_> + + + + <_> + 0 19 16 1 -1. + <_> + 8 19 8 1 2. + 0 + 2.6208710551145487e-05 + -0.7503160834312439 + 0.4175724089145660 + <_> + + <_> + + + + <_> + 14 11 1 2 -1. + <_> + 14 12 1 1 2. + 0 + -2.2025800717528909e-05 + 0.3986887931823730 + -0.8484249711036682 + <_> + + <_> + + + + <_> + 3 11 3 2 -1. + <_> + 3 12 3 1 2. + 0 + -2.7908370611839928e-05 + 0.4262354969978333 + -0.6090481281280518 + <_> + + <_> + + + + <_> + 5 12 12 1 -1. + <_> + 5 12 6 1 2. + 0 + -3.7988298572599888e-04 + 0.2306731045246124 + -0.3030667901039124 + <_> + + <_> + + + + <_> + 3 12 12 1 -1. + <_> + 9 12 6 1 2. + 0 + -2.8329479391686618e-05 + 0.4294688999652863 + -0.6150280237197876 + -2.0059499740600586 + 3 + -1 + <_> + + + <_> + + <_> + + + + <_> + 7 18 3 2 -1. + <_> + 8 18 1 2 3. + 0 + -8.7926961714401841e-04 + -0.8508998155593872 + 0.2012203931808472 + <_> + + <_> + + + + <_> + 10 18 3 2 -1. + <_> + 11 18 1 2 3. + 0 + -1.0719529818743467e-03 + -0.8750498294830322 + 0.1188623011112213 + <_> + + <_> + + + + <_> + 7 18 3 2 -1. + <_> + 8 18 1 2 3. + 0 + 1.1958930408582091e-03 + 0.1821606010198593 + -0.8673701882362366 + <_> + + <_> + + + + <_> + 4 1 13 6 -1. + <_> + 4 3 13 2 3. + 0 + -0.0367217697203159 + 0.3615708947181702 + -0.3918508887290955 + <_> + + <_> + + + + <_> + 8 15 2 1 -1. + <_> + 9 15 1 1 2. + 0 + 2.8816348640248179e-04 + 0.1872649937868118 + -0.7076212763786316 + <_> + + <_> + + + + <_> + 10 15 3 1 -1. + <_> + 11 15 1 1 3. + 0 + 6.8340590223670006e-04 + 0.1269242018461227 + -0.7228708863258362 + <_> + + <_> + + + + <_> + 1 12 18 1 -1. + <_> + 7 12 6 1 3. + 0 + -0.0425732918083668 + 0.5858349800109863 + -0.2147608995437622 + -0.9255558848381042 + 4 + -1 + <_> + + + <_> + + <_> + + + + <_> + 6 18 7 2 -1. + <_> + 6 19 7 1 2. + 0 + 0.0233492702245712 + -0.2366411983966827 + 0.5849282145500183 + <_> + + <_> + + + + <_> + 12 16 2 1 -1. + <_> + 12 16 1 1 2. + 0 + 4.9444608157500625e-04 + 0.1428918987512589 + -0.6820772290229797 + <_> + + <_> + + + + <_> + 3 8 4 6 -1. + <_> + 3 8 2 3 2. + <_> + 5 11 2 3 2. + 0 + -0.0177930891513824 + 0.5955523848533630 + -0.2330096960067749 + <_> + + <_> + + + + <_> + 2 3 18 4 -1. + <_> + 2 5 18 2 2. + 0 + 0.0353034809231758 + -0.3556973040103912 + 0.3598164916038513 + <_> + + <_> + + + + <_> + 6 16 2 2 -1. + <_> + 7 16 1 2 2. + 0 + 7.1409897645935416e-04 + 0.1659422963857651 + -0.7856965065002441 + <_> + + <_> + + + + <_> + 9 19 2 1 -1. + <_> + 9 19 1 1 2. + 0 + -3.5466518602333963e-04 + -0.7188175916671753 + 0.1491793990135193 + <_> + + <_> + + + + <_> + 9 19 2 1 -1. + <_> + 10 19 1 1 2. + 0 + -3.2956211362034082e-04 + -0.7239602804183960 + 0.1283237040042877 + <_> + + <_> + + + + <_> + 1 12 18 3 -1. + <_> + 7 12 6 3 3. + 0 + -0.0558854192495346 + 0.2699365019798279 + -0.3814569115638733 + <_> + + <_> + + + + <_> + 5 8 10 9 -1. + <_> + 5 11 10 3 3. + 0 + -0.2315281033515930 + 0.5102406740188599 + -0.2150623947381973 + <_> + + <_> + + + + <_> + 7 0 6 18 -1. + <_> + 9 0 2 18 3. + 0 + 3.8320471066981554e-03 + -0.3187570869922638 + 0.3741405010223389 + <_> + + <_> + + + + <_> + 2 5 8 4 -1. + <_> + 2 5 4 2 2. + <_> + 6 7 4 2 2. + 0 + -7.1148001588881016e-03 + 0.3868972063064575 + -0.3064059019088745 + <_> + + <_> + + + + <_> + 13 11 2 3 -1. + <_> + 13 11 1 3 2. + 0 + 1.0463730432093143e-03 + -0.0578359216451645 + 0.2854403853416443 + <_> + + <_> + + + + <_> + 5 11 2 3 -1. + <_> + 6 11 1 3 2. + 0 + 1.2736029748339206e-04 + -0.3159281015396118 + 0.4068993926048279 + -1.1411540508270264 + 5 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 19 18 1 -1. + <_> + 7 19 6 1 3. + 0 + 0.0220439601689577 + -0.2536872923374176 + 0.5212177038192749 + <_> + + <_> + + + + <_> + 12 14 3 6 -1. + <_> + 13 14 1 6 3. + 0 + 2.1312560420483351e-03 + 0.1482914984226227 + -0.5914195775985718 + <_> + + <_> + + + + <_> + 0 11 12 4 -1. + <_> + 4 11 4 4 3. + 0 + -0.0413990207016468 + 0.4204145073890686 + -0.2349137067794800 + <_> + + <_> + + + + <_> + 0 2 20 8 -1. + <_> + 0 6 20 4 2. + 0 + 0.1522327959537506 + -0.3104422092437744 + 0.4176956117153168 + <_> + + <_> + + + + <_> + 7 14 2 4 -1. + <_> + 8 14 1 4 2. + 0 + 7.2278419975191355e-04 + 0.2251144051551819 + -0.6049224138259888 + <_> + + <_> + + + + <_> + 5 10 10 8 -1. + <_> + 10 10 5 4 2. + <_> + 5 14 5 4 2. + 0 + 0.0139188598841429 + 0.1998808979988098 + -0.5362910032272339 + <_> + + <_> + + + + <_> + 5 12 1 4 -1. + <_> + 5 14 1 2 2. + 0 + 9.3200067058205605e-03 + -0.3086053133010864 + 0.3600850105285645 + <_> + + <_> + + + + <_> + 10 0 1 8 -1. + <_> + 10 4 1 4 2. + 0 + -0.0135594001039863 + 0.7699136137962341 + -0.1129935979843140 + <_> + + <_> + + + + <_> + 1 8 18 8 -1. + <_> + 7 8 6 8 3. + 0 + -0.2024694979190826 + 0.5726454854011536 + -0.1685701012611389 + <_> + + <_> + + + + <_> + 9 8 10 4 -1. + <_> + 9 8 5 4 2. + 0 + 0.0256939493119717 + -0.0890305936336517 + 0.4055748879909515 + <_> + + <_> + + + + <_> + 6 6 8 3 -1. + <_> + 6 7 8 1 3. + 0 + -0.0135868499055505 + 0.4805161952972412 + -0.1680151969194412 + <_> + + <_> + + + + <_> + 10 9 3 3 -1. + <_> + 11 9 1 3 3. + 0 + -6.3351547578349710e-04 + 0.2068227976560593 + -0.2571463882923126 + <_> + + <_> + + + + <_> + 4 14 2 4 -1. + <_> + 5 14 1 4 2. + 0 + 1.3086969556752592e-04 + 0.2003916949033737 + -0.4468185007572174 + <_> + + <_> + + + + <_> + 10 17 10 2 -1. + <_> + 15 17 5 1 2. + <_> + 10 18 5 1 2. + 0 + 9.4451867043972015e-03 + 0.0453975386917591 + -0.6604390144348145 + <_> + + <_> + + + + <_> + 3 18 3 2 -1. + <_> + 4 18 1 2 3. + 0 + -1.1732289567589760e-03 + -0.7233589887619019 + 0.1189457029104233 + <_> + + <_> + + + + <_> + 13 2 4 9 -1. + <_> + 13 2 2 9 2. + 0 + -0.0270948894321918 + 0.4183718860149384 + -0.0622722618281841 + <_> + + <_> + + + + <_> + 3 2 4 9 -1. + <_> + 5 2 2 9 2. + 0 + 0.0128746498376131 + -0.2036883980035782 + 0.4376415908336639 + <_> + + <_> + + + + <_> + 9 8 2 8 -1. + <_> + 10 8 1 4 2. + <_> + 9 12 1 4 2. + 0 + -2.8124409727752209e-03 + -0.6812670230865479 + 0.1294167041778564 + -1.2025229930877686 + 6 + -1 + <_> + + + <_> + + <_> + + + + <_> + 0 18 14 2 -1. + <_> + 0 18 7 1 2. + <_> + 7 19 7 1 2. + 0 + 0.0179104395210743 + -0.2364671975374222 + 0.5514438152313232 + <_> + + <_> + + + + <_> + 10 13 9 1 -1. + <_> + 13 13 3 1 3. + 0 + -5.0143511034548283e-03 + 0.4693753123283386 + -0.3883568942546844 + <_> + + <_> + + + + <_> + 6 15 3 1 -1. + <_> + 7 15 1 1 3. + 0 + 4.2181540629826486e-04 + 0.1153784990310669 + -0.7132592797279358 + <_> + + <_> + + + + <_> + 0 16 20 4 -1. + <_> + 10 16 10 2 2. + <_> + 0 18 10 2 2. + 0 + -0.0263313204050064 + -0.6675789952278137 + 0.1828629970550537 + <_> + + <_> + + + + <_> + 1 13 18 4 -1. + <_> + 1 13 9 2 2. + <_> + 10 15 9 2 2. + 0 + 0.0270899794995785 + 0.0714882835745811 + -0.7389600276947021 + <_> + + <_> + + + + <_> + 10 10 6 1 -1. + <_> + 12 10 2 1 3. + 0 + 3.9808810688555241e-03 + -0.0624900311231613 + 0.2579961121082306 + <_> + + <_> + + + + <_> + 0 10 12 6 -1. + <_> + 4 10 4 6 3. + 0 + 0.0938581079244614 + -0.1166857033967972 + 0.8323975801467896 + <_> + + <_> + + + + <_> + 10 11 9 4 -1. + <_> + 13 11 3 4 3. + 0 + -0.0170704908668995 + 0.2551425099372864 + -0.1464619040489197 + <_> + + <_> + + + + <_> + 1 13 9 1 -1. + <_> + 4 13 3 1 3. + 0 + -5.6102341040968895e-03 + 0.3810698091983795 + -0.2898282110691071 + <_> + + <_> + + + + <_> + 12 17 1 3 -1. + <_> + 12 18 1 1 3. + 0 + -1.6884109936654568e-03 + 0.3976930975914001 + -0.1791553944349289 + <_> + + <_> + + + + <_> + 5 17 3 3 -1. + <_> + 6 17 1 3 3. + 0 + 1.1422219686210155e-03 + 0.1220583021640778 + -0.7954893708229065 + <_> + + <_> + + + + <_> + 0 2 20 8 -1. + <_> + 0 6 20 4 2. + 0 + 0.0854484736919403 + -0.3227156102657318 + 0.2583124935626984 + -0.8488889932632446 + 7 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 12 1 6 -1. + <_> + 5 15 1 3 2. + 0 + -1.2407209724187851e-03 + 0.7162470817565918 + -0.2007752954959869 + <_> + + <_> + + + + <_> + 6 5 14 10 -1. + <_> + 13 5 7 5 2. + <_> + 6 10 7 5 2. + 0 + -0.0822703167796135 + 0.3968873023986816 + -0.2290832996368408 + <_> + + <_> + + + + <_> + 2 9 9 1 -1. + <_> + 5 9 3 1 3. + 0 + 6.2309550121426582e-03 + -0.2406931966543198 + 0.3659430146217346 + <_> + + <_> + + + + <_> + 10 11 9 3 -1. + <_> + 13 11 3 3 3. + 0 + -0.0140555696561933 + 0.2607584893703461 + -0.2829737067222595 + <_> + + <_> + + + + <_> + 7 14 6 1 -1. + <_> + 9 14 2 1 3. + 0 + 6.5327459014952183e-04 + 0.1528156995773315 + -0.5593969821929932 + <_> + + <_> + + + + <_> + 19 0 1 16 -1. + <_> + 19 8 1 8 2. + 0 + 0.0125494198873639 + -0.2089716047048569 + 0.2781802117824554 + <_> + + <_> + + + + <_> + 7 4 6 10 -1. + <_> + 7 4 3 5 2. + <_> + 10 9 3 5 2. + 0 + 0.0156330708414316 + 0.1483357995748520 + -0.6003684997558594 + <_> + + <_> + + + + <_> + 10 9 2 3 -1. + <_> + 10 9 1 3 2. + 0 + 7.4582709930837154e-04 + -0.2270790934562683 + 0.1987556070089340 + <_> + + <_> + + + + <_> + 0 12 12 2 -1. + <_> + 4 12 4 2 3. + 0 + -0.0158222708851099 + 0.2820397913455963 + -0.2920896112918854 + <_> + + <_> + + + + <_> + 12 18 3 2 -1. + <_> + 12 19 3 1 2. + 0 + 8.7247788906097412e-03 + -0.1720713973045349 + 0.4697273969650269 + <_> + + <_> + + + + <_> + 5 17 1 2 -1. + <_> + 5 18 1 1 2. + 0 + 6.8489677505567670e-04 + 0.1544692963361740 + -0.6636797189712524 + <_> + + <_> + + + + <_> + 9 11 2 1 -1. + <_> + 9 11 1 1 2. + 0 + 2.5823758915066719e-04 + 0.1690579950809479 + -0.4210532009601593 + <_> + + <_> + + + + <_> + 5 0 9 4 -1. + <_> + 8 0 3 4 3. + 0 + 0.0420489497482777 + -0.1286004930734634 + 0.6025344729423523 + <_> + + <_> + + + + <_> + 7 11 7 3 -1. + <_> + 7 12 7 1 3. + 0 + -0.0152104198932648 + 0.3247380852699280 + -0.2400044947862625 + <_> + + <_> + + + + <_> + 8 14 3 1 -1. + <_> + 9 14 1 1 3. + 0 + -7.4586068512871861e-04 + -0.7052754759788513 + 0.1198176965117455 + <_> + + <_> + + + + <_> + 7 9 6 4 -1. + <_> + 10 9 3 2 2. + <_> + 7 11 3 2 2. + 0 + -5.6090662255883217e-03 + -0.5189142227172852 + 0.1511954963207245 + <_> + + <_> + + + + <_> + 7 9 3 3 -1. + <_> + 8 9 1 3 3. + 0 + -6.9692882243543863e-04 + 0.2492880970239639 + -0.2738071978092194 + <_> + + <_> + + + + <_> + 9 9 2 1 -1. + <_> + 9 9 1 1 2. + 0 + -1.3032859424129128e-03 + -0.7021797895431519 + 0.1096538975834846 + -1.0809509754180908 + 8 + -1 + <_> + + + <_> + + <_> + + + + <_> + 1 19 15 1 -1. + <_> + 6 19 5 1 3. + 0 + 0.0127973603084683 + -0.2490361928939819 + 0.4674673080444336 + <_> + + <_> + + + + <_> + 9 3 3 3 -1. + <_> + 9 4 3 1 3. + 0 + -4.1834129951894283e-03 + 0.3007251024246216 + -0.2219883054494858 + <_> + + <_> + + + + <_> + 1 12 18 1 -1. + <_> + 7 12 6 1 3. + 0 + -0.0236128699034452 + 0.2414264976978302 + -0.3374670147895813 + <_> + + <_> + + + + <_> + 14 8 1 9 -1. + <_> + 14 11 1 3 3. + 0 + -0.0251536108553410 + 0.4372070133686066 + -0.3275614082813263 + <_> + + <_> + + + + <_> + 2 2 2 18 -1. + <_> + 2 11 2 9 2. + 0 + 0.0211393106728792 + -0.2863174080848694 + 0.3124063909053802 + <_> + + <_> + + + + <_> + 13 11 6 6 -1. + <_> + 16 11 3 3 2. + <_> + 13 14 3 3 2. + 0 + -0.0217125993221998 + 0.6942697763442993 + -0.1012582033872604 + <_> + + <_> + + + + <_> + 1 9 18 6 -1. + <_> + 1 9 9 3 2. + <_> + 10 12 9 3 2. + 0 + -0.0430783592164516 + -0.5607234239578247 + 0.1663125008344650 + <_> + + <_> + + + + <_> + 10 10 6 1 -1. + <_> + 12 10 2 1 3. + 0 + -1.4987450558692217e-03 + 0.1272646039724350 + -0.1166080012917519 + <_> + + <_> + + + + <_> + 4 10 6 1 -1. + <_> + 6 10 2 1 3. + 0 + 4.1716569103300571e-03 + -0.2401334047317505 + 0.4614624083042145 + <_> + + <_> + + + + <_> + 17 13 3 7 -1. + <_> + 18 13 1 7 3. + 0 + 4.8898528330028057e-03 + 0.0905465632677078 + -0.4839006960391998 + <_> + + <_> + + + + <_> + 0 13 3 7 -1. + <_> + 1 13 1 7 3. + 0 + -1.1625960469245911e-03 + -0.5429257154464722 + 0.1364106982946396 + <_> + + <_> + + + + <_> + 3 10 14 6 -1. + <_> + 10 10 7 3 2. + <_> + 3 13 7 3 2. + 0 + -0.0367816612124443 + -0.7064548730850220 + 0.1088668033480644 + <_> + + <_> + + + + <_> + 1 10 6 5 -1. + <_> + 3 10 2 5 3. + 0 + 0.0246897693723440 + -0.1673354059457779 + 0.5149983167648315 + <_> + + <_> + + + + <_> + 9 7 2 3 -1. + <_> + 9 8 2 1 3. + 0 + -4.8654521815478802e-03 + 0.5060626268386841 + -0.1594700068235397 + <_> + + <_> + + + + <_> + 5 8 10 3 -1. + <_> + 5 9 10 1 3. + 0 + -0.0117849996313453 + 0.4351908862590790 + -0.1512733995914459 + <_> + + <_> + + + + <_> + 10 13 2 1 -1. + <_> + 10 13 1 1 2. + 0 + 9.4989547505974770e-04 + 0.0692935213446617 + -0.4393649101257324 + <_> + + <_> + + + + <_> + 8 13 2 1 -1. + <_> + 9 13 1 1 2. + 0 + 5.9616740327328444e-04 + 0.0982565581798553 + -0.6629868745803833 + <_> + + <_> + + + + <_> + 9 9 2 3 -1. + <_> + 9 10 2 1 3. + 0 + -6.2817288562655449e-03 + 0.4888150990009308 + -0.1557238996028900 + -1.1087180376052856 + 9 + -1 + <_> + + + <_> + + <_> + + + + <_> + 9 0 1 8 -1. + <_> + 9 4 1 4 2. + 0 + -9.9095050245523453e-03 + 0.5630884766578674 + -0.2063539028167725 + <_> + + <_> + + + + <_> + 19 0 1 14 -1. + <_> + 19 7 1 7 2. + 0 + 4.5435219071805477e-03 + -0.2470169961452484 + 0.1799020022153854 + <_> + + <_> + + + + <_> + 7 6 6 2 -1. + <_> + 7 7 6 1 2. + 0 + -8.7091082241386175e-04 + 0.2453050017356873 + -0.2765454053878784 + <_> + + <_> + + + + <_> + 14 8 1 9 -1. + <_> + 14 11 1 3 3. + 0 + -0.0216368697583675 + 0.2515161931514740 + -0.3227509856224060 + <_> + + <_> + + + + <_> + 2 18 4 2 -1. + <_> + 2 18 2 1 2. + <_> + 4 19 2 1 2. + 0 + 2.5493409484624863e-03 + -0.1476895958185196 + 0.5545899271965027 + <_> + + <_> + + + + <_> + 9 11 6 3 -1. + <_> + 9 11 3 3 2. + 0 + 1.6613079933449626e-03 + -0.2122790962457657 + 0.1571837961673737 + <_> + + <_> + + + + <_> + 0 0 1 14 -1. + <_> + 0 7 1 7 2. + 0 + 9.4684818759560585e-03 + -0.2621173858642578 + 0.2920702099800110 + <_> + + <_> + + + + <_> + 10 5 2 15 -1. + <_> + 10 10 2 5 3. + 0 + -0.0522385612130165 + 0.1780423969030380 + -0.3343229889869690 + <_> + + <_> + + + + <_> + 5 11 6 3 -1. + <_> + 8 11 3 3 2. + 0 + 2.5752868968993425e-03 + -0.2065097987651825 + 0.4189889132976532 + <_> + + <_> + + + + <_> + 11 6 6 7 -1. + <_> + 13 6 2 7 3. + 0 + -0.0160471405833960 + 0.2585200071334839 + -0.1094772964715958 + <_> + + <_> + + + + <_> + 4 10 12 9 -1. + <_> + 8 10 4 9 3. + 0 + -0.1159958988428116 + 0.6298483014106750 + -0.1196947023272514 + <_> + + <_> + + + + <_> + 10 14 3 1 -1. + <_> + 11 14 1 1 3. + 0 + -9.7595580155029893e-04 + -0.6507467031478882 + 0.0756275802850723 + <_> + + <_> + + + + <_> + 7 14 3 1 -1. + <_> + 8 14 1 1 3. + 0 + -4.2097578989341855e-04 + -0.5833796858787537 + 0.1222841963171959 + <_> + + <_> + + + + <_> + 10 14 3 2 -1. + <_> + 11 14 1 2 3. + 0 + 3.9017631206661463e-04 + 0.0758925378322601 + -0.2629995942115784 + <_> + + <_> + + + + <_> + 4 8 2 6 -1. + <_> + 5 8 1 6 2. + 0 + 3.1535029411315918e-03 + -0.1664831042289734 + 0.4664255082607269 + <_> + + <_> + + + + <_> + 10 14 3 2 -1. + <_> + 11 14 1 2 3. + 0 + -1.4046890428289771e-03 + -0.3981274962425232 + 0.0561619699001312 + <_> + + <_> + + + + <_> + 3 12 3 4 -1. + <_> + 4 12 1 4 3. + 0 + 3.1666089780628681e-03 + -0.1787768006324768 + 0.4090973138809204 + <_> + + <_> + + + + <_> + 3 1 14 6 -1. + <_> + 3 3 14 2 3. + 0 + -0.0164993591606617 + 0.2048030048608780 + -0.3630825877189636 + <_> + + <_> + + + + <_> + 7 14 3 2 -1. + <_> + 8 14 1 2 3. + 0 + 4.1761019383557141e-04 + 0.1311777979135513 + -0.4833852946758270 + <_> + + <_> + + + + <_> + 12 11 3 3 -1. + <_> + 13 11 1 3 3. + 0 + 9.0707670897245407e-03 + 9.2487707734107971e-03 + -0.6447566151618958 + <_> + + <_> + + + + <_> + 5 11 3 3 -1. + <_> + 6 11 1 3 3. + 0 + 3.3107338822446764e-04 + -0.2549797892570496 + 0.2758406996726990 + <_> + + <_> + + + + <_> + 4 0 12 3 -1. + <_> + 4 1 12 1 3. + 0 + 0.0139847695827484 + 0.1226134970784187 + -0.5258917808532715 + <_> + + <_> + + + + <_> + 1 19 18 1 -1. + <_> + 7 19 6 1 3. + 0 + 0.0238846298307180 + -0.1637594997882843 + 0.3971964120864868 + <_> + + <_> + + + + <_> + 5 10 11 6 -1. + <_> + 5 12 11 2 3. + 0 + -0.0941136777400970 + 0.2231238931417465 + -0.2817093133926392 + <_> + + <_> + + + + <_> + 0 9 12 1 -1. + <_> + 6 9 6 1 2. + 0 + -0.0163963604718447 + 0.5174812078475952 + -0.1398597955703735 + -1.1378910541534424 + 10 + -1 + <_> + + + <_> + + <_> + + + + <_> + 5 12 1 6 -1. + <_> + 5 15 1 3 2. + 0 + -1.8984159396495670e-04 + 0.4796459972858429 + -0.1926054060459137 + <_> + + <_> + + + + <_> + 14 12 6 6 -1. + <_> + 16 12 2 6 3. + 0 + 4.7213290818035603e-03 + -0.3855938911437988 + 0.2359178066253662 + <_> + + <_> + + + + <_> + 5 17 3 2 -1. + <_> + 5 18 3 1 2. + 0 + 1.7611780203878880e-03 + 0.1145095974206924 + -0.5536686778068542 + <_> + + <_> + + + + <_> + 14 12 6 6 -1. + <_> + 16 12 2 6 3. + 0 + 0.0619058012962341 + 0.0361764803528786 + -0.7537580132484436 + <_> + + <_> + + + + <_> + 0 12 6 6 -1. + <_> + 2 12 2 6 3. + 0 + 6.8295709788799286e-03 + -0.2995564043521881 + 0.2059424966573715 + <_> + + <_> + + + + <_> + 14 8 1 9 -1. + <_> + 14 11 1 3 3. + 0 + -0.0229486804455519 + 0.1910860985517502 + -0.2746480107307434 + <_> + + <_> + + + + <_> + 0 16 11 4 -1. + <_> + 0 18 11 2 2. + 0 + 0.0131213096901774 + -0.1467829048633575 + 0.4494847953319550 + <_> + + <_> + + + + <_> + 14 8 1 9 -1. + <_> + 14 11 1 3 3. + 0 + -0.0331512987613678 + 0.2912957966327667 + -0.1595291942358017 + <_> + + <_> + + + + <_> + 5 2 4 6 -1. + <_> + 5 5 4 3 2. + 0 + 0.0224155597388744 + -0.1776317954063416 + 0.3403505980968475 + <_> + + <_> + + + + <_> + 9 0 2 8 -1. + <_> + 9 4 2 4 2. + 0 + -0.0255698896944523 + 0.5480523109436035 + -0.1752621978521347 + <_> + + <_> + + + + <_> + 8 10 2 8 -1. + <_> + 8 14 2 4 2. + 0 + 0.0174023006111383 + -0.3940981030464172 + 0.1953804939985275 + <_> + + <_> + + + + <_> + 12 12 8 3 -1. + <_> + 12 12 4 3 2. + 0 + -6.6808518022298813e-03 + 0.1267247051000595 + -0.3698250055313110 + <_> + + <_> + + + + <_> + 1 3 18 3 -1. + <_> + 7 3 6 3 3. + 0 + -0.0474075004458427 + -0.6734154224395752 + 0.0941268503665924 + <_> + + <_> + + + + <_> + 10 13 4 4 -1. + <_> + 12 13 2 2 2. + <_> + 10 15 2 2 2. + 0 + -7.0174131542444229e-03 + -0.4878580868244171 + -4.7722761519253254e-03 + <_> + + <_> + + + + <_> + 4 17 1 3 -1. + <_> + 4 18 1 1 3. + 0 + -5.6818639859557152e-04 + 0.3031811118125916 + -0.1906266957521439 + <_> + + <_> + + + + <_> + 12 12 8 3 -1. + <_> + 12 12 4 3 2. + 0 + -0.0346436500549316 + 0.1061747968196869 + -0.1113270968198776 + <_> + + <_> + + + + <_> + 5 13 8 4 -1. + <_> + 5 13 4 2 2. + <_> + 9 15 4 2 2. + 0 + 0.0128513900563121 + 0.1139544025063515 + -0.6669226884841919 + <_> + + <_> + + + + <_> + 0 0 20 18 -1. + <_> + 0 9 20 9 2. + 0 + 0.2961465120315552 + -0.1820058971643448 + 0.3209075033664703 + <_> + + <_> + + + + <_> + 5 17 1 2 -1. + <_> + 5 18 1 1 2. + 0 + -1.3540580403059721e-03 + -0.7073159813880920 + 0.0918638333678246 + <_> + + <_> + + + + <_> + 17 18 3 2 -1. + <_> + 17 19 3 1 2. + 0 + -7.0616841549053788e-04 + 0.1960162967443466 + -0.1338178962469101 + <_> + + <_> + + + + <_> + 4 8 7 3 -1. + <_> + 4 9 7 1 3. + 0 + -5.4999729618430138e-03 + 0.3074981868267059 + -0.1724286973476410 + <_> + + <_> + + + + <_> + 7 9 13 2 -1. + <_> + 7 10 13 1 2. + 0 + -0.0122836297377944 + 0.1942628026008606 + -0.1230755969882011 + <_> + + <_> + + + + <_> + 7 12 2 1 -1. + <_> + 8 12 1 1 2. + 0 + 1.9181630341336131e-04 + 0.1334999054670334 + -0.3691028952598572 + <_> + + <_> + + + + <_> + 7 11 6 5 -1. + <_> + 9 11 2 5 3. + 0 + 2.7476788964122534e-03 + -0.1872316002845764 + 0.2906386852264404 + <_> + + <_> + + + + <_> + 8 14 3 2 -1. + <_> + 9 14 1 2 3. + 0 + 5.3845712682232261e-04 + 0.1176405027508736 + -0.5548595190048218 + <_> + + <_> + + + + <_> + 17 18 3 2 -1. + <_> + 17 19 3 1 2. + 0 + -6.2914132140576839e-03 + -0.6762797832489014 + 0.0256425291299820 + <_> + + <_> + + + + <_> + 0 18 3 2 -1. + <_> + 0 19 3 1 2. + 0 + -8.0435717245563865e-04 + 0.3097242116928101 + -0.2231778949499130 + <_> + + <_> + + + + <_> + 16 18 3 2 -1. + <_> + 16 19 3 1 2. + 0 + 0.0178245995193720 + 0.0100319497287273 + -1.0000309944152832 + <_> + + <_> + + + + <_> + 1 18 3 2 -1. + <_> + 1 19 3 1 2. + 0 + -4.5915339142084122e-03 + -0.7925583124160767 + 0.0804975628852844 + <_> + + <_> + + + + <_> + 11 15 2 2 -1. + <_> + 12 15 1 1 2. + <_> + 11 16 1 1 2. + 0 + -4.2610289528965950e-04 + -0.4836213886737823 + 0.0490311309695244 + -1.0918780565261841 + 11 + -1 + \ No newline at end of file diff --git a/lab8/lab8.py b/lab8/lab8.py new file mode 100644 index 0000000..b5b6994 --- /dev/null +++ b/lab8/lab8.py @@ -0,0 +1,18 @@ +import cv2 +import numpy as np +from PIL import Image, ImageDraw +def main(): + image = Image.open('D:\\MACH\\MACH\\LAB_2\\img1.jpg') + image_arr = np.asarray(image) + + hog = cv2.HOGDescriptor() + hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) + detections, weights = hog.detectMultiScale(image_arr) + detections_rectangles = detections.tolist() + draw = ImageDraw.Draw(image) + for x, y, w, h in detections_rectangles: + draw.rectangle( + [x, y, x + w, y + h], outline=(255, 0, 0)) + image.show() +if __name__ == '__main__': + main()