๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ž€


ํ”Œ๋ผ์Šคํฌ์˜ ๋ธ”๋ฃจ ํ”„๋ฆฐํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ผ์šฐํŠธ ํ•จ์ˆ˜๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด, ์ƒˆ๋กœ์šด url์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ๋™์ผํ•œ ํ•จ์ˆ˜๋‚ด์— ๊ณ„์† ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋Š” ๋งˆ์น˜ ํด๋” ๋ณ„๋กœ ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๋“ฏ ๋ผ์šฐํŠธ ํ•จ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ธ”๋ฃจ ํ”„๋ฆฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „

from flask import Flask


def create_app():
    app = Flask(__name__)

    @app.route('/')
    def hello_pybo():
        return 'Hello, Pybo!'
    
    return

์ƒˆ๋กœ์šด url์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค create_app ํ•จ์ˆ˜ ๋‚ด์— ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

ํ˜„์žฌ๋Š” hello_pybo ํ•จ์ˆ˜๋ฅผ app.route ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋งคํ•‘ํ•˜์˜€๋‹ค.

 

๋ธ”๋ฃจ ํ”„๋ฆฐํŠธ ์ ์šฉ

 

main_view.py

from flask import Blueprint

bp = Blueprint('main', __name__, url_prefix='/')


@bp.route('/hello')
def hello_pybo():
    return 'Hello, Pybo!'


@bp.route('/')
def index():
    return 'Pybo index'

๊ฐ™์€ ๋ถ„๋ฅ˜์˜ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋งŒ๋“  ๋‹ค์Œ ๋ธ”๋ฃจ ํ”„๋ฆฐํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.

๋ธ”๋ฃจ ํ”„๋ฆฐํŠธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋• ์ด๋ฆ„ , ๋ชจ๋“ˆ๋ช… , url ํ”„๋ฆฌํ”ฝ์Šค ๊ฐ’์„ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.

 

__init__.py

from flask import Flask


def create_app():
    app = Flask(__name__)

    from .views import main_views
    app.register_blueprint(main_views.bp)

    return app

app.register_blueprint() ๋ฅผ ํ†ตํ•ด bp ๊ฐ์ฒด๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ผ์šฐํŠธ ํ•จ์ˆ˜๋“ค์„ ํ•œ ๊ณณ์— ๋ชฐ์•„๋„ฃ๋Š” ๊ฒŒ ์•„๋‹Œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

 

์•ž์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ผ์šฐํŠธ ๊ด€๋ฆฌ ํ•จ์ˆ˜์˜ ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

 

 

 

 

 

์กธ์—…์ž‘ํ’ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ yolov5 ๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ํƒ์ง€ ๊ฒฐ๊ณผ๋ฅผ ๋„์›Œ์ฃผ๋Š” ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•ด์„œ flask ๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ธฐ ์ „์— ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

 

https://github.com/robmarkcole/yolov5-flask/blob/master/requirements.txt

 

GitHub - robmarkcole/yolov5-flask: Official implementation at https://github.com/ultralytics/yolov5/tree/master/utils/flask_rest

Official implementation at https://github.com/ultralytics/yolov5/tree/master/utils/flask_rest_api - GitHub - robmarkcole/yolov5-flask: Official implementation at https://github.com/ultralytics/yolo...

github.com

 

์œ„์˜ ๊นƒํ—ˆ๋ธŒ ๋งํฌ์—์„œ requirments.txt๋ฅผ ๋‹ค์šด ๋ฐ›์•„์„œ  ์„ค์น˜ํ•ด์ฃผ์—ˆ๋‹ค.

 

์„ค์น˜๊ฐ€ ๋๋‚ฌ์œผ๋ฉด, yolov5 ํด๋”์— ๋“ค์–ด์žˆ๋Š” ๋ฉ”๋‰ด์–ผ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„์„ ๊ฝค๋‚˜ ์žก์•„๋จน์—ˆ๋‹ค.

๊ทผ๋ฐ ๊ต‰์žฅํžˆ ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฌ์šด ์˜ค๋ฅ˜์˜€๋‹ค ...

์•ž์œผ๋ก  ์„ค์น˜ํ•  ๋•Œ ๊ฒฝ๊ณ ๋ฌธ๋„ ๊ผผ๊ผผํžˆ ๋ด์•ผ๊ฒ ๋‹ค.

 

https://cb036133.tistory.com/69

 

[flask] The script flask is installed in 'PATH' which is not on PATH. ๊ฒฝ๊ณ ๊ฐ€ ๋œฐ ๋•Œ

ํ”Œ๋ผ์Šคํฌ๋ฅผ ์„ค์น˜ํ•˜๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  flask ๋ฅผ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์˜€์ง€๋งŒ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. ๊ตฌ๊ธ€๋ง ๊ฒฐ๊ณผ ๊ฒฝ๊ณ ๋ฌธ์— ๋‚˜์˜ค๋Š” PATH๋ฅผ ๋“ฑ๋กํ•ด์ค˜์•ผํ•œ

cb036133.tistory.com

 

โ€‹๊ธฐ์กด ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๋ฐ ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

๋ชจ๋ธ์€ custom๋ชจ๋ธ์„ ์“ฐ๊ณ  ๋ชจ๋ธ์ด ๋“ค์–ด์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์—ˆ๋‹ค.

 

์„ค์ •์ด ๋๋‚ฌ์œผ๋ฉด ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค.

 

๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„๋กœ ์ ‘์†ํ•ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

curl -X POST -F image=@pic1001.jpg 'http://localhost:5000/v1/object-detection/yolov5'

์šฐ๋ฆฌ ํŒ€์˜ ๋ชจ๋ธ ์ด๋ฆ„์€ yolov5์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์— yolov5๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

โ€‹์ด๋ ‡๊ฒŒ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด .. !

์ข€ ์ •์‹ ์—†๊ธด ํ•˜์ง€๋งŒ jsonํ˜•์‹์œผ๋กœ xmin , ymin , xmax, ymax, confidence , class, name ๊ฐ™์€ ์ •๋ณด๋“ค์ด ์ž˜ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค.

 

์ด์ œ ์ด๊ฒƒ๋“ค์„ ์ด์šฉํ•ด์„œ ๋ฉ”๋‰ด์–ผ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ๋ฒ•์„ ์—ฐ๊ตฌํ•ด๋ด์•ผ๋  ๊ฒƒ ๊ฐ™๋‹ค 

 

ํ”Œ๋ผ์Šคํฌ๋ฅผ ์„ค์น˜ํ•˜๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  flask ๋ฅผ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์˜€์ง€๋งŒ ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค.

 

๊ตฌ๊ธ€๋ง ๊ฒฐ๊ณผ ๊ฒฝ๊ณ ๋ฌธ์— ๋‚˜์˜ค๋Š” PATH๋ฅผ ๋“ฑ๋กํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

 

export PATH=$PATH:/home/osh/.local/bin

์ด๋ ‡๊ฒŒ ๋“ฑ๋ก์„ ํ•ด์ฃผ๊ณ  ๋‹ค์‹œ flask ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋‹ˆ ์ž˜ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.

+ Recent posts