Project Idea (Augmented Reality – QR Code Scanner)
Project Idea : A project based on scanning and detecting qr codes and with inclusion of pose estimation for optimization in detection of qr code and displaying a pyramid over it virtually and storing the read data from qr code.
QR Code – Quick Response code -A QR code uses four standardized encoding modes (numeric, alphanumeric and byte/binary) to efficiently store data; extensions may also be used.
How to install ->Install python (2.7 or 3.0 or higher) ->Install OpenCV Library for Ubuntu ->Install zbar, numpy, PIL Libraries for ubuntu ->Copy and paste the code in the editor and save it as qrcode.py
Running the code : ->Open terminal and run the following command ->python qrcode.py
Python
import zbar from PIL import Image,ImageColor import cv2 import numpy as np cv2.namedWindow("Python Qr - Code Detection") cap = cv2.VideoCapture( 0 ) scanner = zbar.ImageScanner() scanner.parse_config( 'enable' ) while True : ret, im = cap.read() if not ret: continue # Read Image #im = cv2.imread("sahilkhosla.jpg"); size = im.shape gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY, dstCn = 0 ) pil = Image.fromarray(gray) width, height = pil.size raw = pil.tobytes() image = zbar.Image(width, height, 'Y800' , raw) scanner.scan(image) for symbol in image: print 'decoded' , symbol. type , 'symbol' , '"%s"' % symbol.data topLeftCorners, bottomLeftCorners, bottomRightCorners, topRightCorners = [item for item in symbol.location] cv2.line(im, topLeftCorners, topRightCorners, ( 255 , 0 , 0 ), 2 ) cv2.line(im, topLeftCorners, bottomLeftCorners, ( 255 , 0 , 0 ), 2 ) cv2.line(im, topRightCorners, bottomRightCorners, ( 255 , 0 , 0 ), 2 ) cv2.line(im, bottomLeftCorners, bottomRightCorners, ( 255 , 0 , 0 ), 2 ) #2D image points. If you change the image, you need to change vector image_points = np.array([ ( int ((topLeftCorners[ 0 ] + topRightCorners[ 0 ]) / 2 ), int ((topLeftCorners[ 1 ] + bottomLeftCorners[ 1 ]) / 2 )), # Nose topLeftCorners, # Left eye left corner topRightCorners, # Right eye right corner bottomLeftCorners, # Left Mouth corner bottomRightCorners # Right mouth corner ], dtype = "double") # 3D model points. model_points = np.array([ ( 0.0 , 0.0 , 0.0 ), # Nose ( - 225.0 , 170.0 , - 135.0 ), # Left eye left corner ( 225.0 , 170.0 , - 135.0 ), # Right eye right corner ( - 150.0 , - 150.0 , - 125.0 ), # Left Mouth corner ( 150.0 , - 150.0 , - 125.0 ) # Right mouth corner ]) # Camera internals focal_length = size[ 1 ] center = (size[ 1 ] / 2 , size[ 0 ] / 2 ) camera_matrix = np.array( [[focal_length, 0 , center[ 0 ]], [ 0 , focal_length, center[ 1 ]], [ 0 , 0 , 1 ]], dtype = "double" ) print "Camera Matrix :\n { 0 }". format (camera_matrix) dist_coeffs = np.zeros(( 4 , 1 )) # Assuming no lens distortion (success, rotation_vector, translation_vector) = cv2.solvePnP(model_points, image_points, camera_matrix, dist_coeffs, flags = cv2.CV_ITERATIVE) print "Rotation Vector:\n { 0 }". format (rotation_vector) print "Translation Vector:\n { 0 }". format (translation_vector) # Project a 3D point (0, 0, 1000.0) onto the image plane. # We use this to draw a line sticking out of the nose (nose_end_point2D, jacobian) = cv2.projectPoints(np.array([( 0.0 , 0.0 , 100.0 )]), rotation_vector, translation_vector, camera_matrix, dist_coeffs) for p in image_points: cv2.circle(im, ( int (p[ 0 ]), int (p[ 1 ])), 3 , ( 0 , 0 , 255 ), - 1 ) p1 = ( int (image_points[ 0 ][ 0 ]), int (image_points[ 0 ][ 1 ])) p2 = ( int (nose_end_point2D[ 0 ][ 0 ][ 0 ]), int (nose_end_point2D[ 0 ][ 0 ][ 1 ])) #pillars cv2.line(im, bottomLeftCorners, p2, ( 255 , 0 , 0 ), 2 ) cv2.line(im, topLeftCorners, p2, ( 255 , 0 , 0 ), 2 ) cv2.line(im, bottomRightCorners, p2, ( 255 , 0 , 0 ), 2 ) cv2.line(im, topRightCorners, p2, ( 255 , 0 , 0 ), 2 ) # Display image cv2.imshow("Output", im) # Wait for the magic key keypress = cv2.waitKey( 1 ) & 0xFF if keypress = = ord ( 'q' ): break cv2.waitKey( 0 ) |
For more Projects visit this link
Please Login to comment...