好用的网站建设百度广告价格
环境安装
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 文档