def __init__(self, logger):

        # Input Parameters
        self.logger = logger

        # Created Parameters
        self.webcam = cv2.VideoCapture(0)
        self.webcam.set(10,0.01) # Set brightness
        self.qrReader = QRCodeReader(self.webcam, logger)
        self.lastQRCode = None
class ReadQRCodeAndReport:

    def __init__(self, logger):

        # Input Parameters
        self.logger = logger

        # Created Parameters
        self.webcam = cv2.VideoCapture(0)
        self.webcam.set(10,0.01) # Set brightness
        self.qrReader = QRCodeReader(self.webcam, logger)
        self.lastQRCode = None

    def execute(self):

        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 0))  # connecting to a UDP address doesn't send packets

        turtle_name = TurtleInfo.GetTurtleName()
        ip_address = TurtleInfo.GetCurrentAddress()

        self.logger.info('Turtle Name: '+turtle_name)
        self.logger.info('Turtle IP: '+ip_address)

        while(True):
            ret, img = self.webcam.read()

            # get QR Code if it exists
            qrCode = self.qrReader.readImage(img)

            if(qrCode != None):
                print(qrCode)
                if(qrCode.startswith('connect:')):
                    arguments = qrCode[8:].split('&')
                    turtle_id = arguments[0].split('=')[1]
                    self.logger.info('Turtle_id:'+turtle_id)
                    ConnectToServer.PingServer(turtle_name, ip_address, turtle_id)
                    break

        config = ConfigFileManager()
        config.WriteParams(turtle_name, turtle_id, ip_address)
class ReadQRCodes:

    def __init__(self, logger):

        # Input Parameters
        self.logger = logger

        # Created Parameters
        self.webcam = cv2.VideoCapture(0)
        self.webcam.set(10,0.01) # Set brightness
        self.qrReader = QRCodeReader(self.webcam, logger)
        self.lastQRCode = None

    def execute(self):

        counter = 0

        while(True):
            ret, img = self.webcam.read()

            # get QR Code if it exists
            qrCode = self.qrReader.readImage(img)

            print(qrCode)
Exemple #4
0
 def test_read_and_write(self):
     reader = QR.QRCodeReader()
     im = reader.generate_image(QR.QRCode(url="abc"))
     url = reader.get_qrcode_data(im).url
     self.assertEqual(url, "abc")
Exemple #5
0
 def test_pure(self):
     im = Image.open(get_img_path("pure_qrcode.jpg"))
     reader = QR.QRCodeReader()
     data = reader.get_qrcode_data(im)
     url = data.url
     self.assertEqual(url, "https://weixin.qq.com/g/A10Tsm5HwB87ITpB")
