video_dmtx.py 1.69 KB
Newer Older
1
#!/usr/bin/env python
2

3
'''
4 5 6 7 8 9 10 11
Data matrix detector sample.
Usage:
   video_dmtx {<video device number>|<video file name>}

   Generate a datamatrix from  from http://datamatrix.kaywa.com/ and print it out.
   NOTE: This only handles data matrices, generated for text strings of max 3 characters

   Resize the screen to be large enough for your camera to see, and it should find an read it.
12

13 14 15 16 17 18 19 20 21 22 23 24 25 26
Keyboard shortcuts:

   q or ESC - exit
   space - save current image as datamatrix<frame_number>.jpg
'''

import cv2
import numpy as np
import sys

def data_matrix_demo(cap):
    window_name = "Data Matrix Detector"
    frame_number = 0
    need_to_save = False
27

28 29 30 31
    while 1:
        ret, frame = cap.read()
        if not ret:
            break
32

33 34
        gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
        codes, corners, dmtx = cv2.findDataMatrix(gray)
35

36 37
        cv2.drawDataMatrixCodes(frame, codes, corners)
        cv2.imshow(window_name, frame)
38

39 40 41 42
        key = cv2.waitKey(30)
        c = chr(key & 255)
        if c in ['q', 'Q', chr(27)]:
            break
43

44 45
        if c == ' ':
            need_to_save = True
46

47 48 49 50 51
        if need_to_save and codes:
            filename = ("datamatrix%03d.jpg" % frame_number)
            cv2.imwrite(filename, frame)
            print "Saved frame to " + filename
            need_to_save = False
52

53 54 55 56
        frame_number += 1


if __name__ == '__main__':
57
    print __doc__
58 59 60 61 62 63 64

    if len(sys.argv) == 1:
        cap = cv2.VideoCapture(0)
    else:
        cap = cv2.VideoCapture(sys.argv[1])
        if not cap.isOpened():
            cap = cv2.VideoCapture(int(sys.argv[1]))
65

66 67 68
    if not cap.isOpened():
        print 'Cannot initialize video capture'
        sys.exit(-1)
69

70
    data_matrix_demo(cap)