位置: IT常识 - 正文

YOLOv5部署到web端(flask+js简单易懂)(yolo部署到服务器)

编辑:rootadmin
YOLOv5部署到web端(flask+js简单易懂) 文章目录前言最终实现效果图后端实现主界面检测函数检测结果显示前端实现主界面(index1.html)显示图片界面(showimage.html)总结前言

推荐整理分享YOLOv5部署到web端(flask+js简单易懂)(yolo部署到服务器),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolov5移动端部署,yolov5环境搭建win10,yolo部署到服务器,yolov3部署,yolov4部署,yolov5 部署,yolov3部署,yolov5部署到mcu,内容如对您有帮助,希望把文章链接给更多的朋友!

最近,老板让写一个程序把yolov5检测模型部署到web端,在网页直接进行目标检测。经过1个星期的努力,终于实现基本功能👻(累晕了)。网上查阅了很多资料,发现很多的技术比较复杂,当然他们的页面都比较漂亮,然后我打算自己写一篇简单记录一下哈哈。进入正题,该项目完全由Python的轻量级web框架flask完成,其实有一点js代码,简单易懂👍

最终实现效果图

先看项目的效果图吧哈哈,比较辣鸡,但是功能实现了!(后续会优化页面) 检测结果显示:

哈哈 可以看到检测结果还是可以的🤞

后端实现YOLOv5部署到web端(flask+js简单易懂)(yolo部署到服务器)

首先,写了三个路由函数,分别是主界面、检测函数、检测结果显示。如下所示

主界面# 定义路由@app.route('/', methods=['GET', 'POST'])def upload(): if request.method == 'POST': # 从表单中获取上传的文件 f = request.files['file'] global filename filename = f.filename global file_path # 将文件保存到服务器本地 file_path = os.path.join(os.getcwd(), filename) print(file_path) f.save(file_path) # 返回文件路径 # return file_path return render_template('index1.html')检测函数#检测函数@app.route('/det', methods=['GET','POST'])def my_flask_function(): #print('测试一下!') opt = parse_opt() main(opt) # return jsonify({'message': 'Hello from Flask!'}) return render_template('123.html')检测结果显示@app.route('/sh', methods=['GET', 'POST'])def hello_world(): img_path = 'runs\\detect\\exp\\' + str(filename) img_stream = return_img_stream(img_path) return render_template('showimage.html', img_stream=img_stream)#获取图片并展现到前端页面def return_img_stream(img_local_path): """ 工具函数: 获取本地图片流 :param img_local_path:文件单张图片的本地绝对路径 :return: 图片流 """ import base64 img_stream = '' with open(img_local_path, 'rb') as img_f: img_stream = img_f.read() img_stream = base64.b64encode(img_stream).decode() return img_stream

最后,我把detect文件中的函数,parse_out函数直接放到app.py文件中了,因为这样传递图片路径比较方便。其中的main函数直接是调用的detect文件,如下所示:

# 检测图片的def parse_opt(): parser = argparse.ArgumentParser() parser.add_argument('--weights', nargs='+', type=str, default= 'yolov5s.pt', help='model path or triton URL') #parser.add_argument('--source', type=str, default=0, help='file/dir/URL/glob/screen/0(webcam)') parser.add_argument('--source', type=str, default= file_path, help='file/dir/URL/glob/screen/0(webcam)') parser.add_argument('--data', type=str, default= 'models/yolov5s.yaml', help='(optional) dataset.yaml path') parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w') parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold') parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold') parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image') parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') parser.add_argument('--project', default= 'runs/detect', help='save results to project/name') parser.add_argument('--name', default='exp', help='save results to project/name') parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') parser.add_argument('--vid-stride', type=int, default=1, help='video frame-rate stride') opt = parser.parse_args() opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand #print_args(vars(opt)) args = parser.parse_args(args=[]) print(args) return opt

到这里,后端实现就基本写完了。接下来,看看前端页面 很简单,我都不好意思写🙉

前端实现

主要就两个页面,分别是主页面index1.html和showimage.html。

主界面(index1.html)

index1.html就是主界面,显示的一些操作按钮。代码如下:

