본문 바로가기
Project/낙상

[낙상 감지 프로젝트] 2024년 12월 17일(화)

by 바다의 공간 2024. 12. 17.

https://so-fast.tistory.com/entry/%EB%82%99%EC%83%81-%EA%B0%90%EC%A7%80-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-2024%EB%85%84-12%EC%9B%94-16%EC%9D%BC%EC%9B%94

 

[낙상 감지 프로젝트] 2024년 12월 16일(월)

전체 요약 12.16(월)   - YOLOv8-pose와 미디어파이프 두가지 모델을 사용하여 낙상감지 프로젝트 구상   - 우선 YOLOv8n-pose로 관절값(코, 양쪽 어깨)을 json파일로 뽑아서 속도 임계값을 

so-fast.tistory.com


전체 요약

 

12.17(화)
  -  처음 잡힌 사람을 기준으로 하기 위해서 트래커를 적용

 

지난 회의때는 2명으로 잡히는 부분이 있었기때문에,

이 부분을 한명으로 트래킹해서 2명으로 잡는 부분을 해결하고 싶었습니다

트랙킹을 알아야하기때문에 공식홈페이지를 보고 공부도 겸했습니다.

 

(https://so-fast.tistory.com/entry/YOLO-TRACKER-%EB%AC%B8%EC%84%9C-%EB%B0%8F-%EC%8B%A4%ED%97%98%EA%B5%AC%ED%98%84%ED%95%B4%EB%B3%B4%EA%B8%B0)

 

from ultralytics import YOLO
import cv2

# YOLO Pose 모델 로드
model = YOLO('yolov8n-pose.pt')

# 입력 및 출력 동영상 경로
input_video = '/content/00015_H_A_SY_C5.mp4'
output_video = '/content/output_yolo_pose_track.mp4'

# 동영상 읽기 및 저장 설정
cap = cv2.VideoCapture(input_video)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(output_video, fourcc, fps, (width, height))

# 프레임 단위로 Pose + 추적 수행
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # YOLO Pose 추적 수행
    results = model.track(frame, persist=True)  # persist=True로 ID를 지속적으로 유지

    # 시각화된 결과 가져오기
    annotated_frame = results[0].plot()  # 프레임에 바운딩 박스, 키포인트, ID 시각화

    # 결과를 동영상에 저장
    out.write(annotated_frame)

cap.release()
out.release()
cv2.destroyAllWindows()

print(f"처리가 완료되었습니다! 결과 동영상: {output_video}")

.

한눈에 확인하기 좋은 결과값
Origin Before tracking After tracking

 

 

결과 영상

 

이 다음엔 json을 추출해서 속도를 뽑고, 뽑은 값을 기준으로 잡아서  낙상, 비낙상, 위험 3가지의 클래스로 해결해보려고 합니다.