☞ 운영 체제 : 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. 소스파일
카메라 비전을 이용해 엔진을 개발하다가 갑자기 웹 프레임워크에 대해 학습하게되면서 여러가지 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의 모델 사양은 아래의 그림과 블로그 포스트을 참고하기 바란다.
[디딤돌] 연구 기록 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 |