<!DOCTYPE html><html lang="en"> <head> <title>简单实现</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <h2>选择图片上传检测</h2> <br /> <br /> <img id="imageDisplay" width="500" height="500" /> <br /> <form method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> <br /> <div id="imagePath"></div> <script> function displayImage() { var fileInput = document.getElementById("imageFile"); var imagePath = document.getElementById("imagePath"); var imageDisplay = document.getElementById("imageDisplay"); var file = fileInput.files[0]; var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function (e) { imagePath.innerHTML = "Image Path: " + fileInput.value; imageDisplay.src = e.target.result; }; } function Detect() { $.ajax({ type: 'POST', url: '/det', success: function(response) { console.log(response); }, error: function(error) { console.log(error); } }); } function Show() { var img = document.getElementById('img'); img.src = '/sh'; } </script> <button id="my-button" onclick="Detect()">检测</button> <a href="http://127.0.0.1:5000/sh"> <button id="my-button1" onclick="Show()">显示图片</button> </a> </body></html>显示图片界面(showimage.html)

然后就是 showiamge.html,该页面是在点击显示图片按钮之后,进行跳转,然后显示检测结果的图片。代码如下所示:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>检测结果显示</title></head><body> <img style="width:500px " src="data:;base64,{{ img_stream }}"></body></html>总结

写的比较潦草,代码的功能不难理解,相对比较基础。有什么问题可以在评论直接问。然后就是代码基本上都放上来了,可以直接复制然后用,如果想直接要项目代码,可以私信我(不收任何费用)。 后续会优化前端界面(等有时间了),因为真的太丑了。 ······························· 如果觉得有用,就点点赞哈哈😍

本文链接地址:https://www.jiuchutong.com/zhishi/289641.html 转载请保留说明!

上一篇:Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8(jetson b01 a02)

