오늘의 한일
- 사물인식 프로젝트
사물 인식 프로젝트
yolov5 모델 분석
#-*- coding:utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
import torch
import cv2
from PIL import Image
model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt', force_reload=True)
img = Image.open('test.jpg')
# img = cv2.imread('test.jpg') # batch of images
results3 = model(img)
# results3.save()
result = results3.pandas().xyxy[0].to_numpy()
species = result[0][6][:3]
breed = result[0][6][4:]
print(result[0][6])
print(f'검색하신 {species}는 {breed} 입니다.')
yolov5 모델을 돌렸을때 7번째 라벨에 name이 출력되는것을 이용해 원하는 정보로 전처리하여 프린트 해보았다.
앞열의 정보가 cat 혹은 dog뿐이라 슬라이싱으로 적당히 처리할 수 있었지만 글자수가 다른게 추가로 붙는다던가,
당장도 영문명으로만 존재하는데 이를 한글명으로 표시하고 싶은 경우엔 어떻게 해야하나 고민을 좀 해보며 구글링을 돌려보다가 괜찮은 방법을 찾았다.
2분 44초부터
이처럼 csv파일을 사용해 데이터를 추가해 준다던가 혹은 yaml파일을 내가 원하는대로 수정한다던가 하는 여러 방식으로 표현해볼 수 있을 것 같다.
덤으로 구글 검색 src에 해당 이름을 붙여 링크해 추가 정보를 주는 방식을 생각해보았는데 이건 다른 조원분들이 크롤링을 활용해서 방법을 찾아보고 있으므로 보류.
iframe을 이용해 구글 검색창을 웹페이지 안에 띄울 수 있으면 좋았겠는데, 인터넷 정책상 같은 서버의 페이지 말고는 frame 형식으로 접근할 수 없게 되었다고 한다.. 예전엔 그런 창이 많았던거같은데 어쩐지 이젠 안보이더라
대신 구글 검색엔진을 집어넣는 기능이 있길래 참조하면 좋을것 같아 공유했다
https://pythonblog.co.kr/blog/45/
마지막으로 아직 프로젝트 뼈대 구성이 작성되지 않아서 적당히 코드를 구상해 보았다.
import torch
import cv2
from PIL import Image
model = torch.hub.load('ultralytics/yolov5', 'custom', path='models_train/best.pt', force_reload=True) # 커스텀 학습 모델 사용
def input():
if request.method == 'POST':
im_file = request.files['file']
if im_file != '':
im_bytes = im_file.read()
img = Image.open(io.BytesIO(im_bytes))
results = model(img, size=640) # inference 추론
results.ims # array of original images (as np array) passed to model for inference 원본 이미지(np 배열) 추론모델로 보내기
results.render() # updates results.imgs with boxes and labels 이미지에 박스와 라벨 붙이기
for img in results.ims: # 'JpegImageFile' -> bytes-like object
buffered = io.BytesIO()
img_base64 = Image.fromarray(img)
img_base64.save(buffered, format="JPEG")
encoded_img_data = base64.b64encode(buffered.getvalue()).decode(
'utf-8') # base64 encoded image with results
return render(request, 'output.html', {'img_data'=encoded_img_data})
else:
return render(request, "input.html")
문제점
- 이미지 모델이 데이터 테이블에 어떻게 들어가는지? 혹은 들어가지 않아도 되는지?
- img_base64.save로 세이브 된 파일은 어디에 남는지, 데이터가 계속 쌓이는지?
- code runner 터미널 출력중 한글 깨짐 이슈 - 아래 코드로 해결
#-*- coding:utf-8 -*-
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
이것도 아나콘다 연동중 에러인거같은데 아주그냥 트러블메이커여..
내일은 완성된 뼈대에 사물인식을 돌리는 함수를 집어넣고 본격적으로 마무리 작업에 들어갈 것 같다. 문제좀 없었으면 좋겠다~~~