我想运行具有不同参数的多个对象检测(yolov3(算法。
我应该使用更多通过检测和计数算法太重而无法控制的CPU内核。
所以我做了可以设置不同的视频名称和GPU编号的对象类,但是我对在Python中进行多处理的新手我无法很好地处理多处理类。
功能
1. Draw baselines in PySide2 or PyQt.
2. Select a GPU which will run the YOLOv3.
3. Count cars which crossed a specific line in a road.
,但我想测试多处理是否可以在实现之前运行对象类。
# main.py
from stream import video
import multiprocessing as mp
print(mp.current_process())
process1 = mp.Process(target=video, args=('DJI_0474_2.MOV', 0))
process2 = mp.Process(target=video, args=('DJI_0474_3.MOV', 1))
process1.daemon = True
process2.daemon = True
process1.start()
process2.start()
# stream.py
import cv2
from threading import Timer
import multiprocessing as mp
# from yolov3 import YOLO
class video(object):
def __init__(self, name, gpu_num):
print(mp.current_process())
self.cap = cv2.VideoCapture(name)
# self.detector = YOLO(gpu_num)
self.timer = Timer(0.066, self.run)
self.timer.start()
def run(self):
ret, frame = self.cap.read()
if ret:
# frame = self.detector(frame)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
我制作了一个简单的代码来测试多处理。
但是,当我用两个args初始化视频类('dji_0474_2.mov',0(时,main.py闭合了自身。
我在运行多处理之前尝试初始化,但错误说"不能泡菜Cv2.VIDECAPTURE对象"。
# main2.py
from stream2 import video
import multiprocessing as mp
print(mp.current_process())
play = video('DJI_0474_2.MOV')
# process = mp.Process(target=video, args=('DJI_0474_2.MOV',))
process = mp.Process(target=play.run)
process.daemon = True
process.start()
# stream2.py
import cv2
from threading import Timer
import multiprocessing as mp
# from yolov3 import YOLO
class video(object):
def __init__(self, name ):
print(mp.current_process())
self.cap = cv2.VideoCapture(name)
def run(self):
self.timer = Timer(0.066, self.update)
self.timer.start()
def update(self):
ret, frame = self.cap.read()
if ret:
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
我认为这是因为"视频类"是主要的核心,但"运行"在其他核心上,因此他们不能同时交流。
我会尝试队列在内核之间进行交流,但我担心延迟...所以最好的是在对象类中启动多处理。
我可以在对象类中运行多处理吗?
否EZ方式,我认为是ROS,BOOST,MULTICHREAD和各种Mutex。要花一段时间
最愚蠢的方法是建造几个Yolo。用GPU和各种CPU版本说。在不同的终端上调用每个1以启动新线程。
然后通过重新培训n模型将受过训练的模型拆分为不同的子集。每个构建版本都在调用子模型
然后所有查找n TXT文件的发现,然后加入一个txt到Avoide Mutex锁定问题。