본문 바로가기

IT/FLASK

[FLASK] 4. 웹 페이지에 동영상 띄우기(+ YOLOv5)

반응형

☞ 운영 체제 : Linux Ubuntu 20.04.5 LTS - focal
☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz
☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU

☞ IDE : Visual Studio Code

☞ Flask : Python 3.8, Flask 2.2.2, Flask-RESTful 0.3.9, Flask-SQLAlchemy 3.0.3

☞ DB : MariaDB 10.6.12

 

 


목차

 1. 이름 규칙

 2. 소스파일

 3. 실행 & 실행 결과

 

 

 


 

 

 

카메라 비전을 이용해 엔진을 개발하다가 갑자기 웹 프레임워크에 대해 학습하게되면서 여러가지 Python 모듈을 접하게 되었다. 또한, 웹에 관련된 내용을 두루두루 알아보면서 다양한 웹 기술에 대해 알아가게되었다. 가면 갈수록 할 것이 많고 개발자들이 모듈로라도 만들어놓지 않았다면 얼마나 많은 학습을 했어야했는지 느껴지기도 한다. 무튼 갑자기 드는 생각이 있어서 적어보았다.

 

 

 

① 이름 규칙

※ Flask API

  • 모듈의 이름: 간결하게 + 소문자 + _(언더바)로 구분 (예시. app.py, config.py models.py)
  • 함수의 이름: 설명을 곁들여서 + 소문자 + _(언더바)로 구분(예시. show_video.py, create_user.py)
  • 경로의 이름: 설명을 곁들여서 + 소문자 + -(하이픈)으로 구분(예시. /video, /video/<int:video_code>)

 

※ DB

  • DB의 이름: 설명을 곁들여서 + 소문자 +_(언더바)로 구분(예시. my_first_db)
  • 테이블의 이름: 설명을 곁들여서 + 소문자 & 복수형 + _(언더바)로 구분(예시. users, posts, videos)
  • Column의 이름: 설명을 곁들여서 + 소문자 + _(언더바)로 구분(예시. user_id, post_title, video_code)
  • Column 중 Primary Key의 이름: id 형식 + integer형 

 

 

※ 레퍼런스

☞ kkkrrr님의 티스토리 블로그 - 데이터베이스 이름 규

 

[rdbms] 7가지 꼭 지켜야할 네이밍 규칙 (naming convention)

공통 1. 이름은 snake case를 따른다. - snake case란 모든 글자를 소문자로 하고, 언더스코어(_)로 단어를 구분해주는 방법이다. ex) userLogin, Name (X) --> user_login, name (O) 2. prefix와 postfix는 사용하지 않는다

killu.tistory.com

 

 

☞ 이상학님의 티스토리 블로그 - RESTful API 설계 가이드

 

RESTful API 설계 가이드

1. RESTful API 설계 가이드본 문서는 REST API를 좀 더 RESTful 하게 설계하도록 가이드할 목적으로 만들어졌다.따라서, 기본적인 REST API 개념 설명은 아래의 링크로 대신한다. REST API 제대로 알고 사용

sanghaklee.tistory.com

 

 

☞ 만능 ChatGPT

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com

 

 


② 소스파일

※ app.py

# app.py
from flask import Flask, render_template, Response
import cv2
import torch

app = Flask(__name__)

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

video_path = "/home/yasun95/workspace/flask/video_on_web/video/web_test2.avi"
cap = cv2.VideoCapture(video_path)

@app.route('/')
def video_show():
    return render_template('video_show.html')

def gen_frames():
    while True:
        _, frame = cap.read()
        if not _:
            break
        else:
            results = model(frame)
            annotated_frame = results.render()
            
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()

        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/video')
def video():
    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == "__main__":
    app.run(debug=True)

 

 

※ templates/video_show.html

<!DOCTYPE html>
<html>
  <head>
    <title>Video Streaming</title>
  </head>
  <body>
    <h1>Video Streaming</h1>
    <img src="{{ url_for('video') }}" width="640" height="480" />
  </body>
</html>

 

 

※ 트리

 

 


③ 실행 & 실행 결과

※ 실행

# Terminal
export FLASK_APP=app
export FLASK_DEBUG=True

flask run

 

 

 

터미널을 통해 환경변수 FLASK_APP과 FLASK_DEBUG를 설정해준다. 영상의 경우 DEBUG 모드가 필요없을 수 있다.(내용을 수정하면 자동으로 실행이 중지되기 때문이다.)

 

FLASK_DEBUG는 어느 버전부터 사용하는지는 모르겠다. 소스파일 내에서 config를 통해 DEBUG 모드를 실행하더라도 터미널에서 OFF로 나와서 인터넷에 찾아보니 FLASK_ENV 환경변수 값으로 development를 추가하라고 했다. 그러나 오히려 flask에서는 FLASK_ENV 말고 FLASK_DEBUG 변수를 사용하라고 했다.

 

말이 길었지만 최근에 flask 설치를 했을 경우 FLASK_DEBUG=True를 통해 모드를 실행하면 된다는 내용이다.

 

환경변수 설정 후 flask를 실행하면 YOLOv5 모델을 다운로드 받고나서 서버를 열기 시작한다.

 

 

model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)

 

 

torch 모듈을 사용하면 모델의 크기도 사용자가 직접 선택할 수 있다.  yolov5s 의 s는 Small을 의미한다. 모델의 크기는 학습된 데이터 크기를 의미하는 것과도 같은데 학습된 데이터의 크기가 크면 클 수록 같은 FPS 값에도 mAP 값이 올라간다. 다만, 데이터가 커질수록 처리시간이 오래걸린다. 예를 들어 yolov5s가 한 프레임을 분석하는데 0.005초 정도 걸리면 yolov5l 모델의 경우 한 프레임 분석에 0.016초 정도를 소모한다. YOLOv5의 모델 사양은 아래의 그림과 블로그 포스트을 참고하기 바란다.

 

 

출처 : https://docs.ultralytics.com/tutorials/train-custom-datasets/

 

 

[디딤돌] 연구 기록 4~5주차 - YOLOv5 탐구

☞ 운영 체제 : Windows 10 Education 64비트 (10.0, 빌드 19043) ☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz ☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU ☞ 설치 목록 ROLO Scipy 1.8.1 YOLOv5 탐구로 건너뛰

95mkr.tistory.com

 

 

 

※ 실행 결과

 

반응형

'IT > FLASK' 카테고리의 다른 글

[FLASK] 3. 간단한 API 만들기  (0) 2023.02.14
[FLASK] 2. DB 생성하기  (0) 2023.02.09
[FLASK] 1. Flask 설치와 실행  (0) 2023.02.06