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

22. 10. 19(모달창, 오류페이지)

by 수쨔앙 2022. 10. 22.

프로젝트 3일차!

프로젝트 기간이 짧은 만큼 기한을 지키는게 중요하다고 판단이되어 오늘 오전까지 맡은 기능을 다 구현하기로 했었다.

내가 맡은 기능은 어제 전부 구현을 했다!

다른 팀원이 내가 구현한 업로드 기능과 연결할 결과페이지를 만들어주셔서 연결시키니 그럴듯한 모양새가 나왔다!

 

그래서 오늘은 다른 추가적으로 내가 할 수 있는 기능들을 찾아서 해봤다.

 

1. home 프론트 수정

home 화면이 프론트가 좀 부족해보여 다른 부트스트랩 템플릿을 가져와 깔끔하게 바꿨고

 

2. home 위젯 추가

home 화면에서 신청내역으로 바로 이동할 수 있는 side widget을 추가하고

 

3.신청금액 모달창 추가

다른 분이 관리자페이지에서 신청내역을 승인하면 홈화면에 신청 사진이 나오게 구현해주셨는데 아래 버튼을 만들어서 버튼을 누르면 모달창으로 신청금액을 바로 확인할 수 있도록 구현해봤다. 

 

4. 삭제기능 추가

home 화면에서 내가 신청한 내역을 삭제할 수 있도록 삭제기능을 만들었는데 팀원들이랑 의견을 나눈 결과 홈화면에서는 관리자가 승인한 내역만 보이게 하고, 승인된 내역은 삭제를 못하게 하기로해서 승인내역페이지에서 승인되기 전 내역만 삭제할 수 있도록 바꾸었다!

 

5. 오류페이지 기능 추가

1) 신청페이지에서 input_num과 people_num이 일치하지 않을 때 나오는 오류페이지를 만들자

2) 욜로가 인식한 사람을 네모로 표시한 이미지를 반환하는 rectangle_image함수 만들자

3) 업로드 버튼을 누르면 rectangle_image함수를 호출하여 write_image로 저장하자

4) write 이미지를 오류페이지에 보여주자

5) 욜로의 잘못인경우 오류를 신고할 수 있도록 오류신고 버튼을 만들어주자

 


3. 신청금액 모달창 추가

지난 프로젝트 때 다른분이 구현을 했던 기능인데 이번엔 내가 구현을 해볼 수 있어서 좋았다.

html에서만 코드를 작성해주면 됐다.

script 한 줄 추가해주고 버튼에 modal을 주면 됐다!

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js" integrity="sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf" crossorigin="anonymous"></script>




<!-- Button trigger modal -->
<div class="btn-box">
    <button type="button" class="btn btn-dark" data-bs-toggle="modal" data-bs-target="#exampleModal{{my_image.id}}">
        <span class="material-symbols-outlined">지원금액 확인하기</span>
    </button>
</div>
<!-- 지원금 확인하기 Modal -->
<div class="modal fade" id="exampleModal{{my_image.id}}" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">지원금액 확인하기</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                {{ my_image.team_name.team_name }}팀의 지원금액은 {{ my_image.people_num|mul:5 }} (만원) 입니다
            </div>
            <div class="modal-footer">
                <div class="d-grid gap-2 d-md-flex justify-content-md-end">
                    <button type="button" class="btn btn-light" data-bs-dismiss="modal">
                        <span class="material-symbols-outlined">close</span>
                    </button>
                </div>
            </div>
        </div>
    </div>
</div>

 

 

5. 오류페이지 기능 추가

1) 신청페이지에서 input_num과 people_num이 일치하지 않을 때 나오는 오류페이지를 만들자

