22.03.03 [kfood프로젝트] 기존YOLOv5 깃허브랑 우리팀 inference 코드 비교

2022. 3. 3. 13:39프로젝트/KFood

원작자 inference 실행 코드

python detect.py --source 0  # webcam
                          img.jpg  # image
                          vid.mp4  # video
                          path/  # directory
                          path/*.jpg  # glob
                          'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                          'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

우리 팀 inference 실행 코드

python team07_test.py

 

원작자의 detect.py vs 우리 팀의 detect_y5.py

백엔드와의 연동을 위한 base64 encode, decode 과정, 그리고 최종 bbox_list, class_list출력을 위한 class.json파일
class.json
우리는 웹서비스이므로 img가 file일경우, url일 경우, webcam일 경우 주석처리, base64 decode과정 추가
마찬가지로 필요없는 webcam일 경우 삭제, letterbox에서 img행렬처리해서 dataset 만들기
letterbox
LoadImages
inference visualize False로 수정, 필요없음
result 를 내는 부분에서 webcam등 필요없는 것 삭제,
Print Results(터미널에서)는 필요없어서 삭제하고 대신 Write Results에서는 우리는 백엔드분들께 bbox_list와 class_list를 드려야 하므로 append 진행. 
원작자 / 우리팀
Save results 삭제 및 Print results에서 output_dic에 프론트/백엔드 분들이 사용하셔야 할 bbox_list, cls_list, base64 decode, image값 딕셔너리에 넣어 드린다.
--source 옵션은 삭제하고 위에 source=ROOT/data/images로 def run에 넣어준듯

우리 팀의 team_07.py 코드

import detect_y5 as detect
import base64
import cv2
import numpy as np
from PIL import Image
from io import BytesIO
import json
from pathlib import Path
from utils.general import print_args

FILE = Path(__file__).resolve()

# import os
# os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
# os.environ["CUDA_VISIBLE_DEVICES"] = "0"

#테스트할 이미지의 파일 경로 설정
filepath = './data/images/foods_2.jpg'
with open(filepath, 'rb') as img:
    base64_string = base64.b64encode(img.read())

#Model Detect.py RUN
opt = detect.parse_opt()
#cpu설정
opt.device = 'cpu'
#weights 설정 (default = 'yolov3.pt)
opt.weights = './runs/train/batch_16_0.004_epoch_50_v5x6/weights/best.pt'
# opt.weights = './custom_weights/best copy.pt'
detect.check_requirements(exclude=('tensorboard', 'thop'))
print_args(FILE.stem, opt)
output_dict = detect.run(**vars(opt), source=base64_string)
#image, bbox, class 확인 (image는 일부만 확인)
print(f"image : {output_dict['image'][0]} bbox : {output_dict['bbox']}, class : {output_dict['class']}")


#Save output image (bbox 그려져있는 image)
output_image = output_dict['image']
output_img_name = filepath.split('/')[-1][:-4]
cv2.imwrite(f'./test_result/{output_img_name}.jpg', output_image)

print('-------------end-------------')