import uvicorn from fastapi import FastAPI, UploadFile, File from io import BytesIO from PIL import Image, ImageDraw from utils.operation import YOLO def detect(onnx_path='ReqFile/yolov5n-7-k5.onnx', img=r'ReqFile/bus.jpg', show=True): ''' 检测目标,返回目标所在坐标如: {'crop': [57, 390, 207, 882], 'classes': 'person'},...] :param onnx_path:onnx模型路径 :param img:检测用的图片 :param show:是否展示 :return: ''' yolo = YOLO(onnx_path=onnx_path) # 加载yolo类 det_obj = yolo.decect(img) # 检测 # 打印检测结果 print(det_obj) # 画框框 if show: img = Image.open(img) draw = ImageDraw.Draw(img) for i in range(len(det_obj)): draw.rectangle(det_obj[i]['crop'], width=3) img.show() # 展示 return det_obj app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.post("/detect/") async def create_upload_file(file: UploadFile = File(...)): contents = await file.read() # 接收浏览器上传的图片 im1 = BytesIO(contents) # 将数据流转换成二进制文件存在内存中 # 返回结果 return detect(onnx_path='ReqFile/best-0206.onnx', img=im1, show=False) # 启动项目 if __name__ == "__main__": uvicorn.run(app='main:app', port=8000, host='0.0.0.0', reload=True)
时间: 2024-04-28 13:21:02 浏览: 156
这段代码使用 FastAPI 框架搭建了一个接口,可以接收浏览器上传的图片,调用 `detect()` 函数进行目标检测,最后返回检测结果。其中使用了 YOLO 模型进行目标检测,`detect()` 函数接收 ONNX 模型路径和图片,返回目标在图片中的位置和类别。`create_upload_file()` 函数接收上传的图片,将其转换成二进制文件存在内存中,调用 `detect()` 函数进行目标检测,并返回结果。最后使用 Uvicorn 启动项目。
相关问题
package com.de.debook.controller; import com.de.debook.bo.ResponseBean; import com.de.debook.constant.WebConstant; import com.de.debook.utils.FileUploadUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.Map; @RestController public class UploadFileController { private static final int FILE_SIZE_MAX = 20 * 1024 * 1024; // 上传限制大小 /** * @param multipartFile * @description: 通用文件上传处理器 * @return: java.util.Map<java.lang.String , java.lang.Object> */ @RequestMapping(value = "/uploadFile", produces = "application/json;charset=UTF-8") public Map<String, Object> fileUpload(@RequestParam("file") MultipartFile multipartFile) { ResponseBean responseBean = new ResponseBean(); if (multipartFile != null) { String realName = multipartFile.getOriginalFilename(); // 原始文件名 String suffix = FileUploadUtils.fileSuffix(realName); // 文件名后缀 String tmpFileName = FileUploadUtils.createTmpFileName(suffix); // 生成保证不重复的临时文件名 if (multipartFile.getSize() > FILE_SIZE_MAX) { responseBean.putError("上传失败:文件大小不得超过20MB"); return responseBean.getResponseMap(); } File tmpFile = new File(WebConstant.FILE_STORAGE_ROOT,tmpFileName); try { multipartFile.transferTo(tmpFile); // 写入本地 responseBean.putData("data", "/images/" + tmpFileName); } catch (IOException e) { responseBean.putError("上传失败:" + e.getMessage()); e.printStackTrace(); } } return responseBean.getResponseMap(); } }
这是一个基于Spring框架开发的文件上传处理器,它接收一个MultipartFile类型的参数,即上传的文件,然后进行处理,最终返回一个包含上传结果的ResponseBean对象。其中,文件大小限制为20MB,超过限制则返回上传失败的信息;上传成功后,会将文件写入到本地,并将其访问路径存储到ResponseBean中返回。
上传文件出错java.io.lOException: java.io.FileNotFoundExceptio
根据提供的引用内容,上传文件出错java.io.IOException: java.io.FileNotFoundException 异常通常是由于文件路径错误或文件不存在导致的。以下是两种可能的解决方法:
1. 检查文件路径是否正确:确保文件路径是正确的,并且文件确实存在于指定的路径中。可以使用绝对路径或相对路径来指定文件路径。
2. 检查文件是否存在:在上传文件之前,可以使用Java的File类来检查文件是否存在。可以使用File类的exists()方法来检查文件是否存在。
以下是一个示例代码,演示了如何处理上传文件出错java.io.IOException: java.io.FileNotFoundException 异常:
```java
import java.io.File;
// 检查文件是否存在
public boolean checkFileExists(String filePath) {
File file = new File(filePath);
return file.exists();
}
// 上传文件方法
public void uploadFile(String filePath) {
if (checkFileExists(filePath)) {
// 执行上传文件的操作
// ...
} else {
System.out.println("文件不存在");
}
}
```
阅读全文