{% extends 'base.html' %}
{% block title %}error{% endblock %}
{% block content %}
<!-- Product section-->
<section class="py-5">
    <div class="container px-4 px-lg-5 my-5">
        <form method="post" action="/upload/" enctype="multipart/form-data">
            {% csrf_token %}
            <div class="row gx-4 gx-lg-5 align-items-center">
                <div class="col-md-6">
                    <img class="card-img-top mb-5 mb-md-0" src="" alt="..." id="img" />
                </div>
                <div class="col-md-6">
                    <h1 class="display-5 fw-bolder">{{ user.team_name }} 회식비 신청 오류</h1>
                    <div class="fs-5 mb-5">
                        <span></span>
                    </div>
                    <div class="card" style="width: 30rem; border-color: aliceblue;">
                        <div class="card-body">
                            <h5 class="card-title">오류입니다!</h5>
                                <br>
                            <p class="card-text">아래가 오류의 원인이 될 수 있습니다
                                <br> 1. 인원 수 오기입
                                <br> 2. 머신러닝 오작동
                                <br>
                            <br> 오류의 원인을 확인하시어 
                            <br> 1번일 경우 다시 신청 해주시고, 2번일 경우 오류 신청을 해주세요!
                            <br> 머신러닝 오작동일 경우 관리자가 확인 후 승인해 드립니다
                        </p>
                        </div>
                    </div>
                    <table class="table" style="margin-top: 30px;">
                        <thead>
                        </thead>
                        <tbody>
                            <tr>
                                <th scope="row"> 입력한 인원 수</th>
                                <td>{{ my_image.input_num }}</td>
                            </tr>
                            <tr>
                                <th scope="row"> 카운트 된 수</th>
                                <td>{{ my_image.people_num }}</td>
                            </tr>
                        </tbody>
                    </table>
                    
                    
                </div>
            </div>
    </div>
    </form>
    </div>
</section>

{% endblock %}

 

2) 욜로가 인식한 사람을 네모로 표시한 이미지를 반환하는 rectangle_image함수 만들자

def rectangle_image(image,write_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']

    tmp_img = cv2.imread(settings.BASE_DIR/image[1:])
    for j in range(len(result)):
        cv2.rectangle(tmp_img, (int(results.xyxy[0][j][0].item()), int(results.xyxy[0][j][1].item())), (int(results.xyxy[0][j][2].item()), int(results.xyxy[0][j][3].item())), (255,255,255))
    cv2.imwrite(settings.BASE_DIR/write_image[1:], tmp_img)
    return tmp_img

 

3) 업로드 버튼을 누르면 rectangle_image함수를 호출하여 write_image로 저장하자

# 머신러닝 코드 불러오기
my_image.people_num = transform_image(my_image.image.url)
rectangle_image(my_image.image.url,my_image.write_image.url)
my_image.save()
if int(input_num) == my_image.people_num:
    return redirect(f'/result/{my_image.id}/')
else:
    return redirect(f'/error/{my_image.id}/')

 

4) write 이미지를 오류페이지에 보여주자

<img class="card-img-top mb-5 mb-md-0" src="{{my_image.write_image.url}}" alt="..." id="img" />

 

5) 욜로의 잘못인경우 오류를 신고할 수 있도록 오류신고 버튼을 만들어주자

<div style="text-align:center; margin-top: 30px;">
    <button class="btn btn-outline-dark flex-shrink-0" type="submit">
        <a href="/upload" style="text-decoration: none; color: inherit;">다시 신청하기</a>
    </button>

    <button class="btn btn-outline-dark flex-shrink-0" type="submit">
        <a href="/my_objection/{{ my_image.id }}" style="text-decoration: none; color: inherit;">오류 신고하기</a>
    </button>
</div>
728x90

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

22. 10. 21 (발표, KPT 회고)  (0) 2022.10.24
22. 10. 20  (0) 2022.10.24
22. 10. 18 (머신러닝 작성하고 호출하기)  (0) 2022.10.22
22. 10. 17  (0) 2022.10.22
회식비 신청 사이트 만들기 프로젝트 S.A.  (0) 2022.10.22

댓글