zbar-opencv-comparison.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import cv2
  2. import numpy as np
  3. import sys
  4. import time
  5. import pyzbar.pyzbar as pyzbar
  6. cap = cv2.VideoCapture(0)
  7. hasFrame,frame = cap.read()
  8. vid_writer = cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 10, (frame.shape[1],frame.shape[0]))
  9. # Display barcode and QR code location
  10. def display(im, decodedObjects):
  11. # Loop over all decoded objects
  12. for decodedObject in decodedObjects:
  13. points = decodedObject.polygon
  14. # If the points do not form a quad, find convex hull
  15. if len(points) > 4 :
  16. hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
  17. hull = list(map(tuple, np.squeeze(hull)))
  18. else :
  19. hull = points;
  20. # Number of points in the convex hull
  21. n = len(hull)
  22. # Draw the convext hull
  23. for j in range(0,n):
  24. cv2.line(im, hull[j], hull[ (j+1) % n], (255,0,0), 3)
  25. # Display results
  26. # cv2.imshow("Results", im);
  27. # Create a qrCodeDetector Object
  28. qrDecoder = cv2.QRCodeDetector()
  29. # Detect and decode the qrcode
  30. t = time.time()
  31. while(1):
  32. hasFrame, inputImage = cap.read()
  33. if not hasFrame:
  34. break
  35. decodedObjects = pyzbar.decode(inputImage)
  36. if len(decodedObjects):
  37. zbarData = decodedObjects[0].data
  38. else:
  39. zbarData=''
  40. opencvData,bbox,rectifiedImage = qrDecoder.detectAndDecode(inputImage)
  41. if zbarData:
  42. cv2.putText(inputImage, "ZBAR : {}".format(zbarData), (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
  43. else:
  44. cv2.putText(inputImage, "ZBAR : QR Code NOT Detected", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)
  45. if opencvData:
  46. cv2.putText(inputImage, "OpenCV:{}".format(opencvData), (10, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
  47. else:
  48. cv2.putText(inputImage, "OpenCV:QR Code NOT Detected", (10, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)
  49. display(inputImage, decodedObjects)
  50. cv2.imshow("Result",inputImage)
  51. vid_writer.write(inputImage)
  52. k = cv2.waitKey(20)
  53. if k == 27:
  54. break
  55. cv2.destroyAllWindows()
  56. vid_writer.release()