Я работаю над программным обеспечением, которое должно обнаруживать людей в реальном времени на нескольких камерах для системы домашнего наблюдения.
В настоящее время я использую Opencv для захвата кадров с IP-камеры и тензорного потока для анализа и поиска объектов на них (код очень похож на тот, который можно найти в API обнаружения объектов Tf).Я также пробовал разные замороженные графы логических выводов из api обнаружения объекта тензорного потока по этой ссылке:
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
У меня настольный ПК с процессором Intel Core i7-6700 CPU @ 3.40GHz × 8 и мой графический процессор NVidia Geforce gtx960ti.
Программное обеспечение работает, как и предполагалось, но медленнее, чем ожидалось (3-5 кадров в секунду), а загрузка ЦП довольно высока (80-90%) дляодин скрипт Python, который работает только на 1 устройстве камеры.
Я что-то не так делаю?Каковы наилучшие способы оптимизации производительности и достижения лучшего FPS и более низкой загрузки ЦП для одновременного анализа большего количества видеопотоков?До сих пор я изучал многопоточность, но не знаю, как реализовать ее в своем коде.
Фрагмент кода:
with detection_graph.as_default():
with tf.Session(graph=detection_graph) as sess:
while True:
frame = cap.read()
frame_expanded = np.expand_dims(frame, axis = 0)
image_tensor = detection_graph.get_tensor_by_name("image_tensor:0")
boxes = detection_graph.get_tensor_by_name("detection_boxes:0")
scores = detection_graph.get_tensor_by_name("detection_scores:0")
classes = detection_graph.get_tensor_by_name("detection_classes:0")
num_detections=detection_graph.get_tensor_by_name("num_detections:0")
(boxes, scores, classes, num_detections) = sess.run(
[boxes, scores, classes, num_detections],
feed_dict = {image_tensor: frame_expanded})
vis_util.visualize_boxes_and_labels_on_image_array(frame,...)
cv2.imshow("video", frame)
if cv2.waitKey(25) & 0xFF == ord("q"):
cv2.destroyAllWindows()
cap.stop()
break