当前位置: 首页 > news >正文

yolo v8 + flask部署到云服务器,以及问题记录

环境安装

1、运行项目报错:no python application found, check your startup logs for errors

在云服务器pytorch版本安装错了,安装了GPU版本,需要安装CPU版本

# CPU only 使用下面这段代码避免出现第二个错误
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cpu

2、运行项目报错:RuntimeError: operator torchvision::nms does not exist

检查发现pytorch中torchvision版本不匹配:

卸载重装对应匹配版本:

# CPU only
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cpu

3、后端python文件编写,涉及到读写文件、模型预测、以及获取结果分析,转换yolo预测结果为指定的json格式数据。

import os
import numpy as np
import torch.hub
#导入Yolov8,需要提前安装ultralytics库
from ultralytics import YOLO
from flask import Flask
#运用Python的flask类实现与前台信息的交互
from flask import request
from flask import send_file
import base64
import cv2
import time
import json
from pathlib import Pathapp = Flask(__name__)
# 调用训练好的模型
model = YOLO('./best.pt')
@app.route('/', methods=['GET', 'POST'])
def uploads():# 拿到变量img对应的图片img = request.files.get('img')if img:# 重命名name = 'img.jpg'# 保存img.save(os.path.join('./img', name))fileName = "./img/"+name# results = model.predict('./img/img.jpg',save=True)#调用模型进行判断 save_txt=Trueresults = model.predict(fileName,save=True,save_txt=True)# 类名字典names = results[0].nameslistData = []for key in names:# print(key, names[key])data = {'name': names[key],"value": 0}listData.append(data)# 读取数据分析内容# print(listData)content = getContent(results,listData)# print(content)# 5. 返回结果data = {"errCode":0,"msg":"success","data":content,"img":results[0].path}return json.dumps(data)else:data = {"errCode":1,"msg":"cannot find file!"}return json.dumps(data)# 获取结果文本内容
def getContent(results,listData):# 获取文件保存的路径save_path = Path(results[0].save_dir)content = []# 获取label标签文件for r in results:im_name = Path(r.path).stemlabels = save_path / f"labels/{im_name}.txt"# 读取标签文件中的内容txt_file = labelswith open(txt_file, 'r') as file:# content = file.read()lines = file.readlines()print(lines)for line in lines:index = int(line.split()[0])print("每行---", index)if index<len(listData) and listData[index]:# print(listData[index]["name"],listData[index]["value"])listData[index]["value"] +=1# 返回结果return listData
if __name__ == '__main__':app.run()

前端接收到返回数据:

4、flask上传的图片文件无法访问的问题

根据上述返回数据中,预测目标后的结果图片地址:https://***.com/runs/detect/predict/***.jpg,这个路径无法被访问,需要单独配置:

# 配置路径访问
from flask import send_from_directory# .....# 文件访问 runs/detect/predict*/
@app.route('/runs/<path:path>')
def send_image(path):# print(path,'------path')# print(send_from_directory('runs/', path))return send_from_directory('runs/', path)
import os
import numpy as np
import torch.hub
#导入Yolov8,需要提前安装ultralytics库
from ultralytics import YOLO
from flask import Flask
#运用Python的flask类实现与前台信息的交互
from flask import request
from flask import send_file
import base64
import cv2
import time
import json
from pathlib import Path
# 配置路径访问
from flask import send_from_directoryapp = Flask(__name__)
# 验证请求
verifyCode = "89jjkdsw909324jjkjds9f8sdf"# 文件访问 runs/detect/predict*/
@app.route('/runs/<path:path>')
def send_image(path):# print(path,'------path')# print(send_from_directory('runs/', path))return send_from_directory('runs/', path)# 调用训练好的模型
model = YOLO('./best.pt')
@app.route('/', methods=['GET', 'POST'])
def uploads():# 获取前端上传code,判断是否合法请求postData = request.form if request.form else request.json# print(postData.get("code"))verifyRes = verify(postData.get("code"))# 是否非法请求if verifyRes == False:data = {"errCode":1, "msg": "illegal request!"}return json.dumps(data)# 拿到变量img对应的图片img = request.files.get('img')if img:# 重命名name = str(time.time())+'.jpg'# 保存img.save(os.path.join('./img', name))fileName = "./img/"+name# results = model.predict('./img/img.jpg',save=True)#调用模型进行判断 save_txt=Trueresults = model.predict(fileName,save=True,save_txt=True)# 类名字典names = results[0].nameslistData = []for key in names:# print(key, names[key])data = {'name': names[key],"value": 0}listData.append(data)# 读取数据分析内容# print(listData)content = getContent(results,listData)# print(content)# 5. 返回结果data = {"errCode": 0,"msg": "success","data": content,"img": results[0].save_dir+"/"+name}return json.dumps(data)else:data = {"errCode":1,"msg":"cannot find file!"}return json.dumps(data)# 验证code合法性
def verify(code):return code == verifyCode# 获取结果文本内容
def getContent(results,listData):# 获取文件保存的路径save_path = Path(results[0].save_dir)content = []# 获取label标签文件for r in results:im_name = Path(r.path).stemlabels = save_path / f"labels/{im_name}.txt"# 读取标签文件中的内容txt_file = labelswith open(txt_file, 'r') as file:# content = file.read()lines = file.readlines()# print(lines)for line in lines:index = int(line.split()[0])# print("每行---", index)if index<len(listData) and listData[index]:# print(listData[index]["name"],listData[index]["value"])listData[index]["value"] +=1# 返回结果return listData
if __name__ == '__main__':app.run()

