코딩일지/TIL: Today I Learned

20221018 TIL

야언 2022. 10. 18. 21:03

오늘의 한일

  • 사물인식 프로젝트

 

사물 인식 프로젝트

 

 

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뿐이라 슬라이싱으로 적당히 처리할 수 있었지만 글자수가 다른게 추가로 붙는다던가, 

당장도 영문명으로만 존재하는데 이를 한글명으로 표시하고 싶은 경우엔 어떻게 해야하나 고민을 좀 해보며 구글링을 돌려보다가 괜찮은 방법을 찾았다.

 

https://youtu.be/cM2F_JN_eHo

 

2분 44초부터

 

이처럼 csv파일을 사용해 데이터를 추가해 준다던가 혹은 yaml파일을 내가 원하는대로 수정한다던가 하는 여러 방식으로 표현해볼 수 있을 것 같다.

 

덤으로 구글 검색 src에 해당 이름을 붙여 링크해 추가 정보를 주는 방식을 생각해보았는데 이건 다른 조원분들이 크롤링을 활용해서 방법을 찾아보고 있으므로 보류.

iframe을 이용해 구글 검색창을 웹페이지 안에 띄울 수 있으면 좋았겠는데, 인터넷 정책상 같은 서버의 페이지 말고는 frame 형식으로 접근할 수 없게 되었다고 한다.. 예전엔 그런 창이 많았던거같은데 어쩐지 이젠 안보이더라

 

대신 구글 검색엔진을 집어넣는 기능이 있길래 참조하면 좋을것 같아 공유했다

 

https://pythonblog.co.kr/blog/45/

 

45 장고에 구글 검색엔진 기능 추가

[구글 맞춤검색 사이트](https://cse.google.com/cse/create/new){:target=_blank} 사이트에 구글검색 기능을 추가하겠습니다. 구글 맞춤검색 또는 애드센스의 광고단위에서 검색엔진 추가하여 partne

pythonblog.co.kr

 

 

 

마지막으로 아직 프로젝트 뼈대 구성이 작성되지 않아서 적당히 코드를 구상해 보았다.

 

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')

이것도 아나콘다 연동중 에러인거같은데 아주그냥 트러블메이커여..

 

내일은 완성된 뼈대에 사물인식을 돌리는 함수를 집어넣고 본격적으로 마무리 작업에 들어갈 것 같다. 문제좀 없었으면 좋겠다~~~