-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
162a610
commit 1ed8c80
Showing
44 changed files
with
6,626 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
import io | ||
from operator import truediv | ||
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 | ||
|
||
def find_model(): | ||
for f in os.listdir(): | ||
if f.endswith(".pt"): | ||
return f | ||
print("please place a model file in this directory!") | ||
|
||
model_name = find_model() | ||
model =torch.hub.load("WongKinYiu/yolov7", 'custom',model_name) | ||
|
||
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_dir='static') | ||
filename = 'image0.jpg' | ||
|
||
#return redirect('static/image0.jpg') | ||
return render_template('result.html',result_image = filename) | ||
|
||
return render_template('index.html') | ||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
|
||
.body{ | ||
width: 100%!important; | ||
height: 100%!important; | ||
} | ||
.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; | ||
} | ||
|
||
.center_img{ | ||
margin: auto; | ||
width: 100%; | ||
height: auto; | ||
} | ||
|
||
.box { | ||
width: 140px; | ||
height: auto; | ||
float: left; | ||
transition: .5s linear; | ||
position: relative; | ||
display: block; | ||
overflow: hidden; | ||
padding: 15px; | ||
text-align: center; | ||
margin: 0 5px; | ||
background: transparent; | ||
text-transform: uppercase; | ||
font-weight: 900; | ||
} | ||
|
||
.box:before { | ||
position: absolute; | ||
content: ''; | ||
left: 0; | ||
bottom: 0; | ||
height: 4px; | ||
width: 100%; | ||
border-bottom: 4px solid transparent; | ||
border-left: 4px solid transparent; | ||
box-sizing: border-box; | ||
transform: translateX(100%); | ||
} | ||
|
||
.box:after { | ||
position: absolute; | ||
content: ''; | ||
top: 0; | ||
left: 0; | ||
width: 100%; | ||
height: 4px; | ||
border-top: 4px solid transparent; | ||
border-right: 4px solid transparent; | ||
box-sizing: border-box; | ||
transform: translateX(-100%); | ||
} | ||
|
||
.box:hover { | ||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); | ||
} | ||
|
||
.box:hover:before { | ||
border-color: #262626; | ||
height: 100%; | ||
transform: translateX(0); | ||
transition: .3s transform linear, .3s height linear .3s; | ||
} | ||
|
||
.box:hover:after { | ||
border-color: #262626; | ||
height: 100%; | ||
transform: translateX(0); | ||
transition: .3s transform linear, .3s height linear .5s; | ||
} | ||
|
||
button { | ||
padding-top:30px; | ||
color: black; | ||
text-decoration: none; | ||
cursor: pointer; | ||
outline: none; | ||
border: none; | ||
background: none; | ||
} | ||
|
||
.card { | ||
align-items: center; | ||
text-align: center; | ||
box-sizing: border-box; | ||
width: 100%; | ||
max-width: 500px; | ||
height:800px; | ||
padding: 50px; | ||
border-radius: 30px; | ||
position: absolute; | ||
top:0; | ||
bottom: 0; | ||
left: 0; | ||
right: 0; | ||
margin: auto; | ||
background: #e0e0e0; | ||
box-shadow: 20px 20px 60px #bebebe, | ||
-20px -20px 60px #ffffff; | ||
} | ||
|
||
|
||
.btn { | ||
position: relative; | ||
font-size: 17px; | ||
text-transform: uppercase; | ||
text-decoration: none; | ||
padding: 1em 2.5em; | ||
display: inline-block; | ||
border-radius: 6em; | ||
transition: all .2s; | ||
border: none; | ||
font-family: inherit; | ||
font-weight: 500; | ||
color: black; | ||
background-color: white; | ||
} | ||
|
||
.btn:hover { | ||
transform: translateY(-3px); | ||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); | ||
} | ||
|
||
.btn:active { | ||
transform: translateY(-1px); | ||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | ||
} | ||
|
||
.btn::after { | ||
content: ""; | ||
display: inline-block; | ||
height: 100%; | ||
width: 100%; | ||
border-radius: 100px; | ||
position: absolute; | ||
top: 0; | ||
left: 0; | ||
z-index: -1; | ||
transition: all .4s; | ||
} | ||
|
||
.btn::after { | ||
background-color: #fff; | ||
} | ||
|
||
.btn:hover::after { | ||
transform: scaleX(1.4) scaleY(1.6); | ||
opacity: 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> | ||
<style> | ||
.bd-placeholder-img { | ||
font-size: 1.125rem; | ||
text-anchor: middle; | ||
} | ||
|
||
@media (min-width: 768px) { | ||
.bd-placeholder-img-lg { | ||
font-size: 3.5rem; | ||
} | ||
} | ||
</style> | ||
<link rel="stylesheet" href="/static/style.css"> | ||
|
||
<title>Flask App using Yolov7 models</title> | ||
</head> | ||
<body class="text-center"> | ||
|
||
<form class="form-signin card" method=post enctype=multipart/form-data> | ||
<img class="mb-4" src="https://avatars.githubusercontent.com/u/85395001?v=4" alt="" width="120" style="border-radius:50%"> | ||
<h1 class="h3 mb-3 font-weight-normal">Upload Any Images</h1> | ||
<input type="file" name="file" class="form-control-file" id="inputfile"> | ||
<br/> | ||
<button> | ||
<span class="box"> | ||
Upload! | ||
</span> | ||
</button> | ||
<p class="mt-5 mb-3 text-muted">Built using Pytorh and Flask, redesigned by Michael</p> | ||
</form> | ||
<script src="//code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> | ||
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> | ||
<script src="//stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> | ||
<script type="text/javascript"> | ||
$('#inputfile').bind('change', function() { | ||
let fileSize = this.files[0].size/1024/1024; // this gives in MB | ||
if (fileSize > 1) { | ||
$("#inputfile").val(null); | ||
alert('file is too big. images more than 1MB are not allowed') | ||
return | ||
} | ||
|
||
let ext = $('#inputfile').val().split('.').pop().toLowerCase(); | ||
if($.inArray(ext, ['jpg','jpeg']) == -1) { | ||
$("#inputfile").val(null); | ||
alert('only jpeg/jpg files are allowed!'); | ||
} | ||
}); | ||
</script> | ||
</body> | ||
|
||
<!-- Github Ribbon Start--> | ||
<a href="https://github.com/Michael-OvO/Yolov7-Flask" class="github-corner"><svg width="160" height="160" viewBox="0 0 250 250" style="fill:#0E2E3B; color:#FFFFFF; position: absolute; top: 0; border: 0; right: 0;"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> | ||
<!-- Github Ribbon End--> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<!doctype html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> | ||
<style> | ||
.bd-placeholder-img { | ||
font-size: 1.125rem; | ||
text-anchor: middle; | ||
} | ||
|
||
@media (min-width: 768px) { | ||
.bd-placeholder-img-lg { | ||
font-size: 3.5rem; | ||
} | ||
} | ||
</style> | ||
<link rel="stylesheet" href="/static/style.css"> | ||
|
||
<title>Image Prediction using PyTorch</title> | ||
</head> | ||
<body class="text-center"> | ||
<form class="form-signin card" method=post enctype=multipart/form-data> | ||
<img class="mb-4" src="https://avatars.githubusercontent.com/u/85395001?v=4" width="120" style="border-radius:50%"> | ||
<h1 class="h3 mb-3 font-weight-normal">Prediction:</h1> | ||
<img class="mb-4 center_img" src= {{ url_for('static', filename= result_image ) }} alt="User_Image" width="100"> | ||
|
||
<button class="btn"> Test Another Image </button> | ||
<p class="mt-5 mb-3 text-muted">Built using Pytorh and Flask, redesigned by Michael</p> | ||
</form> | ||
|
||
<script src="//code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> | ||
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> | ||
<script src="//stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> | ||
<script src="/static/script.js"></script> | ||
|
||
<p>The image is saved in static/image0.jpg. Note that after an new inference, the result from the last run will be erased.</p> | ||
</body> | ||
|
||
<!-- Github Ribbon Start--> | ||
<a href="https://github.com/Michael-OvO/Yolov7-Flask" class="github-corner"><svg width="160" height="160" viewBox="0 0 250 250" style="fill:#0E2E3B; color:#FFFFFF; position: absolute; top: 0; border: 0; right: 0;"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style> | ||
<!-- Github Ribbon End--> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# init |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Oops, something went wrong.