下一篇:微前端:qiankun的五种通信方式(微前端Qiankun介绍)

  • 网店推广有哪些办法(网店推广有哪些新思维)

    网店推广有哪些办法(网店推广有哪些新思维)

  • iphone13有微距功能吗(苹果13支持微距)

    iphone13有微距功能吗(苹果13支持微距)

  • 微信注销后好友还能看到我吗(微信注销后好友视角)

    微信注销后好友还能看到我吗(微信注销后好友视角)

  • 戴尔g模式可以一直开吗(戴尔g模式持续多久)

    戴尔g模式可以一直开吗(戴尔g模式持续多久)

  • 电脑键盘重启按哪个键(键盘按键重启电脑)

    电脑键盘重启按哪个键(键盘按键重启电脑)

  • beats耳机红白灯交替闪怎么解决(beats耳机红白灯交替闪烁)

    beats耳机红白灯交替闪怎么解决(beats耳机红白灯交替闪烁)

  • 荣耀v30pro后盖是不是磨砂的(荣耀v30pro拆机后盖不紧)

    荣耀v30pro后盖是不是磨砂的(荣耀v30pro拆机后盖不紧)

  • 打印机突然不能打印了是怎么回事(打印机突然不能双面打印)

    打印机突然不能打印了是怎么回事(打印机突然不能双面打印)

  • cad布局视口锁定快捷键(cad布局视口锁定后能不能修改图)

    cad布局视口锁定快捷键(cad布局视口锁定后能不能修改图)

  • wps阅读模式在哪里找(wps阅读模式在哪里设置)

    wps阅读模式在哪里找(wps阅读模式在哪里设置)

  • 有什么东西可以代替触屏笔(有什么东西可以补肾)

    有什么东西可以代替触屏笔(有什么东西可以补肾)

  • 相机是凹透镜还是凸透镜(相机是凹透镜还是直透镜)

    相机是凹透镜还是凸透镜(相机是凹透镜还是直透镜)

  • 发朋友圈如何显示全文(发朋友圈如何显示手机型号)

    发朋友圈如何显示全文(发朋友圈如何显示手机型号)

  • 华为gt2与荣耀magic2区别(华为gt2与荣耀watch2)

    华为gt2与荣耀magic2区别(华为gt2与荣耀watch2)

  • 抖音举报人会查出来吗(抖音举报人会查流水吗)

    抖音举报人会查出来吗(抖音举报人会查流水吗)

  • ppt怎么设置放映方式为观众自行浏览(ppt怎么设置放映顺序)

    ppt怎么设置放映方式为观众自行浏览(ppt怎么设置放映顺序)

  • 华为mate30怎么返回(mate30怎么把返回键设置出来)

    华为mate30怎么返回(mate30怎么把返回键设置出来)

  • 手机qq怎么批量加好友(手机qq怎么批量删除空间说说)

    手机qq怎么批量加好友(手机qq怎么批量删除空间说说)

  • 手机上qq怎么修改密码(手机qq怎么修改个人资料)

    手机上qq怎么修改密码(手机qq怎么修改个人资料)

  • 微信微云在哪里打开(微信里面微云在哪里)

    微信微云在哪里打开(微信里面微云在哪里)

  • 小米9pro支持反向充电吗(小米9pro有没有反向充电)

    小米9pro支持反向充电吗(小米9pro有没有反向充电)

  • 手机微信怎么发原图(手机微信怎么发送超过1个G的视频)

    手机微信怎么发原图(手机微信怎么发送超过1个G的视频)

  • 电脑出现闪屏和雪花屏(电脑闪屏是)

    电脑出现闪屏和雪花屏(电脑闪屏是)

  • 检查手机什么处理器(检查手机都检查什么)

    检查手机什么处理器(检查手机都检查什么)

  • 快手长图封面两张照片怎么做(快手长图封面怎么弄两张照片)

    快手长图封面两张照片怎么做(快手长图封面怎么弄两张照片)

  • 抖音评论区颜色怎么调(抖音评论区颜色代码)

    抖音评论区颜色怎么调(抖音评论区颜色代码)

  • 华为手机还原桌面布局(华为手机还原桌面图标)

    华为手机还原桌面布局(华为手机还原桌面图标)

  • 全民k歌扫一扫在哪里(全民K歌扫一扫怎么从相册选择)

    全民k歌扫一扫在哪里(全民K歌扫一扫怎么从相册选择)

  • 增值税应交税费和申报的不一样怎么调整
  • 个人劳务费怎么交税
  • 从事小额零星经营业务的个人是指
  • 增值税计算为什么是销项减进项
  • 个税系统添加不了新的单位
  • 开具银行资信证明
  • 房产开发后自用需要交土地增值税吗
  • 支付无法取得发票的赔偿金可否税前扣除
  • 会计核算原则主要包括
  • 资产损失税前扣除管理办法2019
  • 以前年度损益调整会计分录
  • 给客户现金回款怎么写
  • 公司的一些党员特别喜欢健身
  • 某企业取得产品销售收入
  • 广告设计制作的技术框架
  • 双倍余额折旧法
  • 软件企业所得税两免三减半
  • 测试费怎么入账
  • 企业支付方式有几种
  • 配件进出库账目怎么做
  • 公司免税是指免的什么税
  • 抵扣给供货商预缴税款
  • 长期闲置的机器叫什么
  • PHP:xml_set_object()的用法_XML解析器函数
  • php多线程怎么实现
  • 无法使用内置管理员账户打开micr
  • 非货币性资产对外投资会计处理
  • win10开机启动文件夹目录说明
  • php r
  • 房屋修理费用
  • 损益类科目有哪些借贷方向
  • vue3的生命周期
  • PHP生成静态页面
  • 建筑业会计需要做到哪些
  • php time
  • 金融商品转让业务包括
  • 防伪税控服务费怎么交
  • php如何实现分页功能
  • 外经证过期没核销罚多少钱
  • 接受专利投资会计科目
  • 以前年度损益调整借贷方向
  • 个体工商户开税户
  • 已经红冲的发票显示正常
  • 织梦前台的菜单怎么换
  • 外商投资企业 外资企业
  • 个税申报哪些可以减免
  • 视同销售收入是纳税调整项目吗?
  • 长期待摊费用待抵扣税金
  • 跨年进项发票怎样账务处理
  • 一般纳税人可以开1%的发票吗
  • 跨期费用账务处理
  • 临时人员是什么
  • 摊销方法如何选择
  • 工资薪金个人所得税扣除标准
  • mysql5.7慢查询
  • 在docker中使用service命令
  • 调整后视镜
  • mysql死锁的情况
  • 猎豹如何添加兼容性站点
  • 局域网 下载
  • hppusg.exe
  • ubuntu静态ip地址
  • centos 网络监控
  • linux禁止root用户远程登录
  • 如何禁用u盘启动项
  • 短链接生成app
  • mongo 安装
  • 有哪些好用的linux
  • Javascript selection的兼容性写法介绍
  • 基于nodejs的项目
  • rhel7.6安装
  • 分页jsp
  • 安卓开发者有多少
  • 详解各种汽油一吨等于多少升
  • js框选
  • jquery给下拉框添加选项
  • 河北省国税局发展前景
  • 车辆购置税是财行税吗
  • 北京国家税务局待遇
  • 国外高速公路收费站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设