from SceneDetector import SceneDetector
from multiprocessing import Pipe, Process
import numpy as np
import time
import cv2
def SceneWorker(pipe_conn, model_path, is_onnx = False):
sd = SceneDetector(model_path, is_onnx = True)
while True:
data = pipe_conn.recv()
if data is None:
break
results = sd.infer_scenes(data)
pipe_conn.send(results)
if __name__ == '__main__':
model_path = 'models/scene_model.onnx'
scene_conn, scene_child_conn = Pipe()
scene_process = Process(target=SceneWorker, args=(scene_child_conn, model_path, True,))
scene_process.start()
test_img = cv2.imread('TestImages/1440P_1000M_8X.jpg')
for _ in range(5000):
scene_conn.send([test_img])
results = scene_conn.recv()[0]
print(results)
time.sleep(0.1) #这里在推理间加入了间隔
scene_conn.send(None)
scene_process.join()
time.sleep
的问题,后来试过了用threading
的Event
和asyncio
的await
做间隔,结果也是一样的。
使用Torch
或者Onnx
的模型结果都是一样的,把cv
预处理删除掉也不影响 CPU 使用,所以也不是cv
的问题。今天还测试了把推理单独开一个进程,也没有改善。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.