我做了一个涉及使用OpenCV来检测人脸的项目。该项目在这一年中还没有取得巨大的发展,因此,我未能对我的代码进行模块化以使其更简洁,易于阅读的事实令人担忧。
我使用摄像机供稿来检测人脸和ha发,因此OpenCV必须循环进行逐帧分析,如下所示:
project_dir = dirname(dirname(__file__))
face_cascade_path = join(project_dir, "haarcascades/haarcascade_frontalface_default.xml")
face_cascade = cv2.CascadeClassifier(face_cascade_path)
while camera.view.isOpened():
ret_val, frame = camera.view.read()
frame = cv2.resize(frame, (camera.width, camera.height))
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.05, 6)
for (x,y,w,h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255,0,0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
cv2.imshow(camera.name, frame)
cv2.startWindowThread()
cv2.namedWindow(camera.name, cv2.WINDOW_NORMAL)
# q to quit
if cv2.waitKey(1) & 0xFF == ord('q'):
break
从这里可以明显看出,我已经在尝试通过在OpenCV(camera.view
)中为camera对象使用类以及为该类分配一些其他参数(例如{{ 1}}和camera.width
)。但是,视频的OpenCV必须在每个帧的camera.height
循环中运行算法,这一事实使我感到非常受限制。
例如,如果代码还包含眼睛检测功能,则它看起来应该像这样:
while
在我看来,如果我进一步对框架的其他对象或任何其他变换应用分析,则代码将变得更加笨拙且难以使用。有什么方法可以对此进行模块化,分离代码并使其更易于维护?