File size: 1,756 Bytes
4e38f98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import torch
from PIL import Image
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as T

def inference_and_save(model, input_image_path, output_image_path, threshold=0.3):
    # 이미지 로드 및 전처리
    img = Image.open(input_image_path).convert("RGB")
    img_tensor = T.ToTensor()(img).unsqueeze(0)  # 이미지 텐서로 변환 및 배치 차원 추가

    # 모델 추론
    with torch.no_grad():
        predictions = model(img_tensor.to(torch.device('cpu')))  # CPU로 모델 실행
    
    # 이미지 변환 및 그리기
    img_np = np.array(img)  # PIL 이미지를 numpy 배열로 변환
    img_np = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)  # OpenCV 형식으로 변환

    for i, box in enumerate(predictions[0]['boxes']):
        score = predictions[0]['scores'][i].item()
        if score > threshold:  # 신뢰도 점수가 임계값 이상인 경우만 표시
            x1, y1, x2, y2 = map(int, box)
            label = predictions[0]['labels'][i].item()
            cv2.rectangle(img_np, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(img_np, f'Label: {label} Score: {score:.2f}', (x1, y1 - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

    # 결과 이미지 저장
    cv2.imwrite(output_image_path, img_np)
    print(f'Result saved at {output_image_path}')

# 사용 예시
input_image_path = 'test_video.mp4'  # 입력 이미지 경로
output_image_path = 'r.mp4'  # 출력 이미지 저장 경로

# 모델 로드
model_path = '15road_best_model.pt'
model = torch.load(model_path, map_location=torch.device('cpu'))
model.eval()

# 추론 및 저장
inference_and_save(model, input_image_path, output_image_path, threshold=0.3)