본문 바로가기
프로젝트/머신러닝 프로젝트

22. 10. 18 (머신러닝 작성하고 호출하기)

by 수쨔앙 2022. 10. 22.

프로젝트 2일차!

내가 맡은 기능은 이미지를 업로드해서 욜로로 이미지 속의 사람 수를 인식하고 입력한 인원 수와 욜로가 인식한 인원수를 비교하여 오류페이지를 보여주거나 신청완료 페이지를 보여주는 것이다.

 

어제 이미지를 업로드해서 저장하는 기능까지 끝냈기 때문에 

이제 그 이미지를 업로드 했을 때 욜로를 실행시켜서 인원 수를 인식하여 저장하여

결과 페이지를 보여주게 하였다.

 

먼저 DB에 이미지가 저장이 되고,
그 저장된 이미지를 불러와서 머신러닝 파일로 돌려서 사람수를 같이 저장해준다

 

1. 머신러닝 파일 작성(불러온 이미지를 돌려서 결과값 반환하기)

사람을 인식하여 사람수를 반환하는 함수 작성

view.py에서 POST로 업로드했을 때 저장된 이미지를
machine.py의 함수로 불러와서 함수를 실행시켜 인원수를 리턴으로 받아주고 그걸 같이 DB에 저장해준다. 

 

2. view.py가 실행될 때 machine.py 함수 불러오기
machine.py에서 함수로 불러올 수 있게 사람을 인식할 수 있는 코드를 함수로 만들어 준다.  이때 업로드를 했을 때 사람 수를 리턴으로 받아준다

3. 일치여부 확인하기
입력한 인원수와 받아온 인원수를 비교해서 일치하면 결과창으로, 일치하지않으면 에러창으로 보내주자

 

 

그리고 회원가입 페이지의 에러창 등 자잘한 기능을 수정하였다.

 


1. 머신러닝 파일 작성(불러온 이미지를 돌려서 결과값 반환하기)

 

일단 requirements.txt에 설치파일 작성하고 pip install -r requirements.txt로 설치!

support_data 앱 안에 machine.py 만들고 작성하자

import ssl
ssl._create_default_https_context = ssl._create_unverified_context
import torch
import cv2
from django.conf import settings 


# yolov5 깃헙 저장소에서 모델을 로드
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

# 사람 수 세어주는 함수
def transform_image(image):
    img = cv2.imread(settings.BASE_DIR/image[1:])

    results = model(img)
    result = results.pandas().xyxy[0].to_numpy()
    result = [item for item in result if item[6]=='person']

    return len(result)

여기서 불러오는 이미지의 경로를 잘 설정해줘야한다

view의 upload 함수에서 POST로 image에 저장시키고 이 함수를 불러올 것이기 때문에

media의 images에 저장된 이미지를 불러오는 것이다.

 

그래서 settings.py에서 설정을 해주어야한다.

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATIC_URL 아래에 STATIC_ROOT를 추가해줘야한다.

 

 

2. view.py가 실행될 때 machine.py 함수 불러오기

from support_data.machine import transform_image


# machine.py의 transform_image 함수 불러오기
        my_image.people_num = transform_image(my_image.image.url)
        my_image.save()
        return redirect('/')

 

3. 일치여부 확인하기

# machine.py의 transform_image 함수 불러오기
        my_image.people_num = transform_image(my_image.image.url)
        my_image.save()
        if int(input_num) == my_image.people_num:
            return render(request,'support_data/result.html')
        else:
            return render(request,'support_data/error.html')

 

 

728x90

'프로젝트 > 머신러닝 프로젝트' 카테고리의 다른 글

22. 10. 21 (발표, KPT 회고)  (0) 2022.10.24
22. 10. 20  (0) 2022.10.24
22. 10. 19(모달창, 오류페이지)  (0) 2022.10.22
22. 10. 17  (0) 2022.10.22
회식비 신청 사이트 만들기 프로젝트 S.A.  (0) 2022.10.22

댓글