YOLOv8 Flask整合问题
yolov8 + flask 后代码没有进行推理问题。
Bug model.predict()+pyinstaller+HTTPServer/flask: not executing
yolov8是异步线程调用了,flask打包exe后会应该异步问题,model.predict()不会进行返回,导致没有看着没有执行而已。
Behind the scenes, ultralytics (or one of its dependencies) is using multiprocessing, and if you want to use multiprocessing in a PyInstaller-frozen application, you need to call multiprocessing.freeze_support before making any use of multiprocessing functionality.
In the case of your non-flask example:
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
import cv2
import multiprocessing # For multiprocessing.freeze_support()
import numpy as np
import base64
import time
from ultralytics import YOLOclass MyServer(BaseHTTPRequestHandler):def do_POST(self):self.send_response(200)self.send_header("Content-type", "text/html")self.end_headers()content_length = int(self.headers['Content-Length'])post_data = json.loads(self.rfile.read(content_length))img = post_data['img']nparr = np.frombuffer(base64.b64decode(img), np.uint8)img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)print('starting..')model = YOLO('best.pt')print('model loaded')results = model.predict(source=img_np, show=False, save=False, save_conf=False, show_conf=False, save_txt=False)print('model predicted')self.wfile.write(bytes(f"ok", "utf-8"))if __name__ == "__main__":multiprocessing.freeze_support() # <--- Addedprint('starting server..') webServer = HTTPServer(('localhost', 5000), MyServer)try:webServer.serve_forever()except KeyboardInterrupt:passfinally:print('aborted')time.sleep(2)webServer.server_close()
解决!!!