温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

YOLOv5部署到web端的方法是什么

发布时间:2023-04-26 11:02:55 来源:亿速云 阅读:118 作者:iii 栏目:开发技术

今天小编给大家分享一下YOLOv5部署到web端的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

后端实现

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

主界面

# 定义路由
@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>
    <h3>选择图片上传检测</h3>
    <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  src="data:;base64,{{ img_stream }}">
</body>
</html>

以上就是“YOLOv5部署到web端的方法是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI