【发布时间】:2021-12-21 22:11:56
【问题描述】:
我是图像处理领域的新手,事实上,我遇到了一个与分类相关的小代码。在流式传输期间,我只想每 3 秒获得一个特定的帧,然后,我将该帧与分类算法一起使用。这是我当前使用线程进行的编码:(它有总帧数,我不想全部使用)
class ThreadCapture():
def __init__(self, knn):
self.frame = []
self.status = False
self.isStop = False
self.knn = knn
self.cap = cv2.VideoCapture(0)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 480)
def start(self):
threading.Thread(target=self.current_frame, daemon=True, args=()).start()
def stop(self):
self.isStop = True
def get_frame(self):
return self.status, self.frame
def current_frame(self):
while(not self.isStop):
self.status, self.frame = self.cap.read()
self.crop_frame()
self.cap.release()
def run_knn(self):
img_resize = cv2.resize(self.frame, (224, 224))
img = cv2.cvtColor(img_resize, cv2.COLOR_BGR2RGB)
img_pil = Image.fromarray(img)
return self.knn.classify(img_pil)
def main(arg):
.....
stream = ThreadCapture(EagleEyes)
stream.start()
time.sleep(1)
while(True):
status, frame = stream.get_frame()
if status:
info, res = stream.run_knn()
print(info)
cv2.putText(frame, info, (10,40), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,0,255), 1, cv2.LINE_AA)
cv2.imshow('abc', frame)
if cv2.waitKey(1)==ord('q'):
break
stream.stop()
cv2.destroyAllWindows()
我不擅长编码,所以我想知道是否有人可以支持我改进上述编码。 谢谢大家。
【问题讨论】:
-
main() 中的循环会在 status 为 false 时像疯了一样旋转,而且它永远不会摆脱它。
-
@ChristophRackwitz 你能给我一个获取帧或设置间隔的想法吗?其实我只要按“q”就可以退出程序了。
标签: python opencv video-streaming classification frame