Распознавание лиц и подсчет движений

Задание закрыто
Стоимость:20 000 рублей
Срок выполнения:30 дней
Варианты оплаты:По договоренности
Дата публикации:2023-01-17 15:31
Обновлено:2023-03-06 14:31
Был(а) на сайте:2025-12-28 16:03

Распознавание лиц и подсчёт движений

 
Задача

Нужна программа идентификации лиц и подсчёта двигательной активности человека и сервер API для взаимодействия с мобильным приложением

На вход подаём стрим, на выходе получаем — id человека + его активность

Рассмотрю различные варианты и технологии — OpenCV, Kinect, RealSense и др.

Оставлять заявки могут только авторизованные пользователи.
Например, для распознавания лиц с помощью каскадов Хаара в OpenCV, можно использовать следующий код:

python
Copy code
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture(0)

while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

cv2.imshow('frame', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()
19:58 05.03.23
Для обнаружения ключевых точек скелета человека можно использовать алгоритмы детекции объектов, такие как YOLO или SSD. Вот пример кода на Python для обнаружения людей с помощью YOLO:

python
Copy code
import cv2
import numpy as np

net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")

classes = []
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]

layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

cap = cv2.VideoCapture(0)

while True:
ret, frame = cap.read()

height, width, channels = frame.shape

blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

net.setInput(blob)
outs = net.forward(output_layers)

class_ids = []
confidences = []
boxes = []

for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)

indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)

for i in range(len(boxes)):
if i in indexes:
x, y, w, h
Добрый день, если еще актуально готов предложить свои услуги. Имеется опыт по данному направлению.

Оставлять заявки могут только авторизованные пользователи.