work on obj_detect.py
authorAlexander Mordvintsev <no@email>
Sun, 19 Jun 2011 11:33:15 +0000 (11:33 +0000)
committerAlexander Mordvintsev <no@email>
Sun, 19 Jun 2011 11:33:15 +0000 (11:33 +0000)
added square_size cmd line param for calibrate.py
added _coverage.py script to compute cv2 api coverage by samples (just for interest, may be removed later)

samples/python2/_coverage.py [new file with mode: 0644]
samples/python2/calibrate.py
samples/python2/color_histogram.py
samples/python2/common.py
samples/python2/obj_detect.py

diff --git a/samples/python2/_coverage.py b/samples/python2/_coverage.py
new file mode 100644 (file)
index 0000000..cdad18a
--- /dev/null
@@ -0,0 +1,21 @@
+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
index 584ed39..2c20f22 100644 (file)
@@ -4,7 +4,7 @@ import os
 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
@@ -13,16 +13,18 @@ if __name__ == '__main__':
     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
@@ -53,6 +55,6 @@ if __name__ == '__main__':
     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
index 5e0b0ee..cdb7d43 100644 (file)
@@ -18,7 +18,7 @@ hist_scale = 10
 def set_scale(val):\r
     global hist_scale\r
     hist_scale = val\r
-cv.CreateTrackbar('scale', 'hist', hist_scale, 32, set_scale)\r
+cv2.createTrackbar('scale', 'hist', hist_scale, 32, set_scale)\r
 \r
 try: fn = sys.argv[1]\r
 except: fn = 'synth:bg=../cpp/baboon.jpg:class=chess:noise=0.05'\r
index 9c52288..b32d60b 100644 (file)
@@ -2,6 +2,8 @@ import numpy as np
 import cv2\r
 import os\r
 \r
+image_extensions = ['.bmp', '.jpg', '.jpeg', '.png', '.tif', '.tiff', '.pbm', '.pgm', '.ppm']\r
+\r
 def splitfn(fn):\r
     path, fn = os.path.split(fn)\r
     name, ext = os.path.splitext(fn)\r
index 27be5e8..a1ddbed 100644 (file)
@@ -1,6 +1,5 @@
 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
@@ -44,7 +43,7 @@ def process_image(fn, cascade, extract_faces=True):
 \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
@@ -56,8 +55,6 @@ def process_image(fn, cascade, extract_faces=True):
             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
@@ -66,23 +63,32 @@ if __name__ == '__main__':
     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