--- /dev/null
+from glob import glob\r
+import cv2\r
+import re\r
+\r
+cv2_callable = set(['cv2.'+name for name in dir(cv2) if callable( getattr(cv2, name) )])\r
+\r
+found = set()\r
+for fn in glob('*.py'):\r
+ print ' --- ', fn\r
+ code = open(fn).read()\r
+ found |= set(re.findall('cv2?\.\w+', code))\r
+\r
+cv2_used = found & cv2_callable\r
+\r
+r = 1.0 * len(cv2_used) / len(cv2_callable)\r
+print '\ncv2 api coverage: %d / %d (%.1f%%)' % ( len(cv2_used), len(cv2_callable), r*100 )\r
+\r
+print '\nold (cv) symbols:'\r
+for s in found:\r
+ if s.startswith('cv.'):\r
+ print s\r
from common import splitfn\r
\r
USAGE = '''\r
-USAGE: calib.py [--save <filename>] [--debug <output path>] [<image mask>] \r
+USAGE: calib.py [--save <filename>] [--debug <output path>] [--square_size] [<image mask>] \r
'''\r
\r
\r
import sys, getopt\r
from glob import glob\r
\r
- args, img_mask = getopt.getopt(sys.argv[1:], '', ['save=', 'debug='])\r
+ args, img_mask = getopt.getopt(sys.argv[1:], '', ['save=', 'debug=', 'square_size='])\r
args = dict(args)\r
try: img_mask = img_mask[0]\r
except: img_mask = '../cpp/left*.jpg'\r
img_names = glob(img_mask)\r
debug_dir = args.get('--debug')\r
+ square_size = float(args.get('--square_size', 1.0))\r
\r
pattern_size = (9, 6)\r
pattern_points = np.zeros( (np.prod(pattern_size), 3), np.float32 )\r
pattern_points[:,:2] = np.indices(pattern_size).T.reshape(-1, 2)\r
+ pattern_points *= square_size\r
\r
obj_points = []\r
img_points = []\r
img_n = len(img_points)\r
rms, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (w, h), camera_matrix, dist_coefs)\r
print "RMS:", rms\r
- print "camera matrix: ", camera_matrix\r
- print "distortion coefficients: ", dist_coefs\r
+ print "camera matrix:\n", camera_matrix\r
+ print "distortion coefficients: ", dist_coefs.ravel()\r
\r
import numpy as np\r
import cv2, cv\r
-import common\r
\r
def detect(img, cascade):\r
rects = cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))\r
\r
faces = []\r
if extract_faces:\r
- path, name, ext = common.splitfn(fn)\r
+ path, name, ext = splitfn(fn)\r
face_sz = 256\r
for i, r in enumerate(rects):\r
p1, p2, u = r.reshape(3, 2)\r
face = cv2.warpAffine(img, M, (face_sz, face_sz), flags=cv2.WARP_INVERSE_MAP | cv2.INTER_AREA)\r
faces.append(face)\r
\r
- cv2.imwrite('out/%s_%02d.bmp' % (name, i), face)\r
- \r
return small, rects, faces\r
\r
\r
import sys\r
import getopt\r
from glob import glob\r
+ from common import splitfn, image_extensions\r
\r
- args, img_mask = getopt.getopt(sys.argv[1:], '', ['cascade='])\r
+ args, img_args = getopt.getopt(sys.argv[1:], '', ['cascade=', 'outdir='])\r
args = dict(args)\r
- # "../../data/haarcascades/haarcascade_frontalface_default.xml" #haarcascade_frontalface_default\r
cascade_fn = args.get('--cascade', "../../data/haarcascades/haarcascade_frontalface_alt.xml")\r
+ outdir = args.get('--outdir')\r
+ \r
+ img_list = []\r
+ if len(img_args) == 0:\r
+ img_list = ['../cpp/lena.jpg']\r
+ else:\r
+ for mask in img_args:\r
+ img_list.extend(glob(mask))\r
+ img_list = [fn for fn in img_list if splitfn(fn)[-1].lower() in image_extensions]\r
\r
cascade = cv2.CascadeClassifier(cascade_fn)\r
\r
- mask = 'D:/Dropbox/Photos/2011-06-12 aero/img_08[2-9]*.jpg'\r
- for fn in glob(mask):\r
- print fn\r
+ for i, fn in enumerate(img_list):\r
+ print '%d / %d %s' % (i+1, len(img_list), fn),\r
vis, rects, faces = process_image(fn, cascade)\r
+ if len(faces) > 0 and outdir is not None:\r
+ path, name, ext = splitfn(fn)\r
+ cv2.imwrite('%s/%s_all.bmp' % (outdir, name), vis)\r
+ for face_i, face in enumerate(faces):\r
+ cv2.imwrite('%s/%s_obj%02d.bmp' % (outdir, name, face_i), face)\r
+ print ' - %d object(s) found' % len(faces)\r
cv2.imshow('img', vis)\r
- cv2.waitKey(100)\r
-\r
- \r
- #vis, rects = process_image('test.jpg', cascade)\r
- #print rects\r
- #cv2.imshow('img', vis)\r
+ cv2.waitKey(50)\r
cv2.waitKey()\r