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 YOLO
class 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() # <--- Added
print('starting server..')
webServer = HTTPServer(('localhost', 5000), MyServer)
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
finally:
print('aborted')
time.sleep(2)
webServer.server_close()
解决!!!