Здравствуйте. Помогите объединить 2 метода в класс, не могу разобраться, как запихнуть в класс эти методы. Проблема конкретно с инициализацией, то есть что писать после def init после имени класса
def start_face_detect(self):
"""Метод для запуска потока распознавания лиц"""
if not self.run:
self.run = True
t1 = threading.Thread(target=self.face_detect)
t1.start()
def face_detect(self):
"""Метод для определения лица (запускает в отдельном потоке)"""
cap = cv2.VideoCapture(0)
while True:
# остановка потока при завершении программы
if not self.run:
break
success, frame = cap.read()
# если нет видео с камеры - выход
if not success:
break
# уменьшение кадра для ускорения
rframe = cv2.resize(frame, (0, 0), None, 0.25, 0.25)
# изменение цветов кадра BGR -> RGB
rgb_frame = cv2.cvtColor(rframe, cv2.COLOR_BGR2RGB)
# поиск лиц и их координат
face_locations = face_recognition.face_locations(rgb_frame)
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
for encodeFace, faceLoc in zip(face_encodings, face_locations):
# поиск совпадений
match = face_recognition.compare_faces(self.encodeListKnown, encodeFace)
faceDis = face_recognition.face_distance(self.encodeListKnown, encodeFace)
matchIndex = np.argmin(faceDis)
# если есть совпадение
if match[matchIndex]:
# получаем профиль
self.profile = self.data[matchIndex]
# если он изменился - то выводим
# если не изменился - то нет смысла выводить
if self.profile != self.last_profile:
self.last_profile = self.profile
self.show_data()
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1 * 4, x2 * 4, y2 * 4, x1 * 4
current_status = self.profile
if self.profile['status'] == "Студент":
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.rectangle(frame, (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
elif self.profile['status'] == "Преподаватель":
cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.rectangle(frame, (x1, y2 - 35), (x2, y2), (255, 0, 0), cv2.FILLED)
# Рисуем рамку
#cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
#cv2.rectangle(frame, (x1, y2 - 35), (x2, y2), (0, 255, 0), cv2.FILLED)
# Выводим имя на экран
cv2.putText(frame, self.profile['name'], (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1,
(255, 255, 255), 1)
# если совпадений нет
else:
# меняем профиль на неизвестный профиль
self.profile = self.profile_unknown
# если на форму был выведен другой профиль
# то выводим неизвестный
if self.profile != self.last_profile:
self.last_profile = self.profile
self.show_data()
# координаты лица
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = y1 * 4, x2 * 4, y2 * 4, x1 * 4
# рисуем рамку
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.rectangle(frame, (x1, y2 - 35), (x2, y2), (0, 0, 255), cv2.FILLED)
# Выводим на экран Unknown
cv2.putText(frame, 'Unknown', (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 1)
frequency = 2500 # Set Frequency To 2500 Hertz
duration = 1000 # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)
cv2.imshow("WebCam", frame)
cv2.waitKey(1)