From fb347c99d48261d0042e1d38a3d4f8afc3616107 Mon Sep 17 00:00:00 2001 From: jzhang533 Date: Wed, 9 Dec 2020 10:03:37 +0800 Subject: [PATCH] initial commit --- LICENSE | 21 +++++++++++++++++ README.md | 19 +++++++++++++++ app.py | 41 +++++++++++++++++++++++++++++++++ static/pytorch.png | Bin 0 -> 11416 bytes static/style.css | 29 +++++++++++++++++++++++ templates/index.html | 52 ++++++++++++++++++++++++++++++++++++++++++ templates/result.html | 39 +++++++++++++++++++++++++++++++ 7 files changed, 201 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app.py create mode 100644 static/pytorch.png create mode 100644 static/style.css create mode 100644 templates/index.html create mode 100644 templates/result.html diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9bb6253 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 jzhang533 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ab2b002 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# deploy a yolov5 model using pytorch + flask + +## start + +```bash +$ FLASK_ENV=development FLASK_APP=app.py flask run +``` +then, visit http://localhost:5000/ in your browser + +## environments + +- pytorch >= 1.6 +- flask +- pillow + +## reference +- https://github.com/ultralytics/yolov5 +- [Load YOLOv5 from PyTorch Hub ](https://github.com/ultralytics/yolov5/issues/36) +- https://github.com/avinassh/pytorch-flask-api-heroku diff --git a/app.py b/app.py new file mode 100644 index 0000000..955fa83 --- /dev/null +++ b/app.py @@ -0,0 +1,41 @@ +import io +import os +import json +from PIL import Image + +import torch +from flask import Flask, jsonify, url_for, render_template, request, redirect + +app = Flask(__name__) + +RESULT_FOLDER = os.path.join('static') +app.config['RESULT_FOLDER'] = RESULT_FOLDER + +model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).autoshape() # for PIL/cv2/np inputs and NMS +model.eval() + +def get_prediction(img_bytes): + img = Image.open(io.BytesIO(img_bytes)) + imgs = [img] # batched list of images + +# Inference + results = model(imgs, size=640) # includes NMS + return results + +@app.route('/', methods=['GET', 'POST']) +def predict(): + if request.method == 'POST': + if 'file' not in request.files: + return redirect(request.url) + file = request.files.get('file') + if not file: + return + + img_bytes = file.read() + results = get_prediction(img_bytes) + results.save() # save as results1.jpg, results2.jpg... etc. + os.rename("results0.jpg", "static/results0.jpg") + + full_filename = os.path.join(app.config['RESULT_FOLDER'], 'results0.jpg') + return redirect('static/results0.jpg') + return render_template('index.html') diff --git a/static/pytorch.png b/static/pytorch.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d4d876d9134848dcdc7ed9743020160d6e247c GIT binary patch literal 11416 zcmXY1by!s2(?_YL8aK@5v043C8bM1>5y7L5a|YKX;zx0V@ZJ(TFromj|IUX|Id>H2$9vjfo@*<+J>iz5tPY83p7F1Rfg^;_JB zaBcsI1ZjWmpQvBi6KMD5nhuXdunYJfM}G?DX=^^kA|zp@ii{Mt^vpbZA1iC{NZEVz zEnM;OqbR}5hlcvPTH&&i1;h`)!NAgz@DB+ip!=_7w}Pi|DIw$@ixQqKb{v!^OT~=T z|Bsyx2YNwdc=E5j|M7X!)3f(nselJHEU~cQS<~SQq|JXC#HRK{q=(C`aH7XN3j8WV z1HL04D?21{?fu9HxFBtQeep5%o>p8b!JL={3oD7Pqu~Ds0m#Q{VXY;M_Ao!PB?-sA zDi--q7Ns7_963ABNQFy)=h?xds3B$V*9VO8{}Vf;^c9xu6CwtW|0!Ffow3TYv))Eg z{-3BtL>LS!yrNsU)8%m}wSEb8jR@quq>y>?zj>0dkB3aYio-tr_}EEe7MMg|{Qwx?`NuoYPo@;i*Q|7bJ#e#F3w; z5bGmi?y7s$^1&gD5Pm@48juzjUpiH}>ENk=Wh1=%5X3kL#{<`K-ntUz)1ZG#4R`wy zp>2!6lwTmD*j{JVx+%&4`p-g*+$_rqe*H%|7;~YR?l{tG#0P)zvj@{=7lR?!^X!NJ zSv1s0BbFZ^Y+tQ!ERQ9d%7G4ZAJx^iN4!?-pT#>IG|_{Le**V{ z7aqax>2?W%JeD0Vnk!R_l3a=mo_f}bmSYv3q!cAg?xza!bqa$YD( z*je7GHs%GsDa-oF$eq!AI}H{T9vnd(EA9C3*As!zXlQvU3-&jiiA3ZeD|u+l>SPxn zpMWrSg+`ha;TMb}zwo#v_gUV0~TH)prKRJL`dLTLeXJadAM*~kGYrKE7)RB%3 zE5FRc9k#E{e7^6uym_Hpd6n3fCcp=4s)%;7D`bK7PP|gJWI_0ipMz{ zT6}J*tOEWnnfjOfZmaGFo>d4iY6vVg9Tl)Pi2Mgyd(ahN=J;Pk`b9XZqCFtK6dQFY|AoM~>TEEx6&p(LfJv z!jgeZ5LSC?!s%I?b@^1y2f-TD!4ED8jfTFlxmt9yVeNkXyI>N%DdXJIscQdhoudtB0I_NP=UMyDA#lnk4$YtIwSer{nX1o6xwqRosiLWP$*?cTX z^tHc-3X?(l81=i8VF(*P>z--Pl?es&`yP~`zNz1Iti@#L$dpINHkkjDl78ygoE3^= z$xmVQfDU1?|M)%Uilf7JQ$}1;mTIw9^+Iql|D6fKc{Kig#`CBq`R>vU-}&qt%X@o6 zr8SLzac^sBUj2y6yAEYu>~ulC5V zLLK_{owhCdmr58(=boq|>8rshn4=jty8eINXS~iVW3{Zl?N`%F$3iDxRJhIxo5Uy> zcNY-I7C_*KcSY%h$4*S8`F#BrMERL4W~)_Wr*uGnX^5OaVUTS7vE=eiXBl0qc+&?O zKZHrJBlEGdP~c9f(W{Q|(`VmxW7kZCyYV|zTJ^87`CmjgO`8K`yKU#@|D`D`{TbH)q9`ev1M0caruOQ|dmN2!QvNgPr{P z;qlWP;(TxT^XZ#{z~N#RA>(%_+m=N-gO86gPjlpp#Ko`|;&O4$!cj}Rc0kPDRtFmw zvDdw+YFzswGI!%Y==hnBqV%c7gU*tG{#+Ezb>NPFE&}yackz-g z^R3NrO3N`u?$W$^o5rg5>t1BL2o2vr_sIQ=>bS0Ng&|A%7rW6Ax08IACa#JkxmO@L zwde$|877Nw-CWmU9qR{vVH(Fl6QH0Y;p-BVH-8(1m5)WlKvy4B3B3N*YaCcoY6
    ^So8%v#E0<%7=PJA~Yy0h~KIb7blli40B+i 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 Yrp?%`H@9`DYGO1sWi6#z1#9sC0g-PICjbBd literal 0 HcmV?d00001 diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..db5294a --- /dev/null +++ b/static/style.css @@ -0,0 +1,29 @@ +html, +body { + height: 100%; +} + +body { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + padding-top: 40px; + padding-bottom: 40px; + background-color: #f5f5f5; +} + +.form-signin { + width: 100%; + max-width: 330px; + padding: 15px; + margin: auto; +} + +.form-signin .form-control { + position: relative; + box-sizing: border-box; + height: auto; + padding: 10px; + font-size: 16px; +} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..39abaff --- /dev/null +++ b/templates/index.html @@ -0,0 +1,52 @@ + + + + + + + + + + yolov5 object deteection using PyTorch + + + + + + + + + diff --git a/templates/result.html b/templates/result.html new file mode 100644 index 0000000..1948c73 --- /dev/null +++ b/templates/result.html @@ -0,0 +1,39 @@ + + + + + + + + + + Image Prediction using PyTorch + + + User Image + + + + + + + + +