def qrcode():
    if request.method == 'GET':
        id = request.args.get('id')
        if id == None:
            return make_response(
                jsonify({"err_msg": "You need to input a valid id"}), 400)
        try:
            int(id)
        except:
            return make_response(
                jsonify({"err_msg": "You need to input a valid id"}), 400)

        qrInfo = QRCodeDb.query.get(id)
        if qrInfo != None:
            reader = QR.QRCodeReader()
            tm = time.gmtime(qrInfo.expire_time)
            image = reader.generate_image(
                QR.QRCode(url=qrInfo.url,
                          name=qrInfo.name,
                          date=(tm.tm_mon, tm.tm_mday)))
            qrInfo.read = qrInfo.read + 1
            db.session.commit()
            # Convert the image into Bytes
            file = io.BytesIO()
            image.save(file, 'jpeg')
            file.seek(0)
            return send_file(file,
                             as_attachment=True,
                             attachment_filename='myfile.jpg')
        else:
            return make_response(
                jsonify({"err_msg": "Cannot find the id in database"}), 404)

    if request.method == 'POST':
        file = request.files.get("img")
        if file == None:
            return make_response(
                jsonify({
                    "err_msg":
                    "Cannot find the attached file. It must be a form-data contains the key pair 'img':imgFile"
                }), 400)
        image = None
        try:
            image = Image.open(file)
        except:
            return make_response(
                jsonify({"err_msg": "The file is not a valid image"}), 400)

        if image != None:
            reader = QR.QRCodeReader()
            qrcode = reader.get_qrcode_data(image)
            if qrcode == None:
                return make_response(
                    jsonify({"err_msg": "Cannot read QRCode from the image."}),
                    400)
            url = qrcode.url
            # Check whether url is a valid wechat group url
            if not url.startswith("https://weixin.qq.com/g/"):
                return make_response(
                    jsonify({
                        "err_msg":
                        "The QRCode is not a valid WeChat group code."
                    }), 400)

            expireTime = qrcode.get_expire_time()
            print(expireTime, qrcode.date, time.time())
            if expireTime < time.time():
                return make_response(
                    jsonify({"err_msg": "The QRCode is already expired"}), 400)
            # Generate the session_id and session_time pair
            session_id = base64.urlsafe_b64encode(
                os.urandom(24)).decode('utf-8')
            session_time = time.time()
            # Check same QRcode
            urlDb = QRCodeDb.query.filter_by(url=url).first()
            if urlDb == None:
                maxId = db.session.query(db.func.max(QRCodeDb.id)).scalar()
                qrInfo = QRCodeDb()
                qrInfo.id = maxId + 1 if maxId != None else 1
                qrInfo.url = url
                qrInfo.add_time = time.time()
                qrInfo.expire_time = expireTime
                qrInfo.name = ""
                qrInfo.tags = ""
                qrInfo.description = ""
                qrInfo.search_text = qrcode.name
                qrInfo.session_id = session_id
                qrInfo.session_time = session_time
                qrInfo.thumbnail = reader.generate_image_base64(qrcode,
                                                                thumbnail=True)
                qrInfo.fingerprint = hashlib.md5(image.tobytes()).hexdigest()
                db.session.add(qrInfo)
                db.session.commit()
                return make_response(
                    jsonify(qrInfo.to_dict(include=['session_id'])), 201)
            else:
                if hashlib.md5(
                        image.tobytes()).hexdigest() == urlDb.fingerprint:
                    urlDb.session_id = session_id
                    urlDb.session_time = session_time
                    db.session.commit()
                    return make_response(
                        jsonify(urlDb.to_dict(include=['session_id'])), 200)
                else:
                    return make_response(
                        jsonify({
                            "err_msg":
                            "This QRCode has been uploaded and you do not have the access to modify it."
                        }), 400)

    return make_response("Invalid request method, only support GET or POST",
                         405)
# other published packages
from flask import Flask, request, send_file, render_template, make_response, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS

from PIL import Image

# our packages
from QRCodeReader import QRCodeReader as QR

DATABASE_URL = None
if os.environ.get('DATABASE_URL') != None:
    DATABASE_URL = os.environ.get('DATABASE_URL')

if os.environ.get('TESSERACT_PATH') != None:
    QR.set_tesseract_path(os.environ.get('TESSERACT_PATH'))

# 10 minutes for timeout
SESSION_TIMEOUT = 600
# Database input value limits
DB_INTEGER_MAX = 2147483647
DB_STRING256_MAX = 256
DB_TEXT_MAX = 65535
DB_SESSION_ID_LEN = 32

app = Flask(__name__, static_url_path='/static')

app.config['SQLALCHEMY_DATABASE_URI'] = DATABASE_URL
CORS(app)
db = SQLAlchemy(app)
 def test_get_date_Chinese_system(self):
     reader = QR.QRCodeReader()
     date = reader.get_date(
         self.test_image_space_between_groupname_ChineseDate)
     self.assertEqual(date, (5, 4))
 def test_get_date_Chinese_system2(self):
     reader = QR.QRCodeReader()
     date = reader.get_date(self.test_image_date_5_23)
     self.assertEqual(date, (5, 23))
 def test_get_pureqrcode_date(self):
     reader = QR.QRCodeReader()
     date = reader.get_date(self.test_image_pureQRCode)
     self.assertEqual(date, None)
 def test_get_purecode_group_name(self):
     reader = QR.QRCodeReader()
     text = reader.get_group_name(self.test_image_pureQRCode)
     # print(text)
     self.assertEqual(text, '')
 def test_get_position_func(self):
     coordinate = np.zeros(8)  #decide shape
     reader = QR.QRCodeReader()
     result = reader.get_position(
         self.test_image_twoline_groupname_EnglishDate, coordinate)
     self.assertTrue(result)
 def test_add_date_separated_by_slash_2(self):
     reader = QR.QRCodeReader()
     new_image = reader.generate_image(QR.QRCode(date='5/4'))
     date = reader.get_date(new_image)
     self.assertEqual(date, (5, 4))
 def test_get_date_English_system(self):
     reader = QR.QRCodeReader()
     date = reader.get_date(self.test_image_twoline_groupname_EnglishDate)
     self.assertEqual(date, (5, 9))