Source code for pycharmers.cli.cvCascades
#coding: utf-8
import re
import sys
import cv2
import numpy as np
from ..utils import cv2ArgumentParser
from ..opencv import cvui, cv2Project
from ..opencv import cascade_creator, draw_bboxes_xywh, cv2GREEN
from ..opencv.cascade import OPENCV_CASCADES
[docs]def cvCascades(argv=sys.argv[1:]):
"""Control the OpenCV cascade Examples.
Please see :meth:`cv2ArgumentParser <pycharmers.utils.argparse_utils.cv2ArgumentParser>` for arguments.
Note:
When you run from the command line, execute as follows::
$ cv-cascades --cam 0 --radio-width 200
"""
parser = cv2ArgumentParser(prog="cv-cascades", description="OpenCV cascade examples", add_help=True)
args = parser.parse_args(argv)
# Collect All cascades.
cascade_names, cascades, states = [],[],[]
for name,value in OPENCV_CASCADES.items():
m = re.match(pattern=r"^haarcascades:haarcascade_(.+)$", string=name)
if m is not None:
try:
cascade = cascade_creator(cascade=name)
cascades.append(cascade)
states.append(len(states)==0)
cascade_names.append(m.group(1))
except Exception as e:
print(name, e)
project = cv2Project(args=args, cascade_names=cascade_names)
def func(frame, monitor, gui_x, frame_height, cascade_names, **kwargs):
cvui.text(where=monitor, x=gui_x+20, y=5, text="[Cascade List]")
idx = cvui.radiobox(where=monitor, x=gui_x, y=25, labels=cascade_names, states=states)
cascade = cascades[idx]
name = cascade_names[idx]
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
for bbox in cascade.detectMultiScale(gray):
draw_bboxes_xywh(frame=frame, bboxes=bbox, infos=[{"color":cv2GREEN, "text": name}])
return frame
project.wrap(func=func)