728x90
이번에는 아래 두 코드를 합쳐보았다.
이전에 학습 모델로 객체인식 하는 코드 + 구글 TTS 음성출력 코드
1. 사진에서 객체인식 + 음성출력
코드 실행 시
객체 인식된 사진이 나오며, 경고 문구를 재생한다.
코드
"""230520_jpg_detect_and_say.py"""
import torch
import cv2
import numpy as np
from gtts import gTTS
from pathlib import Path
import os
# YOLOv5 모델 로드
model_path = 'C:/Users/songs/PycharmProjects/mediapipe/yolov5/data/dataset_230515/230518_/best_SY_230518.pt'
model = torch.hub.load('ultralytics/yolov5', 'custom', path=model_path)
# 객체 클래스와 경고 문장을 매핑하는 딕셔너리
warnings = {
'head': "창 밖으로 머리를 내밀면 위험합니다",
'hand': "창 밖으로 손을 내밀지 마세요",
'etc': "낙하 위험이 있습니다. 비상등을 켜겠습니다."
}
# 이미지 읽기
image = cv2.imread('frame_99.jpg')
points = np.array([[187, 33],
[247, 49],
[320, 78],
[394, 114], [452, 148],
[497, 182],
[540, 246],
[571, 317],
[588, 398],
[527, 478],
[425, 542],
[337, 605],
[287, 644],
[263, 485],
[237, 308],
[210, 162]], dtype=np.int32)
# 관심 영역 설정 (창문 안쪽을 까맣게 처리)
mask = np.ones_like(image, dtype=np.uint8) * 255
cv2.fillPoly(mask, [points], (0, 0, 0))
roi = cv2.bitwise_and(image, mask)
# 객체 탐지 실행
results = model(roi[:, :, ::-1]) # YOLOv5는 RGB 이미지를 기대하므로 BGR에서 RGB로 변환
# 결과 출력
results.print()
# 탐지된 객체에 대한 경계 상자와 클래스를 그림
rendered_image = results.render()[0]
# 객체 탐지 결과를 가져옵니다.
for *box, confidence, class_id in results.xyxy[0]:
# 객체 클래스 이름을 얻습니다.
class_name = results.names[int(class_id)]
# 객체 클래스에 해당하는 경고 문장을 찾습니다.
warning = warnings.get(class_name)
# 경고 문장이 있으면 TTS로 변환하고 재생합니다.
if warning is not None:
tts = gTTS(text=warning, lang='ko')
filename = f"voice_{class_name}.mp3"
tts.save(filename)
os.system(f"start {filename}")
cv2.imshow("Detections", rendered_image[:, :, ::-1]) # RGB에서 BGR로 변환하여 OpenCV로 표시
cv2.waitKey(0)
cv2.destroyAllWindows()
2. 동영상에서 객체인식 + 음성출력
음성출력 조건
- 한 번 객체가 인식되면, 그 때 인식된 객체와 알맞은 음성을 출력
- 인식된 객체와 다른 객체가 인식되면, 바로 새로 인식된 객체에 해당하는 음성을 출력
- 음성 출력이 완료되었는데도 계속 해당 객체가 감지되고 있다면, 1초 기다린 뒤 해당 문구를 출력
- 음성 출력이 되고 있는 와중에, 인식되던 객체가 사라진다면 음성 출력은 0.5초 뒤에 종료
터미널에서 ffmpeg 설치
복잡해서 ffmpeg 안쓰기로함
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
'프로젝트 기록 > 딥러닝 모델 개발_공학설계캡스톤디자인(스마트카ICT)' 카테고리의 다른 글
[YOLOv5] 최종 테스트: 웹캠으로 실시간 (0) | 2023.05.21 |
---|---|
[YOLOv5, openCV] 딥러닝 모델로 객체detect + openCV bounding box 표시 + 음성 출력 (0) | 2023.05.21 |
[gTTS] google TTS로 음성 출력 예제코드 (0) | 2023.05.20 |
[Google Colab] 런타임 연결 끊김 방지, 세션 유지 (0) | 2023.05.19 |
[YOLOv5] 학습 파일로 동영상 객체탐지 테스트 (0) | 2023.05.18 |