Python+Flask编写一个简单的行人检测API
作者:FriendshipT 发布时间:2023-09-26 17:55:19
标签:Python,Flask,行人,检测
前提条件
1.了解Python语言,并会安装第三方库
2.了解Python Web Flask框架
3.了解PyTorch深度学习框架
实验环境
Python 3.6.2
PyTorch 1.7.1
Flask 1.1.1
Numpy 1.18.5
Opencv 3.4.2
PIL pip3 install pillow
项目结构
相关说明:
static:用于存储静态文件,比如css、js和图片等
templates:存放模板文件
upload:用于保存上传文件
flask_app.py: 应用程序主文件
predict.py:预测文件
主要代码
完整代码,暂时没空整理,如整理完,后续会发布,敬请期待!
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import imp
from flask import request, jsonify, send_from_directory, abort
from werkzeug.utils import secure_filename
from flask import Flask, render_template, jsonify, request
from predict import pre
import time
import os
import base64
app = Flask(__name__)
UPLOAD_FOLDER = 'upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
basedir = os.path.abspath(os.path.dirname(__file__))
ALLOWED_EXTENSIONS = set(['txt', 'png', 'jpg', 'xls', 'JPG', 'PNG', 'xlsx', 'gif', 'GIF'])
# 用于判断文件后缀
def allowed_file(filename):
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
# 上传
@app.route('/upload')
def upload_test():
return render_template('upload.html')
@app.route("/api/download/<filename>", methods=['GET'])
def download(filename):
if request.method == "GET":
if os.path.isfile(os.path.join('upload', filename)):
return send_from_directory('upload', filename, as_attachment=True)
abort(404)
# 上传文件
@app.route('/api/upload', methods=['POST'], strict_slashes=False)
def api_upload():
file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])
if not os.path.exists(file_dir):
os.makedirs(file_dir)
f = request.files['myfile'] # 从表单的file字段获取文件,myfile为该表单的name值
if f and allowed_file(f.filename): # 判断是否是允许上传的文件类型
fname = secure_filename(f.filename)
print(fname)
ext = fname.rsplit('.', 1)[1] # 获取文件后缀
unix_time = int(time.time())
new_filename = str(unix_time) + '.' + ext # 修改了上传的文件名
f.save(os.path.join(file_dir, new_filename)) # 保存文件到upload目录
img_path = os.path.join("upload", new_filename)
print(img_path)
pre_result = pre(img_path)
print(pre_result)
token = base64.b64encode(new_filename.encode('utf-8'))
print(token)
return jsonify({"code": 0, "errmsg": "OK", "token": token, "fileName": "/api/download/" + new_filename,"detect_result:":pre_result})
else:
return jsonify({"code": 1001, "errmsg": "ERROR"})
if __name__ == '__main__':
app.run(host="0.0.0.0",port="5000",threaded=True,debug=False)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link href="{{url_for('static', filename='obj_classification.css')}}" rel="external nofollow" rel="stylesheet" type="text/css" />
<title>图片识别--Person</title>
</head>
<body>
<h1>图片识别--Person</h1>
<div class="container">
<div class="choose">
<form action="http://IP地址:5000/api/upload" enctype='multipart/form-data' method='POST'>
<input type="file" name="myfile" class="input-new" style="margin-top:20px;" />
<input type="submit" value="识别图片" class="button-new" style="margin-top:15px;" />
</form>
</div>
<div class="display">
<img src="{{ url_for('static', filename='images/test.jpg',_t=val1) }}" width="400" height="500" alt="图片" />
</div>
</div>
</body>
</html>
运行结果
{
"code": 0,
"detect_result:": [
{
"bbox": [
51.0,
265.0,
543.0,
437.0
],
"class": "b'person 0.78'"
},
{
"bbox": [
43.0,
433.0,
543.0,
609.0
],
"class": "b'person 0.77'"
},
{
"bbox": [
44.0,
133.0,
543.0,
309.0
],
"class": "b'person 0.76'"
},
{
"bbox": [
46.0,
526.0,
543.0,
665.0
],
"class": "b'person 0.74'"
},
{
"bbox": [
107.0,
51.0,
525.0,
181.0
],
"class": "b'person 0.62'"
}
],
"errmsg": "OK",
"fileName": "/api/download/1645974252.jpg",
"token": "MTY0NTk3NDI1Mi5qcGc="
}
来源:https://blog.csdn.net/FriendshipTang/article/details/123172225


猜你喜欢
- 最近开发了一个网站,大量采用了html5和css3,希望用户都以webkit内核打开页面,但是测试却发现360的以ie内核打开为推荐模式,不
- 本篇文章主要是由于计划使用django写一个计划任务出来,可以定时的轮换值班人员名称或者定时执行脚本等功能,百度无数坑之后,终于可以凑合把这
- 本文实例讲述了Python树莓派学习笔记之UDP传输视频帧操作。分享给大家供大家参考,具体如下:因为我在自己笔记本电脑上没能成功安装Open
- 当下,C#与Python都是比较热门的计算机编程语言,他们各有优缺点,如果能让他们互相配合工作,那是多么美好的事情,今天我来讲解一下如何利用
- 方法一使用Python中的内置函数isupper()和islower()来判断一个字母是否为大写或小写字母。# 获取用户输入letter =
- SQL2005安装安装步骤安装Microsoft SQL Server 2005 数据库步骤:第一步:将Microsoft SQL Serv
- 高能预警本文包含演示部分,请读者自行copy代码编译体验。参考资料:sync.WaitGroup / signal.Notify / con
- 一般情况下,tensorflow里面变量初始化过程为: #variables ........... #......
- 有两种方法当知道字典的键时:unit_rooms={ 3:{301:[1,80],302:[1,80],303:[2,90],304:[2,
- 一、序言本文承接[Mybatis缓存体系探究],提供基于MybatisPlus技术可用于生产环境下的二级缓存解决方案。1、前置条件掌握MyB
- 本文实例讲述了python读写ini配置文件方法。分享给大家供大家参考。具体实现方法如下:import ConfigParserimport
- 1. 前缀索引与全部索引概念怎么给字符串字段加索引?现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨
- 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。Traits 是一种为类似 PHP 的单继承语言而准备的代
- oblog 推出了4.0的最新版本,这个不是重点,重点是4.0的版本中附带了xml-rpc支持。oblog的支持代表着大量的国内blog站点
- 场景:购物车增加商品数量同时更新bridge标志上的总商品个数,如果只是加上当前变化后的数量的话则之前原有的数量会被重新添加一遍造成计算错误
- 之前用Class类来搭建神经网络class Neuro_net(torch.nn.Module): ""&q
- 1. defer的简单介绍与使用场景defer是Go里面的一个关键字,用在方法或函数前面,作为方法或函数的延迟调用。它主要用于以下两个场景:
- Python中多线程使用到Threading模块。Threading模块中用到的主要的类是Thread,我们先来写一个简单的多线程代码:#
- 使用Python编写探测WAF指纹脚本,再结合到Sqlmap中,这样以后再探测网站时,如果识别到此WAF指纹,就会显示出来。编写探测识别WA
- 某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。准备爬的历