You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

66 lines
2.1 KiB

from imutils.video import VideoStream
from pyzbar import pyzbar
import requests
import imutils
import cv2
import urllib3
import socket
import struct
import zlib
import pickle
vs = VideoStream().start()
dates = []
reps = 0
barcodes = None
prevcode = None
host = '10.10.26.141'
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, 8485))
connection = client_socket.makefile('wb')
def main():
global vs
global dates
global reps
global barcodes
global prevcode
while True:
try:
while (barcodes == None or barcodes == []):
frame = vs.read()
frame = imutils.resize(frame, width=400)
barcodes = pyzbar.decode(frame)
res, frm = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
send_data = zlib.compress(pickle.dumps(frm, 0))
size = len(send_data)
client_socket.sendall(struct.pack(">L", size) + data)
barcodes = pyzbar.decode(frame)
# loop over the detected barcodes
for barcode in barcodes:
(x, y, w, h) = barcode.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
if (barcodeData != prevcode):
text = "{} ({})".format(barcodeData, barcodeType)
cv2.putText(frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,
0.5, (0, 0, 255), 2)
print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))
requests.post('https://' + host + ':5000/reduce', data={'id': barcodeData, 'reduce': 5}, verify=False)
reps += 1
prevcode = barcodeData
barcodes = None
except KeyboardInterrupt:
break
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
main()
print("[INFO] cleaning up...")
cv2.destroyAllWindows()
vs.stop()