参考文档:预测 -Ultralytics YOLO 文档

相关文章:

yolo v8 + flask部署到云服务器,以及问题记录

环境安装 1、运行项目报错&#xff1a;no python application found, check your startup logs for errors 在云服务器pytorch版本安装错了&#xff0c;安装了GPU版本&#xff0c;需要安装CPU版本 # CPU only 使用下面这段代码避免出现第二个错误 pip install torch2.3.1 to…...

【科研必备插件】easyscholar如何使文章显示期刊影响因子与分区等级

简要介绍 EasyScholar 是一个微软 Edge 浏览器的扩展程序&#xff0c;可以显示会议、期刊等级。可支持在各大论文搜索网站&#xff0c;显示各种期刊、会议等级排名 要想你的知网页面如下图所示&#xff0c;快来获取安装&#xff0c;快速科研有方法 插件安装教程 ①打开浏览器…...

UE5 UrlEncode转换

调用接口时用到了 UFUNCTION(BlueprintPure, Category "FuncLib", meta (Keywords "URL1"))static FString StringToURLEncode(const FString& str1);FString UBasicFuncLib::StringToURLEncode(const FString& str1){return FGenericPlatformH…...

【QML】Qt.rgba()的正确使用方法

1. 问题 设置颜色 color: Qt.rgba(65,105,225,255) &#xff0c;应该是蓝色&#xff0c;却显示白色。 2. 正确方法 //正确代码 color: Qt.rgba(65/255, 105/255, 225/255, 255/255)...

centos7.9 docker安装

1、不要通过yum直接安装 具体原因&#xff1a; CentOS 6 因内核太旧&#xff0c;即使支持安装 docker&#xff0c;但会有各种问题&#xff0c;不建议安装CentOS 7 的 extras 源虽然可以安装 docker&#xff0c;但包比较旧&#xff0c;建议从官方源或镜像源站点下载安装 docke…...

spring操作数据库

xml版 程序结构 配置文件 dbUtil-阿帕奇提供操作数据库的插件 核心类&#xff1a;QueryRunner .query() 查询 .update() 增删改 <dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spri…...

Apache Flink中TaskManager,SubTask,TaskSlot,并行度之间的关系

Apache Flink 中Application 与 Job 一个完整的Flink Application 一般组成如下&#xff1a; Source 数据来源Transformation 数据转换处理等Sink 数据传输 Flink 中一个或者多个Operator&#xff08;算子&#xff09;组合对数据进行转换形成一个 Transformation&#xff0c;一…...

马斯克xAI新计划:人工智能模型Grok 2测试版即将发布

特斯拉CEO马斯克在X平台上表示&#xff0c;人工智能模型Grok 2测试版即将发布。Grok&#xff0c;作为xAI公司的明星大语言模型&#xff0c;其首代产品Grok 1已凭借神经演化计算与深度学习技术的深度融合&#xff0c;展现了超乎想象的学习速度与智能深度&#xff0c;赢得了业界的…...

【机器人学】6-4.六自由度机器人运动学参数辨识-机器人精度验证【附MATLAB代码】

前言 前两个章节以及完成了机器人参数辨识。 【机器人学】6-1.六自由度机器人运动学参数辨识-辨识数学模型的建立 【机器人学】6-2.六自由度机器人运动学参数辨识-优化方法求解辨识参数 这里我们认为激光测量仪测量到的数据为机器人实际到达的位置&#xff0c;而机器人理论到…...

分销商城小程序系统渠道拓展

线上卖货渠道很多&#xff0c;想要不断提高营收和新客获取&#xff0c;除了自己和工具本身努力外&#xff0c;还需要其他人的帮助来提高商城店铺的整体销量。 搭建saas商城系统网站/小程序&#xff0c;后台上货&#xff0c;设置支付、配送、营销、精美模板商城装修等内容&…...

WPF篇(14)-ProgressBar进度条+Calendar日历控件+DatePicker日期控件

ProgressBar进度条 ProgressBar进度条通常在我们执行某个任务需要花费大量时间时使用&#xff0c;这时可以采用进度条显示任务或线程的执行进度&#xff0c;以便给用户良好的使用体验。 ProgressBar类定义 public class ProgressBar : RangeBase {public static readonly De…...

链表高频题目和必备技巧

链表高频题目和必备技巧 1. 链表类题目注意点 1&#xff0c;如果笔试中空间要求不严格&#xff0c;直接使用容器来解决链表问题 2&#xff0c;如果笔试中空间要求严格、或者在面试中面试官强调空间的优化&#xff0c;需要使用额外空间复杂度**O(1)**的方法 3&#xff0c;最…...

Vue3详细介绍,正则采集器所用前端框架

Vue3 引入了一个全新的响应式系统&#xff0c;它是基于ES6的Proxy特性构建的。这个系统使得 Vue 能够更加高效地追踪数据的变化&#xff0c;并在数据发生变化时自动更新DOM。响应式系统的核心是"可观察"&#xff0c;当数据变化时&#xff0c;视图会响应这些变化并重新…...

数据集--COCO2017(快速下载)

1、数据集介绍 数据集官网&#xff1a;https://cocodataset.org/#home COCO&#xff08;Common Objects in Context&#xff09;数据集是计算机视觉领域中最广泛使用的数据集之一&#xff0c;主要用于目标检测、分割和图像标注任务。COCO 数据集由 Microsoft 发布&#xff0c…...

【管理咨询宝藏159】顶级咨询公司人力三支柱建设方案思路

阅读完整版报告内容&#xff0c;请搜索VV号“管理咨询宝藏”。 【管理咨询宝藏159】顶级咨询公司人力三支柱建设方案思路 【格式】PDF版本 【关键词】人力咨询、三支柱、人力体系 【核心观点】 - 集团总部制定全集团共享中心总体规划路径&#xff0c;组织并负责实施与推广。各…...

跨时钟域总结

跨时钟域总结 秋招学习跨时钟域 总结一下吧 异步电路 设计中有两个频率不同的时钟(也可能多个),而有数据在两组时钟之间传输 单bit跨时钟域 慢时钟域数据-> 快时钟域 方法 : 使用两个锁存器 (打两拍) 数据跨时钟域同步过程中,脉冲宽度会改变&#xff0c;不影响同步结…...

富婆和富公子都在看的负载均衡和Haproxy大全

一.负载均衡 1.1&#xff1a;什么是负载均衡 负载均衡&#xff1a; Load Balance &#xff0c;简称 LB &#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或…...

VScode找python环境 (conda)

第一步 CtrlshiftP 第二步 框框里输入&#xff1a;Python:Select Interpreter...

C# Winform序列化和反序列化

在NET Framework 4.7.2中不能用Newtonsoft.Json进行序列化和反序列化&#xff0c;为解决此问题&#xff0c;采用System.Text.Json进行序列化&#xff0c;注意要添加System.Memory的引用。 1、创建测试类 using System; using System.Collections.Generic; using System.Linq; …...

crc原理概述

CRC&#xff08;循环冗余校验&#xff09;是一种错误检测技术&#xff0c;用于确保数据在传输或存储过程中没有发生变化。它通过将数据视为一个多项式&#xff0c;利用二进制除法得到一个校验码&#xff08;CRC值&#xff09;。接收方使用相同的算法验证数据和CRC值是否匹配&am…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...