video_dmtx.py 1.71 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
Keyboard shortcuts:

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

import cv2
import numpy as np
21 22

# built-in modules
23 24 25 26 27 28
import sys

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

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

35 36
        gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
        codes, corners, dmtx = cv2.findDataMatrix(gray)
37

38 39
        cv2.drawDataMatrixCodes(frame, codes, corners)
        cv2.imshow(window_name, frame)
40

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

46 47
        if c == ' ':
            need_to_save = True
48

49 50 51 52 53
        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
54

55 56 57 58
        frame_number += 1


if __name__ == '__main__':
59
    print __doc__
60 61 62 63 64 65 66

    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]))
67

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

72
    data_matrix_demo(cap)