diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a0a69b9a2be63645d19bdeb0b8ad9bb278f3dee2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# read the doc: https://huggingface.co./docs/hub/spaces-sdks-docker +# you will also find guides on how best to write your Dockerfile + +FROM python:3.11.4 + +WORKDIR /code + +COPY ./requirements.txt /code/requirements.txt + +RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt + +COPY . . + +CMD ["gunicorn", "-b" , "0.0.0.0:7860" "app:app"] \ No newline at end of file diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ec9d0ed11efd1e2a1f56c437c3d879c10f5372b Binary files /dev/null and b/__pycache__/app.cpython-310.pyc differ diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0eafba22d856a11e8be4fd3d09557010b63a31a2 Binary files /dev/null and b/__pycache__/app.cpython-311.pyc differ diff --git a/__pycache__/app.cpython-38.pyc b/__pycache__/app.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e9e95c3682bd4f041e0e61b4db315a220a069e5 Binary files /dev/null and b/__pycache__/app.cpython-38.pyc differ diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..5795417fcb8e640aa9c61e6705ab6db9b6ca26ce --- /dev/null +++ b/app.py @@ -0,0 +1,223 @@ +import pytesseract +from flask import Flask, request, render_template, jsonify, send_file, redirect, url_for, flash, send_from_directory +from PIL import Image, ImageDraw +import torch +from transformers import LayoutLMv2ForTokenClassification, LayoutLMv3Tokenizer +import csv +import json +import subprocess +import os +import torch +import warnings +from PIL import Image +import sys +from fastai import * +from fastai.vision import * +from fastai.metrics import error_rate +from werkzeug.utils import secure_filename +import pandas as pd +from itertools import zip_longest +import inspect +from threading import Lock + +import warnings + +# Ignore SourceChangeWarning +warnings.filterwarnings("ignore", category=DeprecationWarning) +# warnings.filterwarnings("ignore", category=SourceChangeWarning) + + +UPLOAD_FOLDER = 'static/uploads' +if not os.path.exists(UPLOAD_FOLDER): + os.makedirs(UPLOAD_FOLDER) + +ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg'} + +app = Flask(__name__) +app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER +app.config['SECRET_KEY'] = 'supersecretkey' + + +@app.route('/', methods=['GET', 'POST']) +def index(): + return render_template('index.html') + + +def allowed_file(filename): + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + + +@app.route('/upload', methods=['GET', 'POST']) +def upload_file(): + if request.method == 'POST': + if 'file' not in request.files: + resp = jsonify({'message' : 'No file part in the request'}) + resp.status_code = 400 + return resp + file = request.files['file'] + if file.filename == '': + flash('No selected file') + return redirect(request.url) + if file and allowed_file(file.filename): + filename = secure_filename(file.filename) + file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) + return redirect(url_for('rename_file', old_name=filename)) + return render_template('index.html') + + +def make_prediction(image_path): + try: + temp = pathlib.PosixPath # Save the original state + pathlib.PosixPath = pathlib.WindowsPath # Change to WindowsPath temporarily + + model_path = Path(r'model\export') + + learner = load_learner(model_path) + + # Open the image using fastai's open_image function + image = open_image(image_path) + + # Make a prediction + prediction_class, prediction_idx, probabilities = learner.predict(image) + + # If you want the predicted class as a string + predicted_class_str = str(prediction_class) + + return predicted_class_str + + except Exception as e: + return {"error": str(e)} + finally: + pathlib.PosixPath = temp + + +@app.route('/rename/', methods=['GET', 'POST']) +def rename_file(old_name): + new_name = 'temp.jpg' + file_path = os.path.join(app.config['UPLOAD_FOLDER'], old_name) + new_file_path = os.path.join(app.config['UPLOAD_FOLDER'], new_name) + + if os.path.exists(file_path): + shutil.move(file_path, new_file_path) + + # Call make_prediction automatically + prediction_result = make_prediction(new_file_path) + + return render_template('extractor.html', uploaded_file=new_name, old_name=old_name, prediction_result=prediction_result) + else: + return 'File not found' + + +@app.route('/get_inference_image') +def get_inference_image(): + # Assuming the new image is stored in the 'inferenced' folder with the name 'temp_inference.jpg' + inferenced_image = 'inferenced/temp_inference.jpg' + return jsonify(updatedImagePath=inferenced_image), 200 # Return the image path with a 200 status code + +# Define a lock object +inference_lock = Lock() + +@app.route('/run_inference', methods=['GET']) +def run_inference(): + # print(f"run_inference was called from {inspect.stack()[1].filename} at line {inspect.stack()[1].lineno}") + if inference_lock.locked(): + return '', 204 # Return an empty response with a 204 status code + + # Acquire the lock before starting the inference process + with inference_lock: + try: + + model_path = r"model" # path to Layoutlmv3 model + images_path = r"static/uploads" # images folder + # Your inference process code here + subprocess.check_call([sys.executable, "static/inference/run_inference.py", "--model_path", model_path, "--images_path", images_path]) + return redirect(url_for('create_csv')) + except Exception as e: + return jsonify({"error": str(e)}) + + +# Define a function to replace all symbols with periods +def replace_symbols_with_period(value): + return re.sub(r'\W+', '.', str(value)) +@app.route('/create_csv', methods=['GET']) +def create_csv(): + try: + # Load JSON data from file + json_file_path = r"temp/LayoutlMV3InferenceOutput.json" # path to JSON file + output_file_path = r"inferenced/output.csv" # path to output CSV file + + with open(json_file_path, 'r') as file: + data = json.load(file) + + # Creating a dictionary to store labels and corresponding texts + label_texts = {} + for item in data: + for output_item in item['output']: + label = output_item['label'] + text = output_item['text'] + + if label not in label_texts: + label_texts[label] = [] + label_texts[label].append(text) + + # Order of columns as requested + column_order = [ + 'RECEIPTNUMBER', 'MERCHANTNAME', 'MERCHANTADDRESS', + 'TRANSACTIONDATE', 'TRANSACTIONTIME', 'ITEMS', + 'PRICE', 'TOTAL', 'VATTAX' + ] + + # Writing data to CSV file with ordered columns + with open(output_file_path, 'w', newline='') as csvfile: + csv_writer = csv.DictWriter(csvfile, fieldnames=column_order, delimiter="|") + csv_writer.writeheader() + + # Iterating over each item and price, creating a new row for each pair + items = label_texts.get('ITEMS', []) + prices = label_texts.get('PRICE', []) + + for i in range(max(len(items), len(prices))): + item_words = items[i].split() if i < len(items) else [''] + price_words = prices[i].split() if i < len(prices) else [''] + + for j, (item, price) in enumerate(zip_longest(item_words, price_words, fillvalue='')): + row_data = { + 'ITEMS': item, + 'PRICE': replace_symbols_with_period(price) if 'PRICE' in label_texts else price # Replace symbols with period + } + if j == 0: + row_data.update({ + label: replace_symbols_with_period(label_texts[label][0]) if label in ['TOTAL', 'VATTAX'] and label in label_texts and 0 < len(label_texts[label]) else label_texts[label][0] if label in label_texts and 0 < len(label_texts[label]) else '' + for label in column_order if label not in ['ITEMS', 'PRICE'] + }) + + csv_writer.writerow(row_data) + + return '', 204 # Return an empty response with a 204 status code + except Exception as e: + return jsonify({"error": str(e)}) + + +@app.route('/get_data') +def get_data(): + return send_from_directory('inferenced','output.csv', as_attachment=False) + +from flask import jsonify + +@app.route('/download_csv', methods=['GET']) +def download_csv(): + try: + output_file_path = r"inferenced\output.csv" # path to output CSV file + + # Check if the file exists + if os.path.exists(output_file_path): + return send_file(output_file_path, as_attachment=True, download_name='output.csv') + else: + return jsonify({"error": "CSV file not found"}) + except Exception as e: + return jsonify({"error": f"Download failed: {str(e)}"}) + + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file diff --git a/experiment.ipynb b/experiment.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a07de75a2e5e748b8855f34d23e28a5888f98231 --- /dev/null +++ b/experiment.ipynb @@ -0,0 +1,1337 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# defining inference parameters\n", + "model_path = r\"C:\\Users\\Ayoo\\Desktop\\webapp\\model\" # path to Layoutlmv3 model\n", + "imag_path = r\"C:\\Users\\Ayoo\\Desktop\\webapp\\predictions\\imgs\" # images folder" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "^C\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2023-12-16 02:35:50.587274: I tensorflow/core/util/port.cc:113] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "WARNING:tensorflow:From C:\\Users\\Ayoo\\AppData\\Roaming\\Python\\Python311\\site-packages\\keras\\src\\losses.py:2976: The name tf.losses.sparse_softmax_cross_entropy is deprecated. Please use tf.compat.v1.losses.sparse_softmax_cross_entropy instead.\n", + "\n", + "c:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\site-packages\\transformers\\modeling_utils.py:881: FutureWarning: The `device` argument is deprecated and will be removed in v5 of Transformers.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Preparing for Inference\n", + "Starting\n", + "Preprocessing\n", + "Preprocessing done. Running OCR\n", + "JSON file saved\n", + "OCR done\n", + "Run Done\n", + "Cleaned Tesseract output done\n", + "Word list done\n", + "Box list done\n", + "Prepared for Inference Batch\n", + "Running Flattened Output\n", + "Ready for Annotation\n", + "Annotating Images\n" + ] + } + ], + "source": [ + "! python predictions\\inference\\run_inference.py --model_path {model_path} --images_path {imag_path}" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Looking for C:\\Users\\Ayoo\\.keras-ocr\\craft_mlt_25k.h5\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[20], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mkeras_ocr\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m pipeline\u001b[38;5;241m=\u001b[39m\u001b[43mkeras_ocr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpipeline\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mPipeline\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\site-packages\\keras_ocr\\pipeline.py:20\u001b[0m, in \u001b[0;36mPipeline.__init__\u001b[1;34m(self, detector, recognizer, scale, max_size)\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, detector\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, recognizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, scale\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m, max_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2048\u001b[39m):\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m detector \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m---> 20\u001b[0m detector \u001b[38;5;241m=\u001b[39m \u001b[43mdetection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDetector\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 21\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m recognizer \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 22\u001b[0m recognizer \u001b[38;5;241m=\u001b[39m recognition\u001b[38;5;241m.\u001b[39mRecognizer()\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\site-packages\\keras_ocr\\detection.py:686\u001b[0m, in \u001b[0;36mDetector.__init__\u001b[1;34m(self, weights, load_from_torch, optimizer, backbone_name)\u001b[0m\n\u001b[0;32m 682\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m (\n\u001b[0;32m 683\u001b[0m pretrained_key \u001b[38;5;129;01min\u001b[39;00m PRETRAINED_WEIGHTS\n\u001b[0;32m 684\u001b[0m ), \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mSelected weights configuration not found.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 685\u001b[0m weights_config \u001b[38;5;241m=\u001b[39m PRETRAINED_WEIGHTS[pretrained_key]\n\u001b[1;32m--> 686\u001b[0m weights_path \u001b[38;5;241m=\u001b[39m \u001b[43mtools\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdownload_and_verify\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 687\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_config\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43murl\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 688\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_config\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfilename\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 689\u001b[0m \u001b[43m \u001b[49m\u001b[43msha256\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mweights_config\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43msha256\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 690\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 691\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 692\u001b[0m weights_path \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\site-packages\\keras_ocr\\tools.py:527\u001b[0m, in \u001b[0;36mdownload_and_verify\u001b[1;34m(url, sha256, cache_dir, verbose, filename)\u001b[0m\n\u001b[0;32m 525\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDownloading \u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m+\u001b[39m filepath)\n\u001b[0;32m 526\u001b[0m urllib\u001b[38;5;241m.\u001b[39mrequest\u001b[38;5;241m.\u001b[39murlretrieve(url, filepath)\n\u001b[1;32m--> 527\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m sha256 \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m sha256 \u001b[38;5;241m==\u001b[39m \u001b[43msha256sum\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 528\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilepath\u001b[49m\n\u001b[0;32m 529\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mError occurred verifying sha256.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 530\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m filepath\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\site-packages\\keras_ocr\\tools.py:491\u001b[0m, in \u001b[0;36msha256sum\u001b[1;34m(filename)\u001b[0m\n\u001b[0;32m 489\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28mopen\u001b[39m(filename, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrb\u001b[39m\u001b[38;5;124m\"\u001b[39m, buffering\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m) \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m 490\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28miter\u001b[39m(\u001b[38;5;28;01mlambda\u001b[39;00m: f\u001b[38;5;241m.\u001b[39mreadinto(mv), \u001b[38;5;241m0\u001b[39m): \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m--> 491\u001b[0m h\u001b[38;5;241m.\u001b[39mupdate(mv[:n])\n\u001b[0;32m 492\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m h\u001b[38;5;241m.\u001b[39mhexdigest()\n", + "\u001b[1;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "import keras_ocr\n", + "pipeline=keras_ocr.pipeline.Pipeline()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1/1 [==============================] - 34s 34s/step\n", + "7/7 [==============================] - 94s 13s/step\n" + ] + }, + { + "data": { + "text/plain": [ + "[[('feleven',\n", + " array([[212.58102 , 34.90136 ],\n", + " [577.45886 , 34.901367],\n", + " [577.45886 , 114.22263 ],\n", + " [212.58102 , 114.22263 ]], dtype=float32)),\n", + " ('es',\n", + " array([[574.28613, 82.49414],\n", + " [593.32324, 82.49414],\n", + " [593.32324, 107.87695],\n", + " [574.28613, 107.87695]], dtype=float32)),\n", + " ('store',\n", + " array([[453.71777, 203.0625 ],\n", + " [567.9404 , 203.0625 ],\n", + " [567.9404 , 253.82812],\n", + " [453.71777, 253.82812]], dtype=float32)),\n", + " ('nahj',\n", + " array([[120.56836, 209.4082 ],\n", + " [187.19824, 209.4082 ],\n", + " [187.19824, 253.82812],\n", + " [120.56836, 253.82812]], dtype=float32)),\n", + " ('conveni',\n", + " array([[203.0625 , 209.4082 ],\n", + " [352.18652, 209.4082 ],\n", + " [352.18652, 253.82812],\n", + " [203.0625 , 253.82812]], dtype=float32)),\n", + " ('enco',\n", + " array([[352.18652, 209.4082 ],\n", + " [441.02637, 209.4082 ],\n", + " [441.02637, 253.82812],\n", + " [352.18652, 253.82812]], dtype=float32)),\n", + " ('qwned',\n", + " array([[ 34.901367, 260.17383 ],\n", + " [149.12402 , 260.17383 ],\n", + " [149.12402 , 304.59375 ],\n", + " [ 34.901367, 304.59375 ]], dtype=float32)),\n", + " ('operated',\n", + " array([[203.0625 , 260.17383],\n", + " [377.56934, 260.17383],\n", + " [377.56934, 307.7666 ],\n", + " [203.0625 , 307.7666 ]], dtype=float32)),\n", + " ('nancy',\n", + " array([[475.92773, 260.17383],\n", + " [586.97754, 260.17383],\n", + " [586.97754, 304.59375],\n", + " [475.92773, 304.59375]], dtype=float32)),\n", + " ('byl',\n", + " array([[393.4336 , 263.34668],\n", + " [456.89062, 263.34668],\n", + " [456.89062, 307.7666 ],\n", + " [393.4336 , 307.7666 ]], dtype=float32)),\n", + " ('a',\n", + " array([[602.8418 , 263.34668],\n", + " [634.5703 , 263.34668],\n", + " [634.5703 , 301.4209 ],\n", + " [602.8418 , 301.4209 ]], dtype=float32)),\n", + " ('cl',\n", + " array([[244.30957, 314.1123 ],\n", + " [288.7295 , 314.1123 ],\n", + " [288.7295 , 355.35938],\n", + " [244.30957, 355.35938]], dtype=float32)),\n", + " ('inacosa',\n", + " array([[291.90234, 314.1123 ],\n", + " [437.85352, 314.1123 ],\n", + " [437.85352, 355.35938],\n", + " [291.90234, 355.35938]], dtype=float32)),\n", + " ('tregtin',\n", + " array([[123.74121, 358.53223],\n", + " [276.0381 , 358.53223],\n", + " [276.0381 , 406.125 ],\n", + " [123.74121, 406.125 ]], dtype=float32)),\n", + " ('va',\n", + " array([[ 76.14844, 361.70508],\n", + " [123.74121, 361.70508],\n", + " [123.74121, 406.125 ],\n", + " [ 76.14844, 406.125 ]], dtype=float32)),\n", + " ('hssysigm',\n", + " array([[285.55664, 361.70508],\n", + " [485.4463 , 361.70508],\n", + " [485.4463 , 406.125 ],\n", + " [285.55664, 406.125 ]], dtype=float32)),\n", + " ('gbsr0o2',\n", + " array([[475.92773, 361.70508],\n", + " [631.39746, 361.70508],\n", + " [631.39746, 406.125 ],\n", + " [475.92773, 406.125 ]], dtype=float32)),\n", + " ('pobli',\n", + " array([[ 98.3584 , 412.4707 ],\n", + " [187.19824, 412.4707 ],\n", + " [187.19824, 460.06348],\n", + " [ 98.3584 , 460.06348]], dtype=float32)),\n", + " ('acii',\n", + " array([[180.85254, 415.64355],\n", + " [250.65527, 415.64355],\n", + " [250.65527, 460.06348],\n", + " [180.85254, 460.06348]], dtype=float32)),\n", + " ('leons',\n", + " array([[326.8037 , 415.64355],\n", + " [434.68066, 415.64355],\n", + " [434.68066, 460.06348],\n", + " [326.8037 , 460.06348]], dtype=float32)),\n", + " ('ilulos',\n", + " array([[456.89062, 415.64355],\n", + " [602.8418 , 415.64355],\n", + " [602.8418 , 460.06348],\n", + " [456.89062, 460.06348]], dtype=float32)),\n", + " ('ors',\n", + " array([[241.13672, 418.8164 ],\n", + " [304.59375, 418.8164 ],\n", + " [304.59375, 456.89062],\n", + " [241.13672, 456.89062]], dtype=float32)),\n", + " ('fit',\n", + " array([[225.27246, 466.40918],\n", + " [291.90234, 466.40918],\n", + " [291.90234, 510.8291 ],\n", + " [225.27246, 510.8291 ]], dtype=float32)),\n", + " ('ipp',\n", + " array([[314.1123 , 469.58203],\n", + " [380.7422 , 469.58203],\n", + " [380.7422 , 514.00195],\n", + " [314.1123 , 514.00195]], dtype=float32)),\n", + " ('ines',\n", + " array([[374.39648, 469.58203],\n", + " [463.23633, 469.58203],\n", + " [463.23633, 510.8291 ],\n", + " [374.39648, 510.8291 ]], dtype=float32)),\n", + " ('tel',\n", + " array([[225.27246, 517.1748 ],\n", + " [288.7295 , 517.1748 ],\n", + " [288.7295 , 561.5947 ],\n", + " [225.27246, 561.5947 ]], dtype=float32)),\n", + " ('null',\n", + " array([[371.22363, 517.1748 ],\n", + " [466.40918, 517.1748 ],\n", + " [466.40918, 561.5947 ],\n", + " [371.22363, 561.5947 ]], dtype=float32)),\n", + " ('h',\n", + " array([[307.7666 , 520.34766],\n", + " [339.49512, 520.34766],\n", + " [339.49512, 558.4219 ],\n", + " [307.7666 , 558.4219 ]], dtype=float32)),\n", + " ('osd1',\n", + " array([[ 98.3584 , 618.70605],\n", + " [206.23535, 618.70605],\n", + " [206.23535, 663.126 ],\n", + " [ 98.3584 , 663.126 ]], dtype=float32)),\n", + " ('fzozx',\n", + " array([[203.0625 , 618.70605],\n", + " [314.1123 , 618.70605],\n", + " [314.1123 , 663.126 ],\n", + " [203.0625 , 663.126 ]], dtype=float32)),\n", + " ('leoost',\n", + " array([[434.68066, 618.70605],\n", + " [609.1875 , 618.70605],\n", + " [609.1875 , 663.126 ],\n", + " [434.68066, 663.126 ]], dtype=float32)),\n", + " ('smony',\n", + " array([[314.1123 , 621.8789 ],\n", + " [415.64355, 621.8789 ],\n", + " [415.64355, 663.126 ],\n", + " [314.1123 , 663.126 ]], dtype=float32)),\n", + " ('rcpt',\n", + " array([[ 12.691406, 723.41016 ],\n", + " [101.53125 , 723.41016 ],\n", + " [101.53125 , 767.8301 ],\n", + " [ 12.691406, 767.8301 ]], dtype=float32)),\n", + " ('h2a81',\n", + " array([[117.39551, 723.41016],\n", + " [228.44531, 723.41016],\n", + " [228.44531, 767.8301 ],\n", + " [117.39551, 767.8301 ]], dtype=float32)),\n", + " ('3a7',\n", + " array([[218.92676, 723.41016],\n", + " [291.90234, 723.41016],\n", + " [291.90234, 767.8301 ],\n", + " [218.92676, 767.8301 ]], dtype=float32)),\n", + " ('rcft',\n", + " array([[475.92773, 723.41016],\n", + " [567.9404 , 723.41016],\n", + " [567.9404 , 767.8301 ],\n", + " [475.92773, 767.8301 ]], dtype=float32)),\n", + " ('cnt',\n", + " array([[580.63184, 723.41016],\n", + " [647.2617 , 723.41016],\n", + " [647.2617 , 764.6572 ],\n", + " [580.63184, 764.6572 ]], dtype=float32)),\n", + " ('ho',\n", + " array([[637.74316, 723.41016],\n", + " [694.8545 , 723.41016],\n", + " [694.8545 , 767.8301 ],\n", + " [637.74316, 767.8301 ]], dtype=float32)),\n", + " ('storehsise',\n", + " array([[ 12.691406, 774.1758 ],\n", + " [231.61816 , 774.1758 ],\n", + " [231.61816 , 818.5957 ],\n", + " [ 12.691406, 818.5957 ]], dtype=float32)),\n", + " ('snit',\n", + " array([[434.68066, 774.1758 ],\n", + " [504.4834 , 774.1758 ],\n", + " [504.4834 , 818.5957 ],\n", + " [434.68066, 818.5957 ]], dtype=float32)),\n", + " ('xtiakt',\n", + " array([[520.34766, 774.1758 ],\n", + " [650.4346 , 774.1758 ],\n", + " [650.4346 , 818.5957 ],\n", + " [520.34766, 818.5957 ]], dtype=float32)),\n", + " ('70',\n", + " array([[647.2617, 774.1758],\n", + " [694.8545, 774.1758],\n", + " [694.8545, 818.5957],\n", + " [647.2617, 818.5957]], dtype=float32)),\n", + " ('091',\n", + " array([[326.8037 , 821.76855],\n", + " [396.60645, 821.76855],\n", + " [396.60645, 869.3613 ],\n", + " [326.8037 , 869.3613 ]], dtype=float32)),\n", + " ('min',\n", + " array([[ 15.864258, 824.9414 ],\n", + " [ 85.66699 , 824.9414 ],\n", + " [ 85.66699 , 869.3613 ],\n", + " [ 15.864258, 869.3613 ]], dtype=float32)),\n", + " ('1811201',\n", + " array([[161.81543, 824.9414 ],\n", + " [310.93945, 824.9414 ],\n", + " [310.93945, 869.3613 ],\n", + " [161.81543, 869.3613 ]], dtype=float32)),\n", + " ('105s1',\n", + " array([[437.85352, 824.9414 ],\n", + " [520.34766, 824.9414 ],\n", + " [520.34766, 869.3613 ],\n", + " [437.85352, 869.3613 ]], dtype=float32)),\n", + " ('ha',\n", + " array([[ 98.3584 , 828.11426],\n", + " [139.60547, 828.11426],\n", + " [139.60547, 869.3613 ],\n", + " [ 98.3584 , 869.3613 ]], dtype=float32)),\n", + " ('41',\n", + " array([[393.4336 , 828.11426],\n", + " [441.02637, 828.11426],\n", + " [441.02637, 869.3613 ],\n", + " [393.4336 , 869.3613 ]], dtype=float32)),\n", + " ('staff',\n", + " array([[ 12.691406, 878.8799 ],\n", + " [126.91406 , 878.8799 ],\n", + " [126.91406 , 923.2998 ],\n", + " [ 12.691406, 923.2998 ]], dtype=float32)),\n", + " ('angel',\n", + " array([[142.77832, 878.8799 ],\n", + " [247.48242, 878.8799 ],\n", + " [247.48242, 923.2998 ],\n", + " [142.77832, 923.2998 ]], dtype=float32)),\n", + " ('duantle',\n", + " array([[329.97656, 878.8799 ],\n", + " [463.23633, 878.8799 ],\n", + " [463.23633, 923.2998 ],\n", + " [329.97656, 923.2998 ]], dtype=float32)),\n", + " ('i',\n", + " array([[250.65527, 885.2256 ],\n", + " [266.51953, 885.2256 ],\n", + " [266.51953, 916.9541 ],\n", + " [250.65527, 916.9541 ]], dtype=float32)),\n", + " ('ca',\n", + " array([[263.34668, 885.2256 ],\n", + " [314.1123 , 885.2256 ],\n", + " [314.1123 , 923.2998 ],\n", + " [263.34668, 923.2998 ]], dtype=float32)),\n", + " ('fkoreanbun',\n", + " array([[ 15.864258, 980.41113 ],\n", + " [ 250.65527 , 980.41113 ],\n", + " [ 250.65527 , 1024.831 ],\n", + " [ 15.864258, 1024.831 ]], dtype=float32)),\n", + " ('s5',\n", + " array([[ 561.5947 , 980.41113],\n", + " [ 612.36035, 980.41113],\n", + " [ 612.36035, 1021.6582 ],\n", + " [ 561.5947 , 1021.6582 ]], dtype=float32)),\n", + " ('oflj',\n", + " array([[ 621.8789 , 980.41113],\n", + " [ 694.8545 , 980.41113],\n", + " [ 694.8545 , 1021.6582 ],\n", + " [ 621.8789 , 1021.6582 ]], dtype=float32)),\n", + " ('nis',\n", + " array([[ 15.864258, 1031.1768 ],\n", + " [ 60.28418 , 1031.1768 ],\n", + " [ 60.28418 , 1075.5967 ],\n", + " [ 15.864258, 1075.5967 ]], dtype=float32)),\n", + " ('inyasabeetig',\n", + " array([[ 104.7041 , 1031.1768 ],\n", + " [ 377.56934, 1031.1768 ],\n", + " [ 377.56934, 1078.7695 ],\n", + " [ 104.7041 , 1078.7695 ]], dtype=float32)),\n", + " ('40',\n", + " array([[ 561.5947, 1031.1768],\n", + " [ 615.5332, 1031.1768],\n", + " [ 615.5332, 1072.4238],\n", + " [ 561.5947, 1072.4238]], dtype=float32)),\n", + " ('oov',\n", + " array([[ 621.8789, 1031.1768],\n", + " [ 694.8545, 1031.1768],\n", + " [ 694.8545, 1072.4238],\n", + " [ 621.8789, 1072.4238]], dtype=float32)),\n", + " ('ss',\n", + " array([[ 53.938477, 1034.3496 ],\n", + " [ 104.7041 , 1034.3496 ],\n", + " [ 104.7041 , 1075.5967 ],\n", + " [ 53.938477, 1075.5967 ]], dtype=float32)),\n", + " ('behotogcremychees',\n", + " array([[ 12.691406, 1081.9424 ],\n", + " [ 399.7793 , 1081.9424 ],\n", + " [ 399.7793 , 1129.5352 ],\n", + " [ 12.691406, 1129.5352 ]], dtype=float32)),\n", + " ('19',\n", + " array([[ 139.60547, 1132.708 ],\n", + " [ 190.3711 , 1132.708 ],\n", + " [ 190.3711 , 1177.1279 ],\n", + " [ 139.60547, 1177.1279 ]], dtype=float32)),\n", + " ('do',\n", + " array([[ 203.0625 , 1135.8809 ],\n", + " [ 250.65527, 1135.8809 ],\n", + " [ 250.65527, 1177.1279 ],\n", + " [ 203.0625 , 1177.1279 ]], dtype=float32)),\n", + " ('a',\n", + " array([[ 266.51953, 1139.0537 ],\n", + " [ 288.7295 , 1139.0537 ],\n", + " [ 288.7295 , 1173.9551 ],\n", + " [ 266.51953, 1173.9551 ]], dtype=float32)),\n", + " ('b',\n", + " array([[ 368.05078, 1135.8809 ],\n", + " [ 396.60645, 1135.8809 ],\n", + " [ 396.60645, 1173.9551 ],\n", + " [ 368.05078, 1173.9551 ]], dtype=float32)),\n", + " ('1544',\n", + " array([[ 539.38477, 1135.8809 ],\n", + " [ 615.5332 , 1135.8809 ],\n", + " [ 615.5332 , 1177.1279 ],\n", + " [ 539.38477, 1177.1279 ]], dtype=float32)),\n", + " ('oou',\n", + " array([[ 621.8789, 1135.8809],\n", + " [ 694.8545, 1135.8809],\n", + " [ 694.8545, 1177.1279],\n", + " [ 621.8789, 1177.1279]], dtype=float32)),\n", + " ('choeog',\n", + " array([[ 266.51953, 1183.4736 ],\n", + " [ 399.7793 , 1183.4736 ],\n", + " [ 399.7793 , 1231.0664 ],\n", + " [ 266.51953, 1231.0664 ]], dtype=float32)),\n", + " ('chocvronz',\n", + " array([[ 12.691406, 1186.6465 ],\n", + " [ 209.4082 , 1186.6465 ],\n", + " [ 209.4082 , 1231.0664 ],\n", + " [ 12.691406, 1231.0664 ]], dtype=float32)),\n", + " ('in1',\n", + " array([[ 206.23535, 1186.6465 ],\n", + " [ 269.69238, 1186.6465 ],\n", + " [ 269.69238, 1227.8936 ],\n", + " [ 206.23535, 1227.8936 ]], dtype=float32)),\n", + " ('1s',\n", + " array([[ 142.77832, 1237.4121 ],\n", + " [ 206.23535, 1237.4121 ],\n", + " [ 206.23535, 1281.832 ],\n", + " [ 142.77832, 1281.832 ]], dtype=float32)),\n", + " ('0',\n", + " array([[ 203.0625 , 1237.4121 ],\n", + " [ 250.65527, 1237.4121 ],\n", + " [ 250.65527, 1281.832 ],\n", + " [ 203.0625 , 1281.832 ]], dtype=float32)),\n", + " ('x',\n", + " array([[ 263.34668, 1237.4121 ],\n", + " [ 291.90234, 1237.4121 ],\n", + " [ 291.90234, 1275.4863 ],\n", + " [ 263.34668, 1275.4863 ]], dtype=float32)),\n", + " ('l',\n", + " array([[ 371.22363, 1237.4121 ],\n", + " [ 396.60645, 1237.4121 ],\n", + " [ 396.60645, 1275.4863 ],\n", + " [ 371.22363, 1275.4863 ]], dtype=float32)),\n", + " ('50',\n", + " array([[ 561.5947, 1237.4121],\n", + " [ 615.5332, 1237.4121],\n", + " [ 615.5332, 1278.6592],\n", + " [ 561.5947, 1278.6592]], dtype=float32)),\n", + " ('doq',\n", + " array([[ 621.8789, 1237.4121],\n", + " [ 694.8545, 1237.4121],\n", + " [ 694.8545, 1278.6592],\n", + " [ 621.8789, 1278.6592]], dtype=float32)),\n", + " ('total',\n", + " array([[ 15.864258, 1338.9434 ],\n", + " [ 120.56836 , 1338.9434 ],\n", + " [ 120.56836 , 1386.5361 ],\n", + " [ 15.864258, 1386.5361 ]], dtype=float32)),\n", + " ('10',\n", + " array([[ 145.95117, 1338.9434 ],\n", + " [ 225.27246, 1338.9434 ],\n", + " [ 225.27246, 1383.3633 ],\n", + " [ 145.95117, 1383.3633 ]], dtype=float32)),\n", + " ('3599',\n", + " array([[ 558.4219 , 1338.9434 ],\n", + " [ 637.74316, 1338.9434 ],\n", + " [ 637.74316, 1383.3633 ],\n", + " [ 558.4219 , 1383.3633 ]], dtype=float32)),\n", + " ('oq',\n", + " array([[ 640.916 , 1342.1162],\n", + " [ 694.8545, 1342.1162],\n", + " [ 694.8545, 1383.3633],\n", + " [ 640.916 , 1383.3633]], dtype=float32)),\n", + " ('cash',\n", + " array([[ 53.938477, 1389.709 ],\n", + " [ 149.12402 , 1389.709 ],\n", + " [ 149.12402 , 1434.1289 ],\n", + " [ 53.938477, 1434.1289 ]], dtype=float32)),\n", + " ('dool',\n", + " array([[ 558.4219, 1389.709 ],\n", + " [ 647.2617, 1389.709 ],\n", + " [ 647.2617, 1434.1289],\n", + " [ 558.4219, 1434.1289]], dtype=float32)),\n", + " ('o0',\n", + " array([[ 640.916 , 1389.709 ],\n", + " [ 691.68164, 1389.709 ],\n", + " [ 691.68164, 1434.1289 ],\n", + " [ 640.916 , 1434.1289 ]], dtype=float32)),\n", + " ('change',\n", + " array([[ 53.938477, 1440.4746 ],\n", + " [ 187.19824 , 1440.4746 ],\n", + " [ 187.19824 , 1484.8945 ],\n", + " [ 53.938477, 1484.8945 ]], dtype=float32)),\n", + " ('841',\n", + " array([[ 558.4219, 1440.4746],\n", + " [ 628.2246, 1440.4746],\n", + " [ 628.2246, 1484.8945],\n", + " [ 558.4219, 1484.8945]], dtype=float32)),\n", + " ('sdo',\n", + " array([[ 625.05176, 1440.4746 ],\n", + " [ 694.8545 , 1440.4746 ],\n", + " [ 694.8545 , 1484.8945 ],\n", + " [ 625.05176, 1484.8945 ]], dtype=float32)),\n", + " ('vatable',\n", + " array([[ 53.938477, 1545.1787 ],\n", + " [ 209.4082 , 1545.1787 ],\n", + " [ 209.4082 , 1589.5986 ],\n", + " [ 53.938477, 1589.5986 ]], dtype=float32)),\n", + " ('szos',\n", + " array([[ 558.4219 , 1545.1787 ],\n", + " [ 644.08887, 1545.1787 ],\n", + " [ 644.08887, 1589.5986 ],\n", + " [ 558.4219 , 1589.5986 ]], dtype=float32)),\n", + " ('54',\n", + " array([[ 640.916 , 1545.1787 ],\n", + " [ 691.68164, 1545.1787 ],\n", + " [ 691.68164, 1589.5986 ],\n", + " [ 640.916 , 1589.5986 ]], dtype=float32)),\n", + " ('vat',\n", + " array([[ 53.938477, 1595.9443 ],\n", + " [ 145.95117 , 1595.9443 ],\n", + " [ 145.95117 , 1646.71 ],\n", + " [ 53.938477, 1646.71 ]], dtype=float32)),\n", + " ('8b',\n", + " array([[ 580.63184, 1595.9443 ],\n", + " [ 644.08887, 1595.9443 ],\n", + " [ 644.08887, 1640.3643 ],\n", + " [ 580.63184, 1640.3643 ]], dtype=float32)),\n", + " ('tax',\n", + " array([[ 139.60547, 1599.1172 ],\n", + " [ 209.4082 , 1599.1172 ],\n", + " [ 209.4082 , 1640.3643 ],\n", + " [ 139.60547, 1640.3643 ]], dtype=float32)),\n", + " ('4g',\n", + " array([[ 644.08887, 1599.1172 ],\n", + " [ 691.68164, 1599.1172 ],\n", + " [ 691.68164, 1640.3643 ],\n", + " [ 644.08887, 1640.3643 ]], dtype=float32)),\n", + " ('zerd',\n", + " array([[ 53.938477, 1646.71 ],\n", + " [ 149.12402 , 1646.71 ],\n", + " [ 149.12402 , 1694.3027 ],\n", + " [ 53.938477, 1694.3027 ]], dtype=float32)),\n", + " ('ra',\n", + " array([[ 158.64258, 1649.8828 ],\n", + " [ 209.4082 , 1649.8828 ],\n", + " [ 209.4082 , 1694.3027 ],\n", + " [ 158.64258, 1694.3027 ]], dtype=float32)),\n", + " ('ted',\n", + " array([[ 203.0625 , 1649.8828 ],\n", + " [ 272.86523, 1649.8828 ],\n", + " [ 272.86523, 1691.1299 ],\n", + " [ 203.0625 , 1691.1299 ]], dtype=float32)),\n", + " ('0',\n", + " array([[ 599.66895, 1649.8828 ],\n", + " [ 628.2246 , 1649.8828 ],\n", + " [ 628.2246 , 1687.957 ],\n", + " [ 599.66895, 1687.957 ]], dtype=float32)),\n", + " ('00',\n", + " array([[ 640.916 , 1649.8828],\n", + " [ 694.8545, 1649.8828],\n", + " [ 694.8545, 1691.1299],\n", + " [ 640.916 , 1691.1299]], dtype=float32)),\n", + " ('vat',\n", + " array([[ 53.938477, 1700.6484 ],\n", + " [ 123.74121 , 1700.6484 ],\n", + " [ 123.74121 , 1745.0684 ],\n", + " [ 53.938477, 1745.0684 ]], dtype=float32)),\n", + " ('mexept',\n", + " array([[ 117.39551, 1700.6484 ],\n", + " [ 257.00098, 1700.6484 ],\n", + " [ 257.00098, 1748.2412 ],\n", + " [ 117.39551, 1748.2412 ]], dtype=float32)),\n", + " ('ted',\n", + " array([[ 247.48242, 1700.6484 ],\n", + " [ 314.1123 , 1700.6484 ],\n", + " [ 314.1123 , 1745.0684 ],\n", + " [ 247.48242, 1745.0684 ]], dtype=float32)),\n", + " ('0',\n", + " array([[ 602.8418, 1703.8213],\n", + " [ 628.2246, 1703.8213],\n", + " [ 628.2246, 1738.7227],\n", + " [ 602.8418, 1738.7227]], dtype=float32)),\n", + " ('od',\n", + " array([[ 640.916 , 1703.8213 ],\n", + " [ 691.68164, 1703.8213 ],\n", + " [ 691.68164, 1741.8955 ],\n", + " [ 640.916 , 1741.8955 ]], dtype=float32)),\n", + " ('7616664',\n", + " array([[ 329.97656, 1799.0068 ],\n", + " [ 482.27344, 1799.0068 ],\n", + " [ 482.27344, 1846.5996 ],\n", + " [ 329.97656, 1846.5996 ]], dtype=float32)),\n", + " ('sol',\n", + " array([[ 12.691406, 1802.1797 ],\n", + " [ 79.32129 , 1802.1797 ],\n", + " [ 79.32129 , 1846.5996 ],\n", + " [ 12.691406, 1846.5996 ]], dtype=float32)),\n", + " ('d',\n", + " array([[ 79.32129, 1805.3525 ],\n", + " [ 101.53125, 1805.3525 ],\n", + " [ 101.53125, 1843.4268 ],\n", + " [ 79.32129, 1843.4268 ]], dtype=float32)),\n", + " ('tos',\n", + " array([[ 120.56836, 1802.1797 ],\n", + " [ 184.02539, 1802.1797 ],\n", + " [ 184.02539, 1846.5996 ],\n", + " [ 120.56836, 1846.5996 ]], dtype=float32)),\n", + " ('hobos',\n", + " array([[ 203.0625, 1802.1797],\n", + " [ 333.1494, 1802.1797],\n", + " [ 333.1494, 1846.5996],\n", + " [ 203.0625, 1846.5996]], dtype=float32)),\n", + " ('name',\n", + " array([[ 12.691406, 1852.9453 ],\n", + " [ 104.7041 , 1852.9453 ],\n", + " [ 104.7041 , 1897.3652 ],\n", + " [ 12.691406, 1897.3652 ]], dtype=float32)),\n", + " ('eeten',\n", + " array([[ 126.91406, 1887.8467 ],\n", + " [ 199.88965, 1887.8467 ],\n", + " [ 199.88965, 1897.3652 ],\n", + " [ 126.91406, 1897.3652 ]], dtype=float32)),\n", + " ('addr',\n", + " array([[ 12.691406, 1906.8838 ],\n", + " [ 104.7041 , 1906.8838 ],\n", + " [ 104.7041 , 1948.1309 ],\n", + " [ 12.691406, 1948.1309 ]], dtype=float32)),\n", + " ('ess',\n", + " array([[ 98.3584 , 1910.0566 ],\n", + " [ 168.16113, 1910.0566 ],\n", + " [ 168.16113, 1951.3037 ],\n", + " [ 98.3584 , 1951.3037 ]], dtype=float32)),\n", + " ('tins',\n", + " array([[ 12.691406, 1954.4766 ],\n", + " [ 98.3584 , 1954.4766 ],\n", + " [ 98.3584 , 1998.8965 ],\n", + " [ 12.691406, 1998.8965 ]], dtype=float32)),\n", + " ('fpti',\n", + " array([[ 13.045723, 2057.3926 ],\n", + " [ 81.36672 , 2062.2727 ],\n", + " [ 78.322716, 2104.889 ],\n", + " [ 10.001719, 2100.0088 ]], dtype=float32)),\n", + " ('ippl',\n", + " array([[ 101.53125, 2059.1807 ],\n", + " [ 171.33398, 2059.1807 ],\n", + " [ 171.33398, 2106.7734 ],\n", + " [ 101.53125, 2106.7734 ]], dtype=float32)),\n", + " ('seven',\n", + " array([[ 241.13672, 2059.1807 ],\n", + " [ 355.35938, 2059.1807 ],\n", + " [ 355.35938, 2103.6006 ],\n", + " [ 241.13672, 2103.6006 ]], dtype=float32)),\n", + " ('corpor',\n", + " array([[ 371.50757, 2057.8103 ],\n", + " [ 499.50806, 2065.8103 ],\n", + " [ 496.71796, 2110.4524 ],\n", + " [ 368.7175 , 2102.4526 ]], dtype=float32)),\n", + " ('s',\n", + " array([[ 164.98828, 2065.5264 ],\n", + " [ 180.85254, 2065.5264 ],\n", + " [ 180.85254, 2100.4277 ],\n", + " [ 164.98828, 2100.4277 ]], dtype=float32)),\n", + " ('ne',\n", + " array([[ 177.67969, 2062.3535 ],\n", + " [ 228.44531, 2062.3535 ],\n", + " [ 228.44531, 2103.6006 ],\n", + " [ 177.67969, 2103.6006 ]], dtype=float32)),\n", + " ('at',\n", + " array([[ 494.96484, 2062.3535 ],\n", + " [ 542.5576 , 2062.3535 ],\n", + " [ 542.5576 , 2103.6006 ],\n", + " [ 494.96484, 2103.6006 ]], dtype=float32)),\n", + " ('on',\n", + " array([[ 558.4219, 2065.5264],\n", + " [ 609.1875, 2065.5264],\n", + " [ 609.1875, 2103.6006],\n", + " [ 558.4219, 2103.6006]], dtype=float32)),\n", + " ('jth',\n", + " array([[ 12.691406, 2109.9463 ],\n", + " [ 82.49414 , 2109.9463 ],\n", + " [ 82.49414 , 2154.3662 ],\n", + " [ 12.691406, 2154.3662 ]], dtype=float32)),\n", + " ('the',\n", + " array([[ 225.27246, 2109.9463 ],\n", + " [ 291.90234, 2109.9463 ],\n", + " [ 291.90234, 2154.3662 ],\n", + " [ 225.27246, 2154.3662 ]], dtype=float32)),\n", + " ('co',\n", + " array([[ 304.59375, 2109.9463 ],\n", + " [ 355.35938, 2109.9463 ],\n", + " [ 355.35938, 2154.3662 ],\n", + " [ 304.59375, 2154.3662 ]], dtype=float32)),\n", + " ('tower',\n", + " array([[ 498.1377 , 2109.9463 ],\n", + " [ 606.01465, 2109.9463 ],\n", + " [ 606.01465, 2154.3662 ],\n", + " [ 498.1377 , 2154.3662 ]], dtype=float32)),\n", + " ('f',\n", + " array([[ 95.18555, 2113.1191 ],\n", + " [ 120.56836, 2113.1191 ],\n", + " [ 120.56836, 2151.1934 ],\n", + " [ 95.18555, 2151.1934 ]], dtype=float32)),\n", + " ('t',\n", + " array([[ 352.18652, 2116.292 ],\n", + " [ 368.05078, 2116.292 ],\n", + " [ 368.05078, 2151.1934 ],\n", + " [ 352.18652, 2151.1934 ]], dtype=float32)),\n", + " ('iqor',\n", + " array([[ 120.56836, 2116.292 ],\n", + " [ 206.23535, 2116.292 ],\n", + " [ 206.23535, 2154.3662 ],\n", + " [ 120.56836, 2154.3662 ]], dtype=float32)),\n", + " ('umb',\n", + " array([[ 368.05078, 2116.292 ],\n", + " [ 441.02637, 2116.292 ],\n", + " [ 441.02637, 2154.3662 ],\n", + " [ 368.05078, 2154.3662 ]], dtype=float32)),\n", + " ('id',\n", + " array([[ 434.68066, 2116.292 ],\n", + " [ 479.1006 , 2116.292 ],\n", + " [ 479.1006 , 2154.3662 ],\n", + " [ 434.68066, 2154.3662 ]], dtype=float32)),\n", + " ('avenues',\n", + " array([[ 203.0625 , 2160.712 ],\n", + " [ 349.01367, 2160.712 ],\n", + " [ 349.01367, 2208.3047 ],\n", + " [ 203.0625 , 2208.3047 ]], dtype=float32)),\n", + " ('ort',\n", + " array([[ 31.728516, 2163.8848 ],\n", + " [ 101.53125 , 2163.8848 ],\n", + " [ 101.53125 , 2205.1318 ],\n", + " [ 31.728516, 2205.1318 ]], dtype=float32)),\n", + " ('i',\n", + " array([[ 101.53125, 2167.0576 ],\n", + " [ 114.22266, 2167.0576 ],\n", + " [ 114.22266, 2198.7861 ],\n", + " [ 101.53125, 2198.7861 ]], dtype=float32)),\n", + " ('manda',\n", + " array([[ 368.05078, 2163.8848 ],\n", + " [ 479.1006 , 2163.8848 ],\n", + " [ 479.1006 , 2205.1318 ],\n", + " [ 368.05078, 2205.1318 ]], dtype=float32)),\n", + " ('gas',\n", + " array([[ 117.39551, 2167.0576 ],\n", + " [ 187.19824, 2167.0576 ],\n", + " [ 187.19824, 2211.4775 ],\n", + " [ 117.39551, 2211.4775 ]], dtype=float32)),\n", + " ('l',\n", + " array([[ 479.1006 , 2170.2305 ],\n", + " [ 488.61914, 2170.2305 ],\n", + " [ 488.61914, 2195.6133 ],\n", + " [ 479.1006 , 2195.6133 ]], dtype=float32)),\n", + " ('lyonig',\n", + " array([[ 494.96484, 2170.2305 ],\n", + " [ 606.01465, 2170.2305 ],\n", + " [ 606.01465, 2211.4775 ],\n", + " [ 494.96484, 2211.4775 ]], dtype=float32)),\n", + " ('ci',\n", + " array([[ 31.728516, 2214.6504 ],\n", + " [ 79.32129 , 2214.6504 ],\n", + " [ 79.32129 , 2259.0703 ],\n", + " [ 31.728516, 2259.0703 ]], dtype=float32)),\n", + " ('ty',\n", + " array([[ 76.14844, 2217.8232 ],\n", + " [ 123.74121, 2217.8232 ],\n", + " [ 123.74121, 2259.0703 ],\n", + " [ 76.14844, 2259.0703 ]], dtype=float32)),\n", + " ('sgrooo',\n", + " array([[ 304.59375, 2262.2432 ],\n", + " [ 441.02637, 2262.2432 ],\n", + " [ 441.02637, 2309.836 ],\n", + " [ 304.59375, 2309.836 ]], dtype=float32)),\n", + " ('tins',\n", + " array([[ 15.864258, 2265.416 ],\n", + " [ 98.3584 , 2265.416 ],\n", + " [ 98.3584 , 2309.836 ],\n", + " [ 15.864258, 2309.836 ]], dtype=float32)),\n", + " ('doo',\n", + " array([[ 117.39551, 2265.416 ],\n", + " [ 203.0625 , 2265.416 ],\n", + " [ 203.0625 , 2309.836 ],\n", + " [ 117.39551, 2309.836 ]], dtype=float32)),\n", + " ('sioul',\n", + " array([[ 199.88965, 2265.416 ],\n", + " [ 310.93945, 2265.416 ],\n", + " [ 310.93945, 2309.836 ],\n", + " [ 199.88965, 2309.836 ]], dtype=float32)),\n", + " ('bir',\n", + " array([[ 12.691406, 2316.1816 ],\n", + " [ 82.49414 , 2316.1816 ],\n", + " [ 82.49414 , 2360.6016 ],\n", + " [ 12.691406, 2360.6016 ]], dtype=float32)),\n", + " ('accr',\n", + " array([[ 95.18555, 2319.3545 ],\n", + " [ 187.19824, 2319.3545 ],\n", + " [ 187.19824, 2363.7744 ],\n", + " [ 95.18555, 2363.7744 ]], dtype=float32)),\n", + " ('h',\n", + " array([[ 203.0625 , 2322.5273 ],\n", + " [ 225.27246, 2322.5273 ],\n", + " [ 225.27246, 2357.4287 ],\n", + " [ 203.0625 , 2357.4287 ]], dtype=float32)),\n", + " ('smooojso1',\n", + " array([[ 72.975586, 2366.9473 ],\n", + " [ 263.34668 , 2366.9473 ],\n", + " [ 263.34668 , 2411.3672 ],\n", + " [ 72.975586, 2411.3672 ]], dtype=float32)),\n", + " ('sjuousa',\n", + " array([[ 263.34668, 2366.9473 ],\n", + " [ 479.1006 , 2366.9473 ],\n", + " [ 479.1006 , 2411.3672 ],\n", + " [ 263.34668, 2411.3672 ]], dtype=float32)),\n", + " ('96oz',\n", + " array([[ 494.96484, 2366.9473 ],\n", + " [ 586.97754, 2366.9473 ],\n", + " [ 586.97754, 2411.3672 ],\n", + " [ 494.96484, 2411.3672 ]], dtype=float32)),\n", + " ('11',\n", + " array([[ 34.901367, 2370.12 ],\n", + " [ 79.32129 , 2370.12 ],\n", + " [ 79.32129 , 2411.3672 ],\n", + " [ 34.901367, 2411.3672 ]], dtype=float32)),\n", + " ('accrdater',\n", + " array([[ 12.691406, 2417.713 ],\n", + " [ 203.0625 , 2417.713 ],\n", + " [ 203.0625 , 2465.3057 ],\n", + " [ 12.691406, 2465.3057 ]], dtype=float32)),\n", + " ('d8i01',\n", + " array([[ 222.09961, 2417.713 ],\n", + " [ 329.97656, 2417.713 ],\n", + " [ 329.97656, 2462.1328 ],\n", + " [ 222.09961, 2462.1328 ]], dtype=float32)),\n", + " ('220',\n", + " array([[ 329.97656, 2417.713 ],\n", + " [ 441.02637, 2417.713 ],\n", + " [ 441.02637, 2462.1328 ],\n", + " [ 329.97656, 2462.1328 ]], dtype=float32)),\n", + " ('17',\n", + " array([[ 31.728516, 2471.6514 ],\n", + " [ 85.66699 , 2471.6514 ],\n", + " [ 85.66699 , 2512.8984 ],\n", + " [ 31.728516, 2512.8984 ]], dtype=float32)),\n", + " ('151',\n", + " array([[ 76.14844, 2471.6514 ],\n", + " [ 139.60547, 2471.6514 ],\n", + " [ 139.60547, 2516.0713 ],\n", + " [ 76.14844, 2516.0713 ]], dtype=float32)),\n", + " ('izoz5',\n", + " array([[ 139.60547, 2471.6514 ],\n", + " [ 250.65527, 2471.6514 ],\n", + " [ 250.65527, 2516.0713 ],\n", + " [ 139.60547, 2516.0713 ]], dtype=float32)),\n", + " ('fermi',\n", + " array([[ 12.691406, 2519.2441 ],\n", + " [ 120.56836 , 2519.2441 ],\n", + " [ 120.56836 , 2566.837 ],\n", + " [ 12.691406, 2566.837 ]], dtype=float32)),\n", + " ('t',\n", + " array([[ 117.39551, 2525.5898 ],\n", + " [ 142.77832, 2525.5898 ],\n", + " [ 142.77832, 2563.664 ],\n", + " [ 117.39551, 2563.664 ]], dtype=float32)),\n", + " ('hs',\n", + " array([[ 158.64258, 2525.5898 ],\n", + " [ 199.88965, 2525.5898 ],\n", + " [ 199.88965, 2563.664 ],\n", + " [ 158.64258, 2563.664 ]], dtype=float32)),\n", + " ('fpzoirtias',\n", + " array([[ 31.728516, 2570.0098 ],\n", + " [ 479.1006 , 2570.0098 ],\n", + " [ 479.1006 , 2617.6025 ],\n", + " [ 31.728516, 2617.6025 ]], dtype=float32)),\n", + " ('dooniz',\n", + " array([[ 469.58203, 2573.1826 ],\n", + " [ 586.97754, 2573.1826 ],\n", + " [ 586.97754, 2617.6025 ],\n", + " [ 469.58203, 2617.6025 ]], dtype=float32)),\n", + " ('get',\n", + " array([[ 31.728516, 2674.7139 ],\n", + " [ 101.53125 , 2674.7139 ],\n", + " [ 101.53125 , 2719.1338 ],\n", + " [ 31.728516, 2719.1338 ]], dtype=float32)),\n", + " ('for',\n", + " array([[ 602.8418, 2674.7139],\n", + " [ 669.4717, 2674.7139],\n", + " [ 669.4717, 2719.1338],\n", + " [ 602.8418, 2719.1338]], dtype=float32)),\n", + " ('chance',\n", + " array([[ 158.87543, 2676.548 ],\n", + " [ 292.87747, 2680.6086 ],\n", + " [ 291.59088, 2723.0664 ],\n", + " [ 157.58882, 2719.0059 ]], dtype=float32)),\n", + " ('to',\n", + " array([[ 304.59375, 2677.8867 ],\n", + " [ 355.35938, 2677.8867 ],\n", + " [ 355.35938, 2719.1338 ],\n", + " [ 304.59375, 2719.1338 ]], dtype=float32)),\n", + " ('win',\n", + " array([[ 368.05078, 2677.8867 ],\n", + " [ 441.02637, 2677.8867 ],\n", + " [ 441.02637, 2722.3066 ],\n", + " [ 368.05078, 2722.3066 ]], dtype=float32)),\n", + " ('trip',\n", + " array([[ 494.96484, 2677.8867 ],\n", + " [ 586.97754, 2677.8867 ],\n", + " [ 586.97754, 2722.3066 ],\n", + " [ 494.96484, 2722.3066 ]], dtype=float32)),\n", + " ('t',\n", + " array([[ 114.22266, 2681.0596 ],\n", + " [ 139.60547, 2681.0596 ],\n", + " [ 139.60547, 2715.961 ],\n", + " [ 114.22266, 2715.961 ]], dtype=float32)),\n", + " ('a',\n", + " array([[ 453.71777, 2687.4053 ],\n", + " [ 475.92773, 2687.4053 ],\n", + " [ 475.92773, 2719.1338 ],\n", + " [ 453.71777, 2719.1338 ]], dtype=float32)),\n", + " ('f',\n", + " array([[ 57.11133, 2731.8252 ],\n", + " [ 79.32129, 2731.8252 ],\n", + " [ 79.32129, 2769.8994 ],\n", + " [ 57.11133, 2769.8994 ]], dtype=float32)),\n", + " ('to',\n", + " array([[ 95.18555, 2728.6523 ],\n", + " [ 142.77832, 2728.6523 ],\n", + " [ 142.77832, 2773.0723 ],\n", + " [ 95.18555, 2773.0723 ]], dtype=float32)),\n", + " ('kored',\n", + " array([[ 158.64258, 2728.6523 ],\n", + " [ 269.69238, 2728.6523 ],\n", + " [ 269.69238, 2773.0723 ],\n", + " [ 158.64258, 2773.0723 ]], dtype=float32)),\n", + " ('pis0',\n", + " array([[ 558.4219, 2728.6523],\n", + " [ 650.4346, 2728.6523],\n", + " [ 650.4346, 2773.0723],\n", + " [ 558.4219, 2773.0723]], dtype=float32)),\n", + " ('when',\n", + " array([[ 285.55664, 2731.8252 ],\n", + " [ 377.56934, 2731.8252 ],\n", + " [ 377.56934, 2773.0723 ],\n", + " [ 285.55664, 2773.0723 ]], dtype=float32)),\n", + " ('buy',\n", + " array([[ 472.75488, 2731.8252 ],\n", + " [ 542.5576 , 2731.8252 ],\n", + " [ 542.5576 , 2773.0723 ],\n", + " [ 472.75488, 2773.0723 ]], dtype=float32)),\n", + " ('you',\n", + " array([[ 390.26074, 2734.998 ],\n", + " [ 460.06348, 2734.998 ],\n", + " [ 460.06348, 2776.245 ],\n", + " [ 390.26074, 2776.245 ]], dtype=float32)),\n", + " ('of',\n", + " array([[ 158.64258, 2779.418 ],\n", + " [ 206.23535, 2779.418 ],\n", + " [ 206.23535, 2823.838 ],\n", + " [ 158.64258, 2823.838 ]], dtype=float32)),\n", + " ('jel',\n", + " array([[ 225.27246, 2779.418 ],\n", + " [ 307.7666 , 2779.418 ],\n", + " [ 307.7666 , 2823.838 ],\n", + " [ 225.27246, 2823.838 ]], dtype=float32)),\n", + " ('worth',\n", + " array([[ 31.728516, 2782.5908 ],\n", + " [ 145.95117 , 2782.5908 ],\n", + " [ 145.95117 , 2830.1836 ],\n", + " [ 31.728516, 2830.1836 ]], dtype=float32)),\n", + " ('tens',\n", + " array([[ 434.68066, 2782.5908 ],\n", + " [ 533.03906, 2782.5908 ],\n", + " [ 533.03906, 2820.665 ],\n", + " [ 434.68066, 2820.665 ]], dtype=float32)),\n", + " ('ean',\n", + " array([[ 558.4219, 2782.5908],\n", + " [ 650.4346, 2782.5908],\n", + " [ 650.4346, 2823.838 ],\n", + " [ 558.4219, 2823.838 ]], dtype=float32)),\n", + " ('even',\n", + " array([[ 304.59375, 2785.7637 ],\n", + " [ 396.60645, 2785.7637 ],\n", + " [ 396.60645, 2823.838 ],\n", + " [ 304.59375, 2823.838 ]], dtype=float32)),\n", + " ('s',\n", + " array([[ 31.728516, 2830.1836 ],\n", + " [ 57.11133 , 2830.1836 ],\n", + " [ 57.11133 , 2871.4307 ],\n", + " [ 31.728516, 2871.4307 ]], dtype=float32)),\n", + " ('era',\n", + " array([[ 72.975586, 2830.1836 ],\n", + " [ 142.77832 , 2830.1836 ],\n", + " [ 142.77832 , 2877.7764 ],\n", + " [ 72.975586, 2877.7764 ]], dtype=float32)),\n", + " ('ffle',\n", + " array([[ 139.60547, 2830.1836 ],\n", + " [ 228.44531, 2830.1836 ],\n", + " [ 228.44531, 2877.7764 ],\n", + " [ 139.60547, 2877.7764 ]], dtype=float32)),\n", + " ('entr',\n", + " array([[ 241.13672, 2833.3564 ],\n", + " [ 336.32227, 2833.3564 ],\n", + " [ 336.32227, 2874.6035 ],\n", + " [ 241.13672, 2874.6035 ]], dtype=float32)),\n", + " ('ies',\n", + " array([[ 329.97656, 2836.5293 ],\n", + " [ 393.4336 , 2836.5293 ],\n", + " [ 393.4336 , 2871.4307 ],\n", + " [ 329.97656, 2871.4307 ]], dtype=float32)),\n", + " ('aphen',\n", + " array([[ 412.4707 , 2836.5293 ],\n", + " [ 501.31055, 2836.5293 ],\n", + " [ 501.31055, 2877.7764 ],\n", + " [ 412.4707 , 2877.7764 ]], dtype=float32)),\n", + " ('duy',\n", + " array([[ 596.4961, 2836.5293],\n", + " [ 669.4717, 2836.5293],\n", + " [ 669.4717, 2877.7764],\n", + " [ 596.4961, 2877.7764]], dtype=float32)),\n", + " ('you',\n", + " array([[ 517.1748 , 2839.7021 ],\n", + " [ 586.97754, 2839.7021 ],\n", + " [ 586.97754, 2877.7764 ],\n", + " [ 517.1748 , 2877.7764 ]], dtype=float32)),\n", + " ('dis',\n", + " array([[ 31.728516, 2884.122 ],\n", + " [ 79.32129 , 2884.122 ],\n", + " [ 79.32129 , 2925.3691 ],\n", + " [ 31.728516, 2925.3691 ]], dtype=float32)),\n", + " ('scdunted',\n", + " array([[ 76.14844, 2884.122 ],\n", + " [ 250.65527, 2884.122 ],\n", + " [ 250.65527, 2928.542 ],\n", + " [ 76.14844, 2928.542 ]], dtype=float32)),\n", + " ('booster',\n", + " array([[ 263.34668, 2884.122 ],\n", + " [ 415.64355, 2884.122 ],\n", + " [ 415.64355, 2928.542 ],\n", + " [ 263.34668, 2928.542 ]], dtype=float32)),\n", + " ('tenss',\n", + " array([[ 453.71777, 2884.122 ],\n", + " [ 548.9033 , 2884.122 ],\n", + " [ 548.9033 , 2928.542 ],\n", + " [ 453.71777, 2928.542 ]], dtype=float32)),\n", + " ('fper',\n", + " array([[ 577.459 , 2884.122 ],\n", + " [ 647.2617, 2884.122 ],\n", + " [ 647.2617, 2928.542 ],\n", + " [ 577.459 , 2928.542 ]], dtype=float32)),\n", + " ('dii',\n", + " array([[ 31.728516, 2934.8877 ],\n", + " [ 101.53125 , 2934.8877 ],\n", + " [ 101.53125 , 2979.3076 ],\n", + " [ 31.728516, 2979.3076 ]], dtype=float32)),\n", + " ('fair',\n", + " array([[ 117.39551, 2934.8877 ],\n", + " [ 209.4082 , 2934.8877 ],\n", + " [ 209.4082 , 2979.3076 ],\n", + " [ 117.39551, 2979.3076 ]], dtype=float32)),\n", + " ('trade',\n", + " array([[ 222.09961, 2934.8877 ],\n", + " [ 333.1494 , 2934.8877 ],\n", + " [ 333.1494 , 2979.3076 ],\n", + " [ 222.09961, 2979.3076 ]], dtype=float32)),\n", + " ('permt',\n", + " array([[ 346.57706, 2933.5906 ],\n", + " [ 458.4858 , 2939.4805 ],\n", + " [ 456.2683 , 2981.6128 ],\n", + " [ 344.35956, 2975.7231 ]], dtype=float32)),\n", + " ('nunbers',\n", + " array([[ 494.96484, 2934.8877 ],\n", + " [ 644.08887, 2934.8877 ],\n", + " [ 644.08887, 2979.3076 ],\n", + " [ 494.96484, 2979.3076 ]], dtype=float32)),\n", + " ('t',\n", + " array([[ 453.71777, 2941.2334 ],\n", + " [ 475.92773, 2941.2334 ],\n", + " [ 475.92773, 2976.1348 ],\n", + " [ 453.71777, 2976.1348 ]], dtype=float32)),\n", + " ('18015',\n", + " array([[ 117.39551, 2985.6533 ],\n", + " [ 247.48242, 2985.6533 ],\n", + " [ 247.48242, 3030.0732 ],\n", + " [ 117.39551, 3030.0732 ]], dtype=float32)),\n", + " ('series',\n", + " array([[ 263.34668, 2985.6533 ],\n", + " [ 396.60645, 2985.6533 ],\n", + " [ 396.60645, 3030.0732 ],\n", + " [ 263.34668, 3030.0732 ]], dtype=float32)),\n", + " ('of',\n", + " array([[ 409.29785, 2985.6533 ],\n", + " [ 456.89062, 2985.6533 ],\n", + " [ 456.89062, 3030.0732 ],\n", + " [ 409.29785, 3030.0732 ]], dtype=float32)),\n", + " ('edz5',\n", + " array([[ 472.75488, 2985.6533 ],\n", + " [ 571.1133 , 2985.6533 ],\n", + " [ 571.1133 , 3026.9004 ],\n", + " [ 472.75488, 3026.9004 ]], dtype=float32)),\n", + " ('facebooks',\n", + " array([[ 53.938477, 3036.419 ],\n", + " [ 234.79102 , 3036.419 ],\n", + " [ 234.79102 , 3080.8389 ],\n", + " [ 53.938477, 3080.8389 ]], dtype=float32)),\n", + " ('71',\n", + " array([[ 329.97656, 3036.419 ],\n", + " [ 371.22363, 3036.419 ],\n", + " [ 371.22363, 3077.666 ],\n", + " [ 329.97656, 3077.666 ]], dtype=float32)),\n", + " ('iphi',\n", + " array([[ 371.22363, 3036.419 ],\n", + " [ 456.89062, 3036.419 ],\n", + " [ 456.89062, 3080.8389 ],\n", + " [ 371.22363, 3080.8389 ]], dtype=float32)),\n", + " ('comf',\n", + " array([[ 241.13672, 3039.5918 ],\n", + " [ 333.1494 , 3039.5918 ],\n", + " [ 333.1494 , 3080.8389 ],\n", + " [ 241.13672, 3080.8389 ]], dtype=float32)),\n", + " ('l',\n", + " array([[ 456.89062, 3042.7646 ],\n", + " [ 469.58203, 3042.7646 ],\n", + " [ 469.58203, 3071.3203 ],\n", + " [ 456.89062, 3071.3203 ]], dtype=float32)),\n", + " ('pp',\n", + " array([[ 491.792 , 3039.5918],\n", + " [ 542.5576, 3039.5918],\n", + " [ 542.5576, 3080.8389],\n", + " [ 491.792 , 3080.8389]], dtype=float32)),\n", + " ('fes',\n", + " array([[ 552.0762 , 3039.5918 ],\n", + " [ 631.39746, 3039.5918 ],\n", + " [ 631.39746, 3077.666 ],\n", + " [ 552.0762 , 3077.666 ]], dtype=float32)),\n", + " ('this',\n", + " array([[ 53.938477, 3137.9502 ],\n", + " [ 142.77832 , 3137.9502 ],\n", + " [ 142.77832 , 3185.543 ],\n", + " [ 53.938477, 3185.543 ]], dtype=float32)),\n", + " ('is',\n", + " array([[ 158.64258, 3137.9502 ],\n", + " [ 206.23535, 3137.9502 ],\n", + " [ 206.23535, 3185.543 ],\n", + " [ 158.64258, 3185.543 ]], dtype=float32)),\n", + " ('official',\n", + " array([[ 282.3838 , 3137.9502 ],\n", + " [ 456.89062, 3137.9502 ],\n", + " [ 456.89062, 3185.543 ],\n", + " [ 282.3838 , 3185.543 ]], dtype=float32)),\n", + " ('receift',\n", + " array([[ 472.75488, 3137.9502 ],\n", + " [ 628.2246 , 3137.9502 ],\n", + " [ 628.2246 , 3185.543 ],\n", + " [ 472.75488, 3185.543 ]], dtype=float32)),\n", + " ('in',\n", + " array([[ 222.09961, 3141.123 ],\n", + " [ 269.69238, 3141.123 ],\n", + " [ 269.69238, 3182.37 ],\n", + " [ 222.09961, 3182.37 ]], dtype=float32))]]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipeline.recognize([r\"temp\\20230508_122035_preprocessed.png\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: requests in c:\\users\\ayoo\\anaconda3\\envs\\mlenv\\lib\\site-packages (2.31.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\ayoo\\anaconda3\\envs\\mlenv\\lib\\site-packages (from requests) (3.2.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\ayoo\\anaconda3\\envs\\mlenv\\lib\\site-packages (from requests) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\ayoo\\anaconda3\\envs\\mlenv\\lib\\site-packages (from requests) (1.26.16)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\ayoo\\anaconda3\\envs\\mlenv\\lib\\site-packages (from requests) (2023.7.22)\n" + ] + } + ], + "source": [ + "!pip install requests" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'ParsedResults': [{'TextOverlay': {'Lines': [{'LineText': '7-ELEVEN.', 'Words': [{'WordText': '7', 'Left': 205.0, 'Top': 38.0, 'Height': 84.0, 'Width': 398.0}, {'WordText': '-', 'Left': 205.0, 'Top': 38.0, 'Height': 84.0, 'Width': 398.0}, {'WordText': 'ELEVEN', 'Left': 205.0, 'Top': 38.0, 'Height': 84.0, 'Width': 398.0}, {'WordText': '.', 'Left': 205.0, 'Top': 38.0, 'Height': 84.0, 'Width': 398.0}], 'MaxHeight': 84.0, 'MinTop': 38.0}, {'LineText': 'NHJ Convenience Store', 'Words': [{'WordText': 'NHJ', 'Left': 117.0, 'Top': 215.0, 'Height': 36.0, 'Width': 76.0}, {'WordText': 'Convenience', 'Left': 198.0, 'Top': 215.0, 'Height': 36.0, 'Width': 247.0}, {'WordText': 'Store', 'Left': 450.0, 'Top': 215.0, 'Height': 36.0, 'Width': 114.0}], 'MaxHeight': 36.0, 'MinTop': 215.0}, {'LineText': 'Owned & Operated by: Nancy A.', 'Words': [{'WordText': 'Owned', 'Left': 33.0, 'Top': 260.0, 'Height': 52.0, 'Width': 117.0}, {'WordText': '&', 'Left': 156.0, 'Top': 261.0, 'Height': 52.0, 'Width': 32.0}, {'WordText': 'Operated', 'Left': 195.0, 'Top': 261.0, 'Height': 52.0, 'Width': 182.0}, {'WordText': 'by', 'Left': 384.0, 'Top': 261.0, 'Height': 52.0, 'Width': 71.0}, {'WordText': ':', 'Left': 384.0, 'Top': 261.0, 'Height': 52.0, 'Width': 71.0}, {'WordText': 'Nancy', 'Left': 462.0, 'Top': 261.0, 'Height': 52.0, 'Width': 130.0}, {'WordText': 'A', 'Left': 598.0, 'Top': 260.0, 'Height': 52.0, 'Width': 47.0}, {'WordText': '.', 'Left': 598.0, 'Top': 260.0, 'Height': 52.0, 'Width': 47.0}], 'MaxHeight': 52.0, 'MinTop': 260.0}, {'LineText': 'Climacosa', 'Words': [{'WordText': 'Climacosa', 'Left': 244.0, 'Top': 315.0, 'Height': 38.0, 'Width': 193.0}], 'MaxHeight': 38.0, 'MinTop': 315.0}, {'LineText': 'VATREGTIN #933-598-685-002', 'Words': [{'WordText': 'VATREGTIN', 'Left': 75.0, 'Top': 361.0, 'Height': 43.0, 'Width': 204.0}, {'WordText': '#', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '933', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '-', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '598', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '-', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '685', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '-', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}, {'WordText': '002', 'Left': 285.0, 'Top': 361.0, 'Height': 43.0, 'Width': 347.0}], 'MaxHeight': 43.0, 'MinTop': 361.0}, {'LineText': 'Poblacion, Leon, Iloilo,', 'Words': [{'WordText': 'Poblacion', 'Left': 94.0, 'Top': 417.0, 'Height': 49.0, 'Width': 220.0}, {'WordText': ',', 'Left': 94.0, 'Top': 417.0, 'Height': 49.0, 'Width': 220.0}, {'WordText': 'Leon', 'Left': 321.0, 'Top': 417.0, 'Height': 49.0, 'Width': 122.0}, {'WordText': ',', 'Left': 321.0, 'Top': 417.0, 'Height': 49.0, 'Width': 122.0}, {'WordText': 'Iloilo', 'Left': 449.0, 'Top': 417.0, 'Height': 49.0, 'Width': 154.0}, {'WordText': ',', 'Left': 449.0, 'Top': 417.0, 'Height': 49.0, 'Width': 154.0}], 'MaxHeight': 49.0, 'MinTop': 417.0}, {'LineText': 'Philippines', 'Words': [{'WordText': 'Philippines', 'Left': 225.0, 'Top': 468.0, 'Height': 44.0, 'Width': 238.0}], 'MaxHeight': 44.0, 'MinTop': 468.0}, {'LineText': 'lel #: NULL', 'Words': [{'WordText': 'lel', 'Left': 221.0, 'Top': 524.0, 'Height': 40.0, 'Width': 78.0}, {'WordText': '#:', 'Left': 304.0, 'Top': 524.0, 'Height': 39.0, 'Width': 59.0}, {'WordText': 'NULL', 'Left': 368.0, 'Top': 523.0, 'Height': 40.0, 'Width': 89.0}], 'MaxHeight': 41.0, 'MinTop': 523.0}, {'LineText': '05/01/2023 (Mon) 23:00:57', 'Words': [{'WordText': '05', 'Left': 98.0, 'Top': 622.0, 'Height': 42.0, 'Width': 216.0}, {'WordText': '/', 'Left': 98.0, 'Top': 622.0, 'Height': 42.0, 'Width': 215.0}, {'WordText': '01', 'Left': 98.0, 'Top': 622.0, 'Height': 42.0, 'Width': 216.0}, {'WordText': '/', 'Left': 98.0, 'Top': 622.0, 'Height': 42.0, 'Width': 215.0}, {'WordText': '2023', 'Left': 98.0, 'Top': 622.0, 'Height': 42.0, 'Width': 216.0}, {'WordText': '(', 'Left': 319.0, 'Top': 622.0, 'Height': 42.0, 'Width': 105.0}, {'WordText': 'Mon', 'Left': 319.0, 'Top': 622.0, 'Height': 42.0, 'Width': 105.0}, {'WordText': ')', 'Left': 319.0, 'Top': 622.0, 'Height': 42.0, 'Width': 105.0}, {'WordText': '23', 'Left': 429.0, 'Top': 622.0, 'Height': 42.0, 'Width': 181.0}, {'WordText': ':', 'Left': 429.0, 'Top': 622.0, 'Height': 42.0, 'Width': 181.0}, {'WordText': '00', 'Left': 429.0, 'Top': 622.0, 'Height': 42.0, 'Width': 181.0}, {'WordText': ':', 'Left': 429.0, 'Top': 622.0, 'Height': 42.0, 'Width': 181.0}, {'WordText': '57', 'Left': 429.0, 'Top': 622.0, 'Height': 42.0, 'Width': 181.0}], 'MaxHeight': 42.0, 'MinTop': 622.0}, {'LineText': 'RCPT #2481347', 'Words': [{'WordText': 'RCPT', 'Left': 13.0, 'Top': 723.0, 'Height': 42.0, 'Width': 94.0}, {'WordText': '#', 'Left': 113.0, 'Top': 723.0, 'Height': 42.0, 'Width': 184.0}, {'WordText': '2481347', 'Left': 113.0, 'Top': 723.0, 'Height': 42.0, 'Width': 184.0}], 'MaxHeight': 42.0, 'MinTop': 723.0}, {'LineText': 'ROPT CNTHO', 'Words': [{'WordText': 'ROPT', 'Left': 472.0, 'Top': 723.0, 'Height': 49.0, 'Width': 96.0}, {'WordText': 'CNTHO', 'Left': 574.0, 'Top': 722.0, 'Height': 49.0, 'Width': 120.0}], 'MaxHeight': 50.0, 'MinTop': 722.0}, {'LineText': 'STORE#3058', 'Words': [{'WordText': 'STORE', 'Left': 13.0, 'Top': 771.0, 'Height': 47.0, 'Width': 219.0}, {'WordText': '#', 'Left': 13.0, 'Top': 771.0, 'Height': 47.0, 'Width': 219.0}, {'WordText': '3058', 'Left': 13.0, 'Top': 771.0, 'Height': 47.0, 'Width': 219.0}], 'MaxHeight': 47.0, 'MinTop': 771.0}, {'LineText': 'SN# :XTI43170', 'Words': [{'WordText': 'SN', 'Left': 433.0, 'Top': 771.0, 'Height': 49.0, 'Width': 66.0}, {'WordText': '#', 'Left': 433.0, 'Top': 771.0, 'Height': 49.0, 'Width': 66.0}, {'WordText': ':', 'Left': 505.0, 'Top': 771.0, 'Height': 50.0, 'Width': 189.0}, {'WordText': 'XTI43170', 'Left': 505.0, 'Top': 771.0, 'Height': 50.0, 'Width': 189.0}], 'MaxHeight': 50.0, 'MinTop': 771.0}, {'LineText': 'MIN #: 18112011091411051', 'Words': [{'WordText': 'MIN', 'Left': 13.0, 'Top': 830.0, 'Height': 39.0, 'Width': 73.0}, {'WordText': '#:', 'Left': 91.0, 'Top': 830.0, 'Height': 39.0, 'Width': 58.0}, {'WordText': '18112011091411051', 'Left': 154.0, 'Top': 830.0, 'Height': 39.0, 'Width': 360.0}], 'MaxHeight': 39.0, 'MinTop': 830.0}, {'LineText': 'STAFF: Angelica Duante', 'Words': [{'WordText': 'STAFF', 'Left': 13.0, 'Top': 879.0, 'Height': 43.0, 'Width': 124.0}, {'WordText': ':', 'Left': 13.0, 'Top': 879.0, 'Height': 43.0, 'Width': 124.0}, {'WordText': 'Angelica', 'Left': 142.0, 'Top': 879.0, 'Height': 43.0, 'Width': 177.0}, {'WordText': 'Duante', 'Left': 325.0, 'Top': 879.0, 'Height': 43.0, 'Width': 138.0}], 'MaxHeight': 43.0, 'MinTop': 879.0}, {'LineText': '7FKoreanßun', 'Words': [{'WordText': '7FKoreanßun', 'Left': 16.0, 'Top': 979.0, 'Height': 45.0, 'Width': 235.0}], 'MaxHeight': 45.0, 'MinTop': 979.0}, {'LineText': 'NissinYaSaBeet77g', 'Words': [{'WordText': 'NissinYaSaBeet77g', 'Left': 13.0, 'Top': 1032.0, 'Height': 42.0, 'Width': 365.0}], 'MaxHeight': 42.0, 'MinTop': 1032.0}, {'LineText': 'BBHOTDOGCREMYCHEES', 'Words': [{'WordText': 'BBHOTDOGCREMYCHEES', 'Left': 13.0, 'Top': 1084.0, 'Height': 39.0, 'Width': 384.0}], 'MaxHeight': 39.0, 'MinTop': 1084.0}, {'LineText': '39.00 Ð¥ 6', 'Words': [{'WordText': '39.00', 'Left': 140.0, 'Top': 1136.0, 'Height': 43.0, 'Width': 116.0}, {'WordText': 'Ð¥', 'Left': 261.0, 'Top': 1136.0, 'Height': 43.0, 'Width': 100.0}, {'WordText': '6', 'Left': 366.0, 'Top': 1135.0, 'Height': 42.0, 'Width': 29.0}], 'MaxHeight': 44.0, 'MinTop': 1135.0}, {'LineText': 'chocvron? in1Ch020g', 'Words': [{'WordText': 'chocvron', 'Left': 13.0, 'Top': 1185.0, 'Height': 43.0, 'Width': 193.0}, {'WordText': '?', 'Left': 13.0, 'Top': 1185.0, 'Height': 43.0, 'Width': 193.0}, {'WordText': 'in1Ch020g', 'Left': 212.0, 'Top': 1185.0, 'Height': 43.0, 'Width': 186.0}], 'MaxHeight': 43.0, 'MinTop': 1185.0}, {'LineText': '15.00 X', 'Words': [{'WordText': '15.00', 'Left': 140.0, 'Top': 1240.0, 'Height': 43.0, 'Width': 116.0}, {'WordText': 'X', 'Left': 261.0, 'Top': 1240.0, 'Height': 42.0, 'Width': 42.0}], 'MaxHeight': 43.0, 'MinTop': 1240.0}, {'LineText': '2', 'Words': [{'WordText': '2', 'Left': 355.0, 'Top': 1240.0, 'Height': 39.0, 'Width': 39.0}], 'MaxHeight': 39.0, 'MinTop': 1240.0}, {'LineText': '55.004', 'Words': [{'WordText': '55.004', 'Left': 557.0, 'Top': 979.0, 'Height': 47.0, 'Width': 137.0}], 'MaxHeight': 47.0, 'MinTop': 979.0}, {'LineText': '40.000', 'Words': [{'WordText': '40.000', 'Left': 560.0, 'Top': 1031.0, 'Height': 48.0, 'Width': 134.0}], 'MaxHeight': 48.0, 'MinTop': 1031.0}, {'LineText': '234.000', 'Words': [{'WordText': '234.000', 'Left': 534.0, 'Top': 1135.0, 'Height': 47.0, 'Width': 160.0}], 'MaxHeight': 47.0, 'MinTop': 1135.0}, {'LineText': '30.000', 'Words': [{'WordText': '30.000', 'Left': 557.0, 'Top': 1237.0, 'Height': 46.0, 'Width': 137.0}], 'MaxHeight': 46.0, 'MinTop': 1237.0}, {'LineText': 'Total (10)', 'Words': [{'WordText': 'Total', 'Left': 13.0, 'Top': 1340.0, 'Height': 44.0, 'Width': 121.0}, {'WordText': '(', 'Left': 139.0, 'Top': 1342.0, 'Height': 44.0, 'Width': 86.0}, {'WordText': '10', 'Left': 139.0, 'Top': 1342.0, 'Height': 44.0, 'Width': 86.0}, {'WordText': ')', 'Left': 139.0, 'Top': 1342.0, 'Height': 44.0, 'Width': 86.0}], 'MaxHeight': 46.0, 'MinTop': 1340.0}, {'LineText': 'CASH', 'Words': [{'WordText': 'CASH', 'Left': 55.0, 'Top': 1390.0, 'Height': 43.0, 'Width': 91.0}], 'MaxHeight': 43.0, 'MinTop': 1390.0}, {'LineText': 'CHANGE', 'Words': [{'WordText': 'CHANGE', 'Left': 52.0, 'Top': 1442.0, 'Height': 43.0, 'Width': 137.0}], 'MaxHeight': 43.0, 'MinTop': 1442.0}, {'LineText': '359.00', 'Words': [{'WordText': '359.00', 'Left': 557.0, 'Top': 1341.0, 'Height': 47.0, 'Width': 137.0}], 'MaxHeight': 47.0, 'MinTop': 1341.0}, {'LineText': '1000.00', 'Words': [{'WordText': '1000.00', 'Left': 537.0, 'Top': 1389.0, 'Height': 48.0, 'Width': 154.0}], 'MaxHeight': 48.0, 'MinTop': 1389.0}, {'LineText': '641.00', 'Words': [{'WordText': '641.00', 'Left': 557.0, 'Top': 1442.0, 'Height': 46.0, 'Width': 134.0}], 'MaxHeight': 46.0, 'MinTop': 1442.0}, {'LineText': 'VATable', 'Words': [{'WordText': 'VATable', 'Left': 52.0, 'Top': 1546.0, 'Height': 40.0, 'Width': 157.0}], 'MaxHeight': 40.0, 'MinTop': 1546.0}, {'LineText': 'VAT_Tax', 'Words': [{'WordText': 'VAT_Tax', 'Left': 52.0, 'Top': 1598.0, 'Height': 50.0, 'Width': 157.0}], 'MaxHeight': 50.0, 'MinTop': 1598.0}, {'LineText': 'Zero_Rated', 'Words': [{'WordText': 'Zero_Rated', 'Left': 52.0, 'Top': 1649.0, 'Height': 48.0, 'Width': 219.0}], 'MaxHeight': 48.0, 'MinTop': 1649.0}, {'LineText': 'VAT_Exempted', 'Words': [{'WordText': 'VAT_Exempted', 'Left': 52.0, 'Top': 1699.0, 'Height': 50.0, 'Width': 264.0}], 'MaxHeight': 50.0, 'MinTop': 1699.0}, {'LineText': '320.54', 'Words': [{'WordText': '320.54', 'Left': 557.0, 'Top': 1546.0, 'Height': 46.0, 'Width': 134.0}], 'MaxHeight': 46.0, 'MinTop': 1546.0}, {'LineText': '38.46', 'Words': [{'WordText': '38.46', 'Left': 577.0, 'Top': 1598.0, 'Height': 43.0, 'Width': 114.0}], 'MaxHeight': 43.0, 'MinTop': 1598.0}, {'LineText': '0.00', 'Words': [{'WordText': '0.00', 'Left': 600.0, 'Top': 1651.0, 'Height': 42.0, 'Width': 91.0}], 'MaxHeight': 42.0, 'MinTop': 1651.0}, {'LineText': '0.00', 'Words': [{'WordText': '0.00', 'Left': 599.0, 'Top': 1702.0, 'Height': 43.0, 'Width': 95.0}], 'MaxHeight': 43.0, 'MinTop': 1702.0}, {'LineText': 'Sold To: 9906087698684', 'Words': [{'WordText': 'Sold', 'Left': 13.0, 'Top': 1803.0, 'Height': 42.0, 'Width': 94.0}, {'WordText': 'To', 'Left': 113.0, 'Top': 1803.0, 'Height': 42.0, 'Width': 79.0}, {'WordText': ':', 'Left': 113.0, 'Top': 1803.0, 'Height': 42.0, 'Width': 79.0}, {'WordText': '9906087698684', 'Left': 197.0, 'Top': 1803.0, 'Height': 42.0, 'Width': 285.0}], 'MaxHeight': 42.0, 'MinTop': 1803.0}, {'LineText': 'Name:', 'Words': [{'WordText': 'Name', 'Left': 10.0, 'Top': 1856.0, 'Height': 39.0, 'Width': 111.0}, {'WordText': ':', 'Left': 10.0, 'Top': 1856.0, 'Height': 39.0, 'Width': 111.0}], 'MaxHeight': 39.0, 'MinTop': 1856.0}, {'LineText': 'Address:', 'Words': [{'WordText': 'Address', 'Left': 13.0, 'Top': 1907.0, 'Height': 40.0, 'Width': 170.0}, {'WordText': ':', 'Left': 13.0, 'Top': 1907.0, 'Height': 40.0, 'Width': 170.0}], 'MaxHeight': 40.0, 'MinTop': 1907.0}, {'LineText': 'TIN:', 'Words': [{'WordText': 'TIN', 'Left': 13.0, 'Top': 1957.0, 'Height': 39.0, 'Width': 85.0}, {'WordText': ':', 'Left': 13.0, 'Top': 1957.0, 'Height': 39.0, 'Width': 85.0}], 'MaxHeight': 39.0, 'MinTop': 1957.0}, {'LineText': 'Philippine Seven Corporation', 'Words': [{'WordText': 'Philippine', 'Left': 10.0, 'Top': 2060.0, 'Height': 43.0, 'Width': 226.0}, {'WordText': 'Seven', 'Left': 241.0, 'Top': 2060.0, 'Height': 43.0, 'Width': 118.0}, {'WordText': 'Corporation', 'Left': 365.0, 'Top': 2060.0, 'Height': 43.0, 'Width': 241.0}], 'MaxHeight': 43.0, 'MinTop': 2060.0}, {'LineText': '7th Floor The Columbia Tower', 'Words': [{'WordText': '7th', 'Left': 13.0, 'Top': 2116.0, 'Height': 36.0, 'Width': 72.0}, {'WordText': 'Floor', 'Left': 90.0, 'Top': 2116.0, 'Height': 36.0, 'Width': 126.0}, {'WordText': 'The', 'Left': 220.0, 'Top': 2116.0, 'Height': 36.0, 'Width': 76.0}, {'WordText': 'Columbia', 'Left': 301.0, 'Top': 2116.0, 'Height': 36.0, 'Width': 189.0}, {'WordText': 'Tower', 'Left': 495.0, 'Top': 2116.0, 'Height': 36.0, 'Width': 108.0}], 'MaxHeight': 36.0, 'MinTop': 2116.0}, {'LineText': 'Ortigas Avenue, Mandaluyong', 'Words': [{'WordText': 'Ortigas', 'Left': 33.0, 'Top': 2161.0, 'Height': 49.0, 'Width': 154.0}, {'WordText': 'Avenue', 'Left': 192.0, 'Top': 2161.0, 'Height': 49.0, 'Width': 159.0}, {'WordText': ',', 'Left': 192.0, 'Top': 2161.0, 'Height': 49.0, 'Width': 159.0}, {'WordText': 'Mandaluyong', 'Left': 358.0, 'Top': 2161.0, 'Height': 49.0, 'Width': 248.0}], 'MaxHeight': 49.0, 'MinTop': 2161.0}, {'LineText': 'City', 'Words': [{'WordText': 'City', 'Left': 29.0, 'Top': 2214.0, 'Height': 42.0, 'Width': 94.0}], 'MaxHeight': 42.0, 'MinTop': 2214.0}, {'LineText': 'TIN: 000-390-189-000', 'Words': [{'WordText': 'TIN', 'Left': 13.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 90.0}, {'WordText': ':', 'Left': 13.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 90.0}, {'WordText': '000', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '-', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '390', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '-', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '189', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '-', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}, {'WordText': '000', 'Left': 109.0, 'Top': 2266.0, 'Height': 46.0, 'Width': 331.0}], 'MaxHeight': 46.0, 'MinTop': 2266.0}, {'LineText': 'BIR ACCI #', 'Words': [{'WordText': 'BIR', 'Left': 10.0, 'Top': 2318.0, 'Height': 39.0, 'Width': 78.0}, {'WordText': 'ACCI', 'Left': 93.0, 'Top': 2318.0, 'Height': 39.0, 'Width': 98.0}, {'WordText': '#', 'Left': 195.0, 'Top': 2318.0, 'Height': 39.0, 'Width': 30.0}], 'MaxHeight': 40.0, 'MinTop': 2318.0}, {'LineText': '116-000390189-000346 19602', 'Words': [{'WordText': '116', 'Left': 33.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 430.0}, {'WordText': '-', 'Left': 33.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 430.0}, {'WordText': '000390189', 'Left': 33.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 430.0}, {'WordText': '-', 'Left': 33.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 430.0}, {'WordText': '000346', 'Left': 33.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 430.0}, {'WordText': '19602', 'Left': 468.0, 'Top': 2366.0, 'Height': 43.0, 'Width': 118.0}], 'MaxHeight': 43.0, 'MinTop': 2366.0}, {'LineText': 'AcciDate: 08/01/2020', 'Words': [{'WordText': 'AcciDate', 'Left': 13.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 194.0}, {'WordText': ':', 'Left': 13.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 194.0}, {'WordText': '08', 'Left': 212.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 266.0}, {'WordText': '/', 'Left': 213.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 266.0}, {'WordText': '01', 'Left': 212.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 266.0}, {'WordText': '/', 'Left': 213.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 266.0}, {'WordText': '2020', 'Left': 212.0, 'Top': 2419.0, 'Height': 42.0, 'Width': 266.0}], 'MaxHeight': 42.0, 'MinTop': 2419.0}, {'LineText': '07/31/2025', 'Words': [{'WordText': '07', 'Left': 29.0, 'Top': 2470.0, 'Height': 44.0, 'Width': 219.0}, {'WordText': '/', 'Left': 29.0, 'Top': 2470.0, 'Height': 44.0, 'Width': 219.0}, {'WordText': '31', 'Left': 29.0, 'Top': 2470.0, 'Height': 44.0, 'Width': 219.0}, {'WordText': '/', 'Left': 29.0, 'Top': 2470.0, 'Height': 44.0, 'Width': 219.0}, {'WordText': '2025', 'Left': 29.0, 'Top': 2470.0, 'Height': 44.0, 'Width': 219.0}], 'MaxHeight': 44.0, 'MinTop': 2470.0}, {'LineText': 'Permit #:', 'Words': [{'WordText': 'Permit', 'Left': 10.0, 'Top': 2526.0, 'Height': 40.0, 'Width': 142.0}, {'WordText': '#:', 'Left': 156.0, 'Top': 2527.0, 'Height': 39.0, 'Width': 46.0}], 'MaxHeight': 40.0, 'MinTop': 2526.0}, {'LineText': 'FP112018-074-0194656-00002', 'Words': [{'WordText': 'FP112018', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '-', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '074', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '-', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '0194656', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '-', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}, {'WordText': '00002', 'Left': 33.0, 'Top': 2572.0, 'Height': 39.0, 'Width': 554.0}], 'MaxHeight': 39.0, 'MinTop': 2572.0}, {'LineText': 'Get a chance to win a trip for', 'Words': [{'WordText': 'Get', 'Left': 29.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 78.0}, {'WordText': 'a', 'Left': 112.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 34.0}, {'WordText': 'chance', 'Left': 151.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 146.0}, {'WordText': 'to', 'Left': 302.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 54.0}, {'WordText': 'win', 'Left': 361.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 83.0}, {'WordText': 'a', 'Left': 448.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 34.0}, {'WordText': 'trip', 'Left': 487.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 107.0}, {'WordText': 'for', 'Left': 599.0, 'Top': 2679.0, 'Height': 39.0, 'Width': 69.0}], 'MaxHeight': 39.0, 'MinTop': 2679.0}, {'LineText': '2 to Korea when you buy PISO', 'Words': [{'WordText': '2', 'Left': 52.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 34.0}, {'WordText': 'to', 'Left': 91.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 58.0}, {'WordText': 'Korea', 'Left': 154.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 122.0}, {'WordText': 'when', 'Left': 281.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 102.0}, {'WordText': 'you', 'Left': 388.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 78.0}, {'WordText': 'buy', 'Left': 471.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 78.0}, {'WordText': 'PISO', 'Left': 554.0, 'Top': 2731.0, 'Height': 39.0, 'Width': 91.0}], 'MaxHeight': 39.0, 'MinTop': 2731.0}, {'LineText': 'worth of 7-Eleven items. Earn', 'Words': [{'WordText': 'worth', 'Left': 29.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 116.0}, {'WordText': 'of', 'Left': 152.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 61.0}, {'WordText': '7', 'Left': 219.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 184.0}, {'WordText': '-', 'Left': 219.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 184.0}, {'WordText': 'Eleven', 'Left': 219.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 184.0}, {'WordText': 'items', 'Left': 409.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 135.0}, {'WordText': '.', 'Left': 409.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 135.0}, {'WordText': 'Earn', 'Left': 550.0, 'Top': 2783.0, 'Height': 49.0, 'Width': 99.0}], 'MaxHeight': 49.0, 'MinTop': 2783.0}, {'LineText': '3 eRaffle entries when you buy', 'Words': [{'WordText': '3', 'Left': 29.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 34.0}, {'WordText': 'eRaffle', 'Left': 68.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 166.0}, {'WordText': 'entries', 'Left': 239.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 161.0}, {'WordText': 'when', 'Left': 404.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 102.0}, {'WordText': 'you', 'Left': 512.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 78.0}, {'WordText': 'buy', 'Left': 594.0, 'Top': 2832.0, 'Height': 39.0, 'Width': 70.0}], 'MaxHeight': 39.0, 'MinTop': 2832.0}, {'LineText': 'discounted booster Items. Per', 'Words': [{'WordText': 'discounted', 'Left': 33.0, 'Top': 2888.0, 'Height': 42.0, 'Width': 221.0}, {'WordText': 'booster', 'Left': 259.0, 'Top': 2888.0, 'Height': 42.0, 'Width': 168.0}, {'WordText': 'Items', 'Left': 432.0, 'Top': 2888.0, 'Height': 42.0, 'Width': 137.0}, {'WordText': '.', 'Left': 432.0, 'Top': 2888.0, 'Height': 42.0, 'Width': 137.0}, {'WordText': 'Per', 'Left': 574.0, 'Top': 2888.0, 'Height': 42.0, 'Width': 68.0}], 'MaxHeight': 42.0, 'MinTop': 2888.0}, {'LineText': 'DTI FAIR TRADE Permit Number:', 'Words': [{'WordText': 'DTI', 'Left': 29.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 78.0}, {'WordText': 'FAIR', 'Left': 113.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 100.0}, {'WordText': 'TRADE', 'Left': 218.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 121.0}, {'WordText': 'Permit', 'Left': 344.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 142.0}, {'WordText': 'Number', 'Left': 491.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 151.0}, {'WordText': ':', 'Left': 491.0, 'Top': 2933.0, 'Height': 42.0, 'Width': 151.0}], 'MaxHeight': 42.0, 'MinTop': 2933.0}, {'LineText': '163019 Series of 2023..', 'Words': [{'WordText': '163019', 'Left': 117.0, 'Top': 2988.0, 'Height': 40.0, 'Width': 135.0}, {'WordText': 'Series', 'Left': 257.0, 'Top': 2988.0, 'Height': 40.0, 'Width': 145.0}, {'WordText': 'of', 'Left': 407.0, 'Top': 2988.0, 'Height': 40.0, 'Width': 55.0}, {'WordText': '2023', 'Left': 467.0, 'Top': 2988.0, 'Height': 40.0, 'Width': 165.0}, {'WordText': '..', 'Left': 467.0, 'Top': 2988.0, 'Height': 40.0, 'Width': 165.0}], 'MaxHeight': 40.0, 'MinTop': 2988.0}, {'LineText': 'facebook.com/711philippines.', 'Words': [{'WordText': 'facebook.com', 'Left': 52.0, 'Top': 3037.0, 'Height': 42.0, 'Width': 590.0}, {'WordText': '/', 'Left': 52.0, 'Top': 3037.0, 'Height': 42.0, 'Width': 590.0}, {'WordText': '711philippines', 'Left': 52.0, 'Top': 3037.0, 'Height': 42.0, 'Width': 590.0}, {'WordText': '.', 'Left': 52.0, 'Top': 3037.0, 'Height': 42.0, 'Width': 590.0}], 'MaxHeight': 42.0, 'MinTop': 3037.0}, {'LineText': '- THIS IS AN OFFICIAL RECEIPT -', 'Words': [{'WordText': '-', 'Left': 0.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 46.0}, {'WordText': 'THIS', 'Left': 52.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 98.0}, {'WordText': 'IS', 'Left': 155.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 57.0}, {'WordText': 'AN', 'Left': 219.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 52.0}, {'WordText': 'OFFICIAL', 'Left': 276.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 184.0}, {'WordText': 'RECEIPT', 'Left': 466.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 167.0}, {'WordText': '-', 'Left': 638.0, 'Top': 3138.0, 'Height': 46.0, 'Width': 30.0}], 'MaxHeight': 46.0, 'MinTop': 3138.0}], 'HasOverlay': True}, 'TextOrientation': '0', 'FileParseExitCode': 1, 'ParsedText': '7-ELEVEN.\\nNHJ Convenience Store\\nOwned & Operated by: Nancy A.\\nClimacosa\\nVATREGTIN #933-598-685-002\\nPoblacion, Leon, Iloilo,\\nPhilippines\\nlel #: NULL\\n05/01/2023 (Mon) 23:00:57\\nRCPT #2481347\\nROPT CNTHO\\nSTORE#3058\\nSN# :XTI43170\\nMIN #: 18112011091411051\\nSTAFF: Angelica Duante\\n7FKoreanßun\\nNissinYaSaBeet77g\\nBBHOTDOGCREMYCHEES\\n39.00 Ð¥ 6\\nchocvron? in1Ch020g\\n15.00 X\\n2\\n55.004\\n40.000\\n234.000\\n30.000\\nTotal (10)\\nCASH\\nCHANGE\\n359.00\\n1000.00\\n641.00\\nVATable\\nVAT_Tax\\nZero_Rated\\nVAT_Exempted\\n320.54\\n38.46\\n0.00\\n0.00\\nSold To: 9906087698684\\nName:\\nAddress:\\nTIN:\\nPhilippine Seven Corporation\\n7th Floor The Columbia Tower\\nOrtigas Avenue, Mandaluyong\\nCity\\nTIN: 000-390-189-000\\nBIR ACCI #\\n116-000390189-000346 19602\\nAcciDate: 08/01/2020\\n07/31/2025\\nPermit #:\\nFP112018-074-0194656-00002\\nGet a chance to win a trip for\\n2 to Korea when you buy PISO\\nworth of 7-Eleven items. Earn\\n3 eRaffle entries when you buy\\ndiscounted booster Items. Per\\nDTI FAIR TRADE Permit Number:\\n163019 Series of 2023..\\nfacebook.com/711philippines.\\n- THIS IS AN OFFICIAL RECEIPT -', 'ErrorMessage': '', 'ErrorDetails': ''}], 'OCRExitCode': 1, 'IsErroredOnProcessing': False, 'ProcessingTimeInMilliseconds': '2593', 'SearchablePDFURL': 'Searchable PDF not generated as it was not requested.'}\n" + ] + } + ], + "source": [ + "# Import requests library\n", + "import requests\n", + "\n", + "# Define the OCR API endpoint\n", + "url = \"https://api.ocr.space/parse/image\"\n", + "\n", + "# Define the API key and the language\n", + "api_key = \"K88232854988957\"\n", + "language = \"eng\"\n", + "\n", + "# Define the image file path\n", + "image_file = r\"C:\\Users\\Ayoo\\Desktop\\webapp\\predictions\\imgs\\20230508_122035.jpg\"\n", + "\n", + "# Open the image file as binary\n", + "with open(image_file, \"rb\") as f:\n", + " # Define the payload for the API request\n", + " payload = {\n", + " \"apikey\": api_key,\n", + " \"language\": language,\n", + " \"isOverlayRequired\": True, # Optional, set to True if you want the coordinates of the words\n", + " \"OCREngine\": 2 # OCR Engine 2 for Layoutlmv3\n", + " }\n", + " # Define the file parameter for the API request\n", + " file = {\n", + " \"file\": f\n", + " }\n", + " # Send the POST request to the OCR API\n", + " response = requests.post(url, data=payload, files=file)\n", + "\n", + "# Check the status code of the response\n", + "if response.status_code == 200:\n", + " # Parse the JSON response\n", + " result = response.json()\n", + " # Print the parsed text\n", + " print(result)\n", + "else:\n", + " # Print the error message\n", + " print(\"Error: \" + response.text)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Object of type Response is not JSON serializable", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[13], line 4\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mjson\u001b[39;00m\n\u001b[0;32m 3\u001b[0m \u001b[38;5;66;03m# Assuming 'response' is the JSON response from the OCR API\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdumps\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindent\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m4\u001b[39;49m\u001b[43m)\u001b[49m)\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\json\\__init__.py:238\u001b[0m, in \u001b[0;36mdumps\u001b[1;34m(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)\u001b[0m\n\u001b[0;32m 232\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 233\u001b[0m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;241m=\u001b[39m JSONEncoder\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[0;32m 235\u001b[0m \u001b[43m \u001b[49m\u001b[43mskipkeys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mskipkeys\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mensure_ascii\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mensure_ascii\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 236\u001b[0m \u001b[43m \u001b[49m\u001b[43mcheck_circular\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcheck_circular\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mallow_nan\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mallow_nan\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindent\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindent\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 237\u001b[0m \u001b[43m \u001b[49m\u001b[43mseparators\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mseparators\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdefault\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdefault\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msort_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msort_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m--> 238\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencode\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\json\\encoder.py:202\u001b[0m, in \u001b[0;36mJSONEncoder.encode\u001b[1;34m(self, o)\u001b[0m\n\u001b[0;32m 200\u001b[0m chunks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39miterencode(o, _one_shot\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m 201\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(chunks, (\u001b[38;5;28mlist\u001b[39m, \u001b[38;5;28mtuple\u001b[39m)):\n\u001b[1;32m--> 202\u001b[0m chunks \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlist\u001b[39m(chunks)\n\u001b[0;32m 203\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(chunks)\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\json\\encoder.py:439\u001b[0m, in \u001b[0;36m_make_iterencode.._iterencode\u001b[1;34m(o, _current_indent_level)\u001b[0m\n\u001b[0;32m 437\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCircular reference detected\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 438\u001b[0m markers[markerid] \u001b[38;5;241m=\u001b[39m o\n\u001b[1;32m--> 439\u001b[0m o \u001b[38;5;241m=\u001b[39m \u001b[43m_default\u001b[49m\u001b[43m(\u001b[49m\u001b[43mo\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 440\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m _iterencode(o, _current_indent_level)\n\u001b[0;32m 441\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m markers \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[1;32mc:\\Users\\Ayoo\\anaconda3\\envs\\mlenv\\Lib\\json\\encoder.py:180\u001b[0m, in \u001b[0;36mJSONEncoder.default\u001b[1;34m(self, o)\u001b[0m\n\u001b[0;32m 161\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdefault\u001b[39m(\u001b[38;5;28mself\u001b[39m, o):\n\u001b[0;32m 162\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Implement this method in a subclass such that it returns\u001b[39;00m\n\u001b[0;32m 163\u001b[0m \u001b[38;5;124;03m a serializable object for ``o``, or calls the base implementation\u001b[39;00m\n\u001b[0;32m 164\u001b[0m \u001b[38;5;124;03m (to raise a ``TypeError``).\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 178\u001b[0m \n\u001b[0;32m 179\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 180\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mObject of type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mo\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 181\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mis not JSON serializable\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "\u001b[1;31mTypeError\u001b[0m: Object of type Response is not JSON serializable" + ] + } + ], + "source": [ + "import json\n", + "\n", + "# Assuming 'response' is the JSON response from the OCR API\n", + "print(json.dumps(response, indent=4))\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "mlenv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/fonts/fontawesome-webfont.eot b/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 Binary files /dev/null and b/fonts/fontawesome-webfont.eot differ diff --git a/fonts/fontawesome-webfont.svg b/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d --- /dev/null +++ b/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/fontawesome-webfont.ttf b/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 Binary files /dev/null and b/fonts/fontawesome-webfont.ttf differ diff --git a/fonts/fontawesome-webfont.woff b/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b Binary files /dev/null and b/fonts/fontawesome-webfont.woff differ diff --git a/fonts/fontawesome-webfont.woff2 b/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 Binary files /dev/null and b/fonts/fontawesome-webfont.woff2 differ diff --git a/inferenced/output.csv b/inferenced/output.csv new file mode 100644 index 0000000000000000000000000000000000000000..6a265d30d3413365dd406173214a92749f9eecb2 --- /dev/null +++ b/inferenced/output.csv @@ -0,0 +1,9 @@ +RECEIPTNUMBER|MERCHANTNAME|MERCHANTADDRESS|TRANSACTIONDATE|TRANSACTIONTIME|ITEMS|PRICE|TOTAL|VATTAX +000019273|W / SU Nulti Purpose Cooperative|Luna Street Lapaz Iloilo City|09 - 11 - 2023|PM|NOVA||25.00|24.00 +|||||CHEDDAR||| +|||||40G||| +|||||CREAM||| +|||||-||| +|||||O||| +|||||VANILLA||| +|||||30G||| diff --git a/inferenced/temp_inference.jpg b/inferenced/temp_inference.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f058e516371da003874b6bb8229ec14b6ebd05b Binary files /dev/null and b/inferenced/temp_inference.jpg differ diff --git a/log/error_output.log b/log/error_output.log new file mode 100644 index 0000000000000000000000000000000000000000..a6b42e7a7005e142ba1009317d68659d78aa4df3 --- /dev/null +++ b/log/error_output.log @@ -0,0 +1,55 @@ +2023-12-15 22:08:28,556 ERROR __main__ The `bbox` coordinate values should be within 0-1000 range. +2023-12-15 22:25:13,644 ERROR __main__ [WinError 3] The system cannot find the path specified: '{imag_path}' +2023-12-15 22:27:05,205 ERROR __main__ name 'keras_ocr' is not defined +2023-12-15 22:35:49,620 ERROR __main__ 'bboxes' +2023-12-15 22:39:15,225 ERROR __main__ 'bboxes' +2023-12-16 01:01:21,726 ERROR __main__ name 'requests' is not defined +2023-12-16 01:03:33,968 ERROR __main__ name 'requests' is not defined +2023-12-16 01:08:14,487 ERROR __main__ name 'requests' is not defined +2023-12-16 01:09:30,329 ERROR __main__ name 'requests' is not defined +2023-12-16 01:10:18,781 ERROR __main__ name 'requests' is not defined +2023-12-16 01:12:35,305 ERROR __main__ name 'tsv_output_path' is not defined +2023-12-16 01:13:41,929 ERROR __main__ name 'tsv_output_path' is not defined +2023-12-16 01:29:13,998 ERROR __main__ The `bbox` coordinate values should be within 0-1000 range. +2023-12-16 20:52:33,964 ERROR __main__ [WinError 3] The system cannot find the path specified: 'uploads' +2023-12-17 18:38:42,915 ERROR __main__ 'NoneType' object is not iterable +2023-12-17 18:40:35,893 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 20:18:55,934 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 20:18:56,942 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 22:30:50,612 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 22:31:04,074 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 23:12:27,319 ERROR __main__ 'NoneType' object is not iterable +2023-12-18 23:12:44,712 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 01:18:35,983 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 01:18:44,462 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 10:04:44,885 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 11:47:51,529 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 11:48:20,112 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 17:19:14,949 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 17:19:25,155 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 17:22:34,256 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 17:22:41,194 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 22:57:31,887 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 22:57:54,460 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 22:59:23,386 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 22:59:37,214 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 23:03:47,802 ERROR __main__ 'NoneType' object is not iterable +2023-12-19 23:03:59,489 ERROR __main__ 'NoneType' object is not iterable +2023-12-20 00:55:44,721 ERROR __main__ 'NoneType' object is not iterable +2023-12-20 00:58:50,122 ERROR __main__ 'NoneType' object is not iterable +2024-01-03 23:14:33,798 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-03 23:14:47,884 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-03 23:19:38,657 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-03 23:19:46,901 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-03 23:22:34,992 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-03 23:22:48,001 ERROR __main__ clean_extracted_output() missing 1 required positional argument: 'image_path' +2024-01-05 12:15:46,837 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 12:17:43,363 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 12:24:05,514 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 12:27:29,989 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 12:28:41,450 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 12:32:52,595 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 13:53:02,018 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 14:05:21,728 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 20:38:28,390 ERROR __main__ 'NoneType' object is not iterable +2024-01-05 20:38:46,926 ERROR __main__ 'NoneType' object is not iterable diff --git a/model/config.json b/model/config.json new file mode 100644 index 0000000000000000000000000000000000000000..a2ece080d7a6b0c6750bb50ceaa741b339bab742 --- /dev/null +++ b/model/config.json @@ -0,0 +1,118 @@ +{ + "_name_or_path": "microsoft/layoutlmv3-base", + "architectures": [ + "LayoutLMv3ForTokenClassification" + ], + "attention_probs_dropout_prob": 0.1, + "bos_token_id": 0, + "classifier_dropout": null, + "coordinate_size": 128, + "eos_token_id": 2, + "has_relative_attention_bias": true, + "has_spatial_attention_bias": true, + "hidden_act": "gelu", + "hidden_dropout_prob": 0.1, + "hidden_size": 768, + "id2label": { + "0": "S-ITEMS", + "1": "B-MERCHANTADDRESS", + "2": "B-ITEMS", + "3": "I-MERCHANTNAME", + "4": "E-VATTAX", + "5": "O", + "6": "B-VATTAX", + "7": "B-PRICE", + "8": "S-RECEIPTNUMBER", + "9": "S-PRICE", + "10": "E-TRANSACTIONDATE", + "11": "E-RECEIPTNUMBER", + "12": "B-MERCHANTNAME", + "13": "E-MERCHANTADDRESS", + "14": "B-TOTAL", + "15": "S-TOTAL", + "16": "I-MERCHANT NAME", + "17": "S-MERCHANTNAME", + "18": "S-VATTAX", + "19": "S-TRANSACTIONDATE", + "20": "E-TRANSACTIONTIME", + "21": "I-MERCHANTADDRESS", + "22": "I-ITEMS", + "23": "E-MERCHANTNAME", + "24": "E-ITEMS", + "25": "B-RECEIPTNUMBER", + "26": "E-TOTAL", + "27": "E-MERCHANT NAME", + "28": "I-RECEIPTNUMBER", + "29": "B-TRANSACTIONDATE", + "30": "B-TRANSACTIONTIME", + "31": "E-PRICE", + "32": "I-TRANSACTIONTIME", + "33": "S-TRANSACTIONTIME", + "34": "S-MERCHANTADDRESS", + "35": "I-TRANSACTIONDATE", + "36": "B-MERCHANT NAME" + }, + "initializer_range": 0.02, + "input_size": 224, + "intermediate_size": 3072, + "label2id": { + "B-ITEMS": 2, + "B-MERCHANT NAME": 36, + "B-MERCHANTADDRESS": 1, + "B-MERCHANTNAME": 12, + "B-PRICE": 7, + "B-RECEIPTNUMBER": 25, + "B-TOTAL": 14, + "B-TRANSACTIONDATE": 29, + "B-TRANSACTIONTIME": 30, + "B-VATTAX": 6, + "E-ITEMS": 24, + "E-MERCHANT NAME": 27, + "E-MERCHANTADDRESS": 13, + "E-MERCHANTNAME": 23, + "E-PRICE": 31, + "E-RECEIPTNUMBER": 11, + "E-TOTAL": 26, + "E-TRANSACTIONDATE": 10, + "E-TRANSACTIONTIME": 20, + "E-VATTAX": 4, + "I-ITEMS": 22, + "I-MERCHANT NAME": 16, + "I-MERCHANTADDRESS": 21, + "I-MERCHANTNAME": 3, + "I-RECEIPTNUMBER": 28, + "I-TRANSACTIONDATE": 35, + "I-TRANSACTIONTIME": 32, + "O": 5, + "S-ITEMS": 0, + "S-MERCHANTADDRESS": 34, + "S-MERCHANTNAME": 17, + "S-PRICE": 9, + "S-RECEIPTNUMBER": 8, + "S-TOTAL": 15, + "S-TRANSACTIONDATE": 19, + "S-TRANSACTIONTIME": 33, + "S-VATTAX": 18 + }, + "layer_norm_eps": 1e-05, + "max_2d_position_embeddings": 1024, + "max_position_embeddings": 514, + "max_rel_2d_pos": 256, + "max_rel_pos": 128, + "model_type": "layoutlmv3", + "num_attention_heads": 12, + "num_channels": 3, + "num_hidden_layers": 12, + "pad_token_id": 1, + "patch_size": 16, + "rel_2d_pos_bins": 64, + "rel_pos_bins": 32, + "second_input_size": 112, + "shape_size": 128, + "text_embed": true, + "torch_dtype": "float32", + "transformers_version": "4.36.0.dev0", + "type_vocab_size": 1, + "visual_embed": true, + "vocab_size": 50265 +} diff --git a/model/export/export.pkl b/model/export/export.pkl new file mode 100644 index 0000000000000000000000000000000000000000..f79827d1902ed01227fbfa3e9a5ccf4b76ffefd6 --- /dev/null +++ b/model/export/export.pkl @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86f7a51d8964d884608d82a8e74f2dc79b80a55cc61d1cd455b307cc56d99395 +size 46944572 diff --git a/model/model.safetensors b/model/model.safetensors new file mode 100644 index 0000000000000000000000000000000000000000..7f4c8922c1c4258b987113475d27c1b3fd6bd224 --- /dev/null +++ b/model/model.safetensors @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4e071d3c6f3acdc48fb4ca10460cb863510b9ae06c4d8af30302df3bab12b99 +size 503810412 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..40b5e55fc406546cc3acd6da3003440fff041dba --- /dev/null +++ b/requirements.txt @@ -0,0 +1,14 @@ +git+https://github.com/huggingface/transformers.git +git+https://github.com/huggingface/datasets.git +dill<0.3.5 +seqeval +accelerate +flask +fastai==1.0.61 +pytesseract +pandas +numpy +pillow +tqdm +gunicorn +opencv-python diff --git a/static/css/animate.css b/static/css/animate.css new file mode 100644 index 0000000000000000000000000000000000000000..54fa40e170bb51480880ddb0bf17267d196c295e --- /dev/null +++ b/static/css/animate.css @@ -0,0 +1,3272 @@ +@charset "UTF-8"; + +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2015 Daniel Eden +*/ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.bounceIn, +.animated.bounceOut { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +.animated.flipOutX, +.animated.flipOutY { + -webkit-animation-duration: .75s; + animation-duration: .75s; +} + +@-webkit-keyframes bounce { + from, 20%, 53%, 80%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +@keyframes bounce { + from, 20%, 53%, 80%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + } + + 40%, 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0,-4px,0); + transform: translate3d(0,-4px,0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +@keyframes flash { + from, 50%, 100% { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes wobble { + from { + -webkit-transform: none; + transform: none; + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, 11.1%, 100% { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, 11.1%, 100% { + -webkit-transform: none; + transform: none; + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes bounceIn { + from, 20%, 40%, 60%, 80%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97); + } + + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + 100% { + -webkit-transform: none; + transform: none; + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, 100% { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + 100% { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + 100% { + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none; + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 100% { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3); + } + + 100% { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 100% { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} \ No newline at end of file diff --git a/static/css/color.css b/static/css/color.css new file mode 100644 index 0000000000000000000000000000000000000000..d7cb52842fdac8111ea0efacb337276e0c7d28fb --- /dev/null +++ b/static/css/color.css @@ -0,0 +1,373 @@ +/* Namari Landing Page Dynamic Style Index + +1. Website Default Styling +2. Navigation +3. Primary and Secondary Colors +4. Banner +5. Typography +6. Buttons +7. Footer + + +/*------------------------------------------------------------------------------------------*/ + + +/* 1. Website Default Styling */ + + +/*------------------------------------------------------------------------------------------*/ + +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap'); +body { + background: #fff; +} + + +/* Default Link Color */ + +a, +.la-ball-triangle-path { + color: #FF8B4A; +} + +a:hover, +#header.nav-solid nav a:hover { + color: #FF8B4A; +} + + +/* Default Icon Color */ + +.icon i { + color: #FF8B4A; +} + + +/* Border Color */ + +#banner .section-heading:before, +.testimonial.classic footer:before { + background: #FF8B4A; +} + +.pricing-block-content:hover { + border-color: #FF8B4A; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 2. Navigation */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* Transparent Navigation Color on a Banner */ + +#header nav a, +#header i { + color: #111; + font-size: 16px; + font-weight: 500; +} + + +/* Navigation Colors when the Navigation is sticky and solid */ + +#header.nav-solid, +#header.nav-solid a, +#header.nav-solid i, +#nav-mobile ul li a { + color: #333; +} + + +/* Navigation Active State */ + +#header.nav-solid .active { + color: #FF8B4A; + border-color: #FF8B4A; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 3. Primary and Secondary Colors */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* Primary Background and Text Colors */ + +.primary-color, +.featured .pricing { + background-color: #FF8B4A; +} + +.primary-color, +.primary-color .section-title, +.primary-color .section-subtitle, +.featured .pricing, +.featured .pricing p { + color: #fff; +} + +.text-center .section-heading h2:after { + margin: 30px auto 25px auto; +} + + +/* Primary Icon Colors */ + +.primary-color .icon i, +.primary-color i { + color: #fff; +} + + +/* Secondary Background and Text Colors */ + +.secondary-color { + background-color: #f5f5f5; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 4. Banner */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* Banner Background and Text Colors */ + +#banner { + background-color: #f5f5f5; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 5. Typography */ + + +/*------------------------------------------------------------------------------------------*/ + +body { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 15px; + font-weight: normal; + color: #111; +} + + +/* Logo, if you are using Fonts as Logo and not image + +#logo h1 { + font-family:; + font-size:; + font-weight:; + color:; +} + +#logo h2 { + font-family:; + font-size:; + font-weight:; + color:; +} + +*/ + + +/* Banner Typography */ + +#banner h1 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 60px; + line-height: 60px; + font-weight: 700; + color: #111; +} + +#banner h2 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 17px; + font-weight: 200; + color: #111; +} + + +/* Section Title and Subtitle */ + +.section-title { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 34px; + font-weight: 700; + color: #111; +} + +.section-subtitle { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 16px; + font-weight: 300; + color: #9c9c9c; +} + + +/* Testimonial */ + +.testimonial q { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 17px; + font-weight: 300; +} + +.testimonial.classic q, +.testimonial.classic footer { + color: #111; +} + + +/* Standard Headings h1-h6 */ + +h1 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 40px; + font-weight: 300; + color: #111; +} + +h2 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 34px; + font-weight: 300; + color: #111; +} + +h3 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 30px; + font-weight: 700; + color: #111; +} + +h4 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 18px; + font-weight: 400; + color: #111; +} + +h5 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 16px; + font-weight: 400; + color: #111; +} + +h6 { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 14px; + font-weight: 400; + color: #111; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 6. Buttons */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* ----------Default Buttons---------- */ + + +/* Button Text */ + +.button, +input[type="submit"] { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 14px; + font-weight: bold; + color: #111; +} + + +/* Button Color */ + +.button, +input[type="submit"] { + border-color: #111; +} + + +/* Button Hover Color */ + +.button:hover, +input[type="submit"]:hover { + border-color: #FF8B4A; + color: #FF8B4A; +} + + +/* ----------Banner Buttons---------- */ + + +/* Button Text */ + +#banner .button { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 16px; + color: #111; +} + + +/* Button Color */ + +#banner .button { + border-color: #111; +} + + +/* Button Hover Color */ + +#banner .button:hover { + color: #FF8B4A; + border-color: #FF8B4A; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 7. Footer */ + + +/*------------------------------------------------------------------------------------------*/ + +#landing-footer, +#landing-footer p, +#landing-footer a { + font-family: 'Poppins', sans-serif, Arial, Helvetica; + font-size: 12px; + font-weight: normal; + color: #999; +} + + +/* Footer Icon Color */ + +#landing-footer i { + color: #999; +} \ No newline at end of file diff --git a/static/css/font-awesome.min.css b/static/css/font-awesome.min.css new file mode 100644 index 0000000000000000000000000000000000000000..540440ce89f2a408aa699b65100e18f15e0f09ca --- /dev/null +++ b/static/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000000000000000000000000000000000000..a782dd762b7fe9fafa6f1e2c4204d39b42775940 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,3062 @@ +/* Namari Landing Page v.1.1.0 Style Index - a free landing page by shapingrain.com + +1. Default and Reset styles +- 1.1 Input Elements +2. Global elements +- 2.1 Header +- 2.2 Logo +- 2.3 Buttons +- 2.4 Navigation +- 2.5 Social Elements +- 2.6 Images +3. Fonts and Headings +4. Banner +- 4.1 SignUp Form +5. Content Elements +- 5.1 Icons +- 5.2 Parallax Elements +- 5.3 Divider +6. Landing Page Sections +- 6.1 Features +- 6.2 Testimonials +- 6.3 Gallery +- 6.4 Video +- 6.5 Clients +- 6.6 Pricing Table +7. Footer + + +/*------------------------------------------------------------------------------------------*/ + + +/* 1. Defaults & Reset of specific styles across browsers */ + + +/*------------------------------------------------------------------------------------------*/ + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +body, +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +blockquote, +th, +td { + margin: 0; + padding: 0; + direction: ltr; +} + +body { + margin: 0; + padding: 0; + -webkit-font-smoothing: antialiased; + overflow-x: hidden; +} + +p { + line-height: 25px; +} + +.row img { + height: auto; + max-width: 100%; +} + +a { + text-decoration: none; + line-height: inherit; + -webkit-transition: opacity 0.3s ease-out; + -moz-transition: opacity 0.3s ease-out; + -o-transition: opacity 0.3s ease-out; + transition: opacity 0.3s ease-out; +} + +iframe { + border: 0 !important; +} + +.parallax-window { + min-height: 400px; + background: transparent; +} + +figure { + margin: 0; +} + + +/* Page Border */ + +.page-border { + position: fixed; + z-index: 999999; + pointer-events: none; +} + +.page-border .bottom-border, +.page-border .left-border, +.page-border .right-border, +.page-border .top-border { + background: #f3f3efcd; + position: fixed; + z-index: 9999; +} + +.page-border>.top-border, +.page-border>.right-border, +.page-border>.bottom-border, +.page-border>.left-border { + padding: 11px; + background: #ccc; +} + +.page-border .bottom-border, +.page-border .top-border { + width: 100%; + padding: 10px; + left: 0; +} + +.page-border .left-border, +.page-border .right-border { + padding: 10px; + height: 100%; + top: 0; +} + +.page-border .top-border { + top: 0; +} + +.page-border .right-border { + right: 0; +} + +.page-border .bottom-border { + bottom: 0; +} + +.page-border .left-border { + left: 0; +} + +#wrapper { + margin: 0 15px; + padding: 15px 0; + position: relative; +} + + +/* --------- 1.1 Input Elements ---------- */ + +input, +textarea { + border: 1px solid #e1e1e1; + padding: 10px; + -webkit-transition: all .3s linear; + -moz-transition: all .3s linear; + transition: all .3s linear; + border-radius: 3px; +} + +input { + height: 40px; + margin: 3px 0; + outline: none; + line-height: normal; + font-size: 14px; +} + +input[type="submit"] { + cursor: pointer; + border-style: solid; + border-width: 2px; + padding-top: 0; + padding-bottom: 0; +} + +select { + border: 1px solid #e1e1e1; + height: 40px; + padding: 5px; +} + +input:focus, +textarea:focus { + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} + +*:focus { + outline: none; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 2. Layout Elements */ + + +/*------------------------------------------------------------------------------------------*/ + +section { + clear: both; + overflow: hidden; +} + + +/* Rows and Columns */ + +.row { + max-width: 1245px; + margin: 0 auto; + padding: 75px 0; + position: relative; +} + +.no-padding-bottom .row, +.no-padding-bottom div, +.no-padding-bottom.row { + padding-bottom: 0; +} + +.no-padding-top.row, +.no-padding-top div { + padding-top: 0; +} + +.big-padding-top { + padding-top: 75px !important; +} + +.big-padding-bottom { + padding-bottom: 85px !important; +} + + +/* Targets all elements */ + +[class*='col-'] { + float: left; + padding: 20px; +} + +#clients .col-2-3 [class*='col-'] { + padding: 0; +} + + +/* Clearfix */ + +.clearfix:after { + content: ""; + display: table; + clear: both; +} + + +/* Main Widths */ + +.col-1 { + width: 100%; +} + +.col-2 { + width: 50%; +} + +.col-3 { + width: 33.33%; +} + +.col-4 { + width: 25%; +} + +.col-5 { + width: 20%; +} + +.col-6 { + width: 16.6666666667%; +} + +.col-7 { + width: 14.2857142857%; +} + +.col-8 { + width: 12.5%; +} + +.col-9 { + width: 11.1111111111%; +} + +.col-10 { + width: 10%; +} + +.col-11 { + width: 9.09090909091%; +} + +.col-12 { + width: 8.33%; +} + +.col-2-3 { + width: 66.66%; +} + +.col-3-4 { + width: 75%; +} + +.col-9-10 { + width: 90%; +} + + +/* Golden Ratio */ + +.col-lg-6 { + width: 50%; + height: auto; +} + +.col-lg-3 { + width: 50%; + padding-top: 4.5%; +} + + +/* --------- 2.1 Header --------- */ + +#header { + height: 71px !important; + overflow: visible; + z-index: 9999; + width: 100%; + position: absolute !important; +} + +#header .row { + padding: 0; +} + +#header aside { + text-align: right; +} + +#header ul { + text-align: center; +} + +#header li { + display: inline-block; + list-style: none; + margin: 0; +} + + +/* --------- 2.2 Logo ---------- */ + +#logo { + float: left; + height: 90px; + line-height: 66px; + margin: 10px 15px 0 0; +} + +#logo h1, +#logo h2 { + display: inline-block; +} + +#banner #logo h1 { + font-size: 28px; + margin-right: 10px; + font-weight: 900; + padding: 0; +} + +#logo h2 { + font-size: 18px; + padding: 0; +} + +#logo img { + max-height: 40px; + vertical-align: middle; + margin-right: 15px; +} + +#navigation-logo { + display: none; +} + +.nav-solid #logo #banner-logo { + display: none; +} + +.nav-solid #logo #navigation-logo { + display: inline-block; + margin-bottom: 10px; +} + + +/* --------- 2.3 Buttons ---------- */ + +.call-to-action { + padding: 35px 0 35px 0; +} + + +/*Style*/ + +.button { + font-size: 16px; + margin: 35px 0; + padding: 11px 16px; + -webkit-transition: all .3s linear; + -moz-transition: all .3s linear; + transition: all .3s linear; + display: inline-block; + border-width: 3px; + border-style: solid; +} + + +/* Play Button */ + +#video-section { + position: relative; +} + +.play-video { + height: 110px; + position: absolute; + top: 50%; + margin-top: -110px; + width: 100%; +} + +.play-icon { + display: inline-block; + font-size: 0px; + cursor: pointer; + margin: 45px auto; + width: 110px; + height: 110px; + border-radius: 50%; + text-align: center; + position: relative; + z-index: 1; +} + +.play-icon:after { + pointer-events: none; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + content: ''; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.play-icon:before { + font-family: 'fontawesome'; + content: '\f144'; + speak: none; + font-size: 74px; + line-height: 110px; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + display: block; + -webkit-font-smoothing: antialiased; + color: #fff; +} + +.play-video .play-icon { + background: rgba(255, 255, 255, 0.5); + -webkit-transition: -webkit-transform ease-out 0.3s, background 0.4s; + -moz-transition: -moz-transform ease-out 0.3s, background 0.4s; + transition: transform ease-out 0.3s, background 0.4s; +} + +.play-video .play-icon:after { + top: 0; + left: 0; + padding: 0; + z-index: -1; + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.1); + opacity: 0; + -webkit-transform: scale(0.9); + -moz-transform: scale(0.9); + -ms-transform: scale(0.9); + transform: scale(0.9); +} + +.play-video .play-icon:hover { + background: rgba(255, 255, 255, 0.05); + -webkit-transform: scale(0.93); + -moz-transform: scale(0.93); + -ms-transform: scale(0.93); + transform: scale(0.93); + color: #fff; +} + + +/* --------- 2.4 Navigation ---------- */ + +#header { + font-size: 13px; +} + +#header aside { + float: right; +} + +#header nav ul { + text-transform: uppercase; +} + +#header nav a { + height: 71px; + line-height: 90px; + display: block; + padding: 0 10px; +} + +#header nav a:hover { + color: #FF8B4A; +} + + +/*Navigation Solid*/ + +#header.nav-solid [class*='col-'] { + padding: 0 20px; +} + +#header.nav-solid { + background: #fff; + box-shadow: 2px 0px 3px rgba(0, 0, 0, 0.2); + position: fixed !important; + left: 0; +} + +#header.nav-solid nav a { + border-bottom: 3px solid; + border-color: #fff; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +#header.nav-solid nav a:hover { + opacity: 1; +} + + +/* Social Elements when Solid*/ + +#header.nav-solid .social-icons a { + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + opacity: 0.5; +} + +#header.nav-solid .social-icons a:hover { + opacity: 1; + color: #e4473c; +} + + +/* Responsive Nav Styling */ + +#nav-trigger { + display: none; + text-align: right; +} + +#nav-trigger span { + display: inline-block; + width: 38px; + height: 71px; + color: #111; + cursor: pointer; + text-transform: uppercase; + font-size: 22px; + text-align: center; + border-top-right-radius: 5px; + border-top-left-radius: 5px; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +#nav-trigger span:after { + font-family: "fontAwesome"; + display: inline-block; + width: 38px; + height: 71px; + line-height: 75px; + text-align: center; + content: "\f0c9"; + border-top-right-radius: 5px; + border-top-left-radius: 5px; +} + +#nav-trigger span.open:after { + content: "\f00d"; +} + +#nav-trigger span:hover, +.nav-solid #nav-trigger span.open:hover, +.nav-solid #nav-trigger span:hover { + opacity: 0.6; +} + +#nav-trigger span.open, +#nav-trigger span.open:hover { + color: #111; +} + +.nav-solid #nav-trigger span.open:hover { + color: #999; +} + +.nav-solid #nav-trigger span { + color: #999; + opacity: 1; +} + +nav#nav-mobile { + position: relative; + display: none; +} + +nav#nav-mobile ul { + display: none; + list-style-type: none; + position: absolute; + left: 0; + right: 0; + margin-left: -20px; + margin-right: -20px; + padding-top: 10px; + padding-bottom: 10px; + text-align: center; + background-color: #fff; + box-shadow: 0 5px 3px rgba(0, 0, 0, 0.2); +} + +nav#nav-mobile ul:after { + display: none; +} + +nav#nav-mobile li { + margin: 0 20px; + float: none; + text-align: left; + border-bottom: 1px solid #e1e1e1; +} + +nav#nav-mobile li:last-child { + border-bottom: none; +} + +.nav-solid nav#nav-mobile li { + border-top: 1px solid #e1e1e1; + border-bottom: none; +} + +nav#nav-mobile a { + display: block; + padding: 12px 0; + color: #333; + width: 100%; + height: auto; + line-height: normal; + display: block; + border-bottom: none !important; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +nav#nav-mobile a:hover { + background: #fafafa; + opacity: 1; +} + + +/* --------- 2.5 Social Elements ---------- */ + +#header .col-4 { + text-align: right; +} + +.social-icons { + display: inline-block; + list-style: none; +} + +.social-icons a { + display: inline-block; + width: 32px; + text-align: center; +} + +.social-icons a:hover { + opacity: 0.7; +} + +.social-icons span { + display: none; +} + +#header .social-icons { + margin-top: 27px; +} + + +/* --------- 2.6 Images ---------- */ + + +/*Alignment*/ + +img { + vertical-align: top; +} + +.image-center { + display: block; + margin: 0 auto; +} + +a img { + border: none; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + -webkit-backface-visibility: hidden; +} + +a img:hover { + opacity: 0.7; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 3. Fonts */ + + +/*------------------------------------------------------------------------------------------*/ + +h1 { + padding: 20px 0; +} + +h2 { + padding: 14px 0; +} + +h3 { + padding: 10px 0; +} + +h4 { + padding: 7px 0; +} + +h5 { + padding: 7px 0; +} + +h6 { + padding: 7px 0; +} + + +/* Text Alignment */ + +.text-left { + text-align: left; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + + +/* Section Headings */ + +.section-heading { + padding: 0 0 15px 0; + display: flex; + justify-content: center; +} + +.section-subtitle { + font-size: 18px; + padding-top: 0; +} + +.section-heading h3 { + font-size: 14px; + font-weight: bold; + color: #ccc; + letter-spacing: 2px; + padding-bottom: 0; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 4. Banner */ + + +/*------------------------------------------------------------------------------------------*/ + +#banner { + background-size: cover; +} + +#banner-content.row { + padding-top: 50px; + padding-bottom: 170px; +} + +#banner h1 { + padding-top: 5%; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 5. Content Elements */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* --------- 5.1 Icons ---------- */ + + +/*Font Icon sizes*/ + +.fa-1x { + font-size: 15px !important; +} + + +/*Icon Block*/ + +.icon-block { + position: relative; +} + +.icon-block h4 { + font-weight: bold; + padding-top: 0; +} + +.icon-block .icon { + position: absolute; +} + +.icon-block p { + margin-top: 0; +} + + +/* Icon Left*/ + +.icon-left .icon { + left: 15; +} + +.icon-left .icon-block-description { + padding-left: 53px; +} + + +/* Icon Right */ + +.icon-right .icon { + right: 15; +} + +.icon-right .icon-block-description { + padding-right: 53px; +} + + +/* Icon Above */ + +.icon-top { + display: block; +} + +.icon-top .icon { + position: relative; + display: block; +} + +.icon-top .icon-block-description { + padding-top: 25px; +} + + +/* --------- 5.2 Parallax Elements ---------- */ + +.banner-parallax-1, +.banner-parallax-2, +.banner-parallax-3 { + min-height: 350px; +} + + +/* --------- 5.3 Divider ---------- */ + +.divider { + position: relative; + width: 40%; + height: 20px; + line-height: 20px; + margin: 10px auto 5px auto; + clear: both; + text-align: center; +} + +.divider-inner { + position: absolute; + height: 1px; + width: 100%; + top: 50%; + margin-top: -1px; + border-top: 1px solid; + border-color: #e1e1e1; +} + +.divider i { + background: #fff; + position: relative; + top: -11px; + padding: 0 5px 0 5px; + color: #e1e1e1; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 6. Landing Page Sections */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* --------- 6.1 Introduction ---------- */ + +.introduction img.featured { + padding: 55px 0 0 0; +} + + +/* --------- 6.2 Features ---------- */ + +.features.row { + padding-left: 5%; + padding-right: 5%; +} + +.features div:nth-child(4) { + clear: both; +} + + +/* --------- 6.3 Testimonials ---------- */ + +.testimonial { + padding: 15px; +} + +blockquote { + position: relative; +} + +.testimonial img { + max-height: 120px; + border-radius: 250em; +} + +.testimonial footer { + padding-top: 12px; +} + + +/* Style Classic - Avatar above Testimonial */ + +.testimonial.classic img { + display: inline-block; + margin-bottom: 25px; +} + +.testimonial.classic q { + display: block; +} + +.testimonial.classic footer:before { + display: block; + content: ""; + width: 30px; + height: 4px; + margin: 10px auto 15px auto; +} + + +/* Style Big */ + +.testimonial.bigtest { + padding-top: 0; +} + +.testimonial.bigtest q { + font-size: 22px; +} + + +/* --------- 6.4 Gallery ---------- */ + +#gallery img { + max-height: 300px; +} + +#gallery [class*='col-'] { + padding: 0; +} + +#gallery a { + display: inline-block; + position: relative; + overflow: hidden; +} + +#gallery a:hover img { + opacity: 0.15; + -moz-backface-visibility: hidden; +} + +#gallery a:before { + font-size: 2.2em; + font-style: normal; + font-weight: normal; + text-align: center; + content: "+"; + width: 70px; + height: 70px; + border-radius: 100em; + display: block; + position: absolute; + top: 55%; + left: 50%; + line-height: 72px; + margin: -35px 0 0 -35px; + opacity: 0; + -webkit-transition: all .2s linear; + -moz-transition: all .2s linear; + transition: all .2s linear; + vertical-align: middle; +} + +#gallery a:hover:before { + opacity: 1; + top: 50%; + left: 50%; +} + + +/** + * Featherlight – ultra slim jQuery lightbox + * Version 1.3.3 - http://noelboss.github.io/featherlight/ + * + * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com) + * MIT Licensed. +**/ + +@media all { + .featherlight { + display: none; + /* dimensions: spanning the background from edge to edge */ + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 2147483647; + /* z-index needs to be >= elements on the site. */ + /* position: centering content */ + text-align: center; + /* insures that the ::before pseudo element doesn't force wrap with fixed width content; */ + white-space: nowrap; + /* styling */ + cursor: pointer; + background: #333; + /* IE8 "hack" for nested featherlights */ + background: rgba(0, 0, 0, 0); + } + /* support for nested featherlights. Does not work in IE8 (use JS to fix) */ + .featherlight:last-of-type { + background: rgba(0, 0, 0, 0.8); + } + .featherlight:before { + /* position: trick to center content vertically */ + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; + margin-right: -0.25em; + } + .featherlight .featherlight-content { + /* position: centering vertical and horizontal */ + text-align: left; + vertical-align: middle; + display: inline-block; + /* dimensions: cut off images */ + overflow: auto; + padding: 25px 0; + border-bottom: 25px solid transparent; + /* dimensions: handling small or empty content */ + min-width: 30%; + /* dimensions: handling large content */ + margin-left: 5%; + margin-right: 5%; + max-height: 95%; + /* styling */ + cursor: auto; + /* reset white-space wrapping */ + white-space: normal; + } + /* contains the content */ + .featherlight .featherlight-inner { + /* make sure its visible */ + display: block; + } + .featherlight .featherlight-close-icon { + /* position: centering vertical and horizontal */ + position: absolute; + z-index: 9999; + top: 25px; + right: 25px; + /* dimensions: 25px x 25px */ + line-height: 25px; + width: 25px; + /* styling */ + cursor: pointer; + text-align: center; + color: #fff; + font-family: "fontawesome"; + font-size: 22px; + opacity: 0.5; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + } + .featherlight .featherlight-close-icon:hover { + opacity: 1; + } + .featherlight .featherlight-image { + /* styling */ + max-height: 100%; + max-width: 100%; + } + .featherlight-iframe .featherlight-content { + /* removed the border for image croping since iframe is edge to edge */ + border-bottom: 0; + padding: 0; + } + .featherlight iframe { + /* styling */ + border: none; + } +} + + +/* handling phones and small screens */ + +@media only screen and (max-width: 1024px) { + .featherlight .featherlight-content { + /* dimensions: maximize lightbox with for small screens */ + margin-left: 10px; + margin-right: 10px; + max-height: 98%; + padding: 10px 10px 0; + border-bottom: 10px solid transparent; + } +} + + +/* Gallery Styling */ + +@media all { + .featherlight-next, + .featherlight-previous { + font-family: "fontawesome"; + font-size: 22px; + display: block; + position: absolute; + top: 25px; + right: 0; + bottom: 0; + left: 80%; + cursor: pointer; + /* preventing text selection */ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* IE9 hack, otherwise navigation doesn't appear */ + background: rgba(0, 0, 0, 0); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + } + .featherlight-previous { + left: 0; + right: 80%; + } + .featherlight-next span, + .featherlight-previous span { + display: inline-block; + opacity: 0.3; + position: absolute; + top: 50%; + width: 100%; + font-size: 80px; + line-height: 80px; + /* center vertically */ + margin-top: -40px; + color: #fff; + font-style: normal; + font-weight: normal; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + } + .featherlight-next span { + text-align: right; + left: auto; + right: 7%; + } + .featherlight-previous span { + text-align: left; + left: 7%; + } + .featherlight-next:hover span, + .featherlight-previous:hover span { + display: inline-block; + opacity: 1; + } + /* Hide navigation while loading */ + .featherlight-loading .featherlight-previous, + .featherlight-loading .featherlight-next { + display: none; + } +} + + +/* Always display arrows on touch devices */ + +@media only screen and (max-device-width: 1024px) { + .featherlight-next:hover, + .featherlight-previous:hover { + background: none; + } + .featherlight-next span, + .featherlight-previous span { + display: block; + } +} + + +/* handling phones and small screens */ + +@media only screen and (max-width: 1024px) { + .featherlight-next, + .featherlight-previous { + top: 10px; + right: 10px; + left: 85%; + } + .featherlight-previous { + left: 10px; + right: 85%; + } + .featherlight-next span, + .featherlight-previous span { + margin-top: -30px; + font-size: 40px; + } +} + + +/* --------- 6.5 Video ---------- */ + +#video-box { + color: #fff; + position: relative; + overflow: hidden; + text-align: center; +} + +.video_container, +.easyContainer { + position: relative; + padding-bottom: 56.25%; + /* 16/9 ratio */ + margin: 0; + padding-top: 0; + /* IE6 workaround*/ + height: 0; + overflow: hidden; +} + +.video_container iframe, +.video_container object, +.video_container embed { + position: absolute; + top: 0; + left: 0; + width: 100% !important; + height: 100% !important; +} + +.slvj-lightbox iframe, +.slvj-lightbox object, +.slvj-lightbox embed { + width: 100% !important; + height: 529px !important; +} + +.videojs-background-wrap { + overflow: hidden; + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + z-index: -998; +} + +#slvj-window { + width: 100%; + min-height: 100%; + z-index: 9999999999; + background: rgba(0, 0, 0, 0.8); + position: fixed; + top: 0; + left: 0; +} + +#slvj-window, +#slvj-window * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#slvj-background-close { + width: 100%; + min-height: 100%; + z-index: 31; + position: fixed; + top: 0; + left: 0; +} + +#slvj-back-lightbox { + max-width: 940px; + max-height: 529px; + z-index: 32; + text-align: center; + margin: 0 auto; +} + +.slvj-lightbox { + width: 100%; + height: 100%; + margin: 0; + z-index: 53; +} + +#slvj-close-icon:before { + font-family: "fontawesome"; + color: #fff; + content: '\f00d'; + font-size: 22px; + opacity: 0.5; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; + z-index: 99999; + height: 22px; + width: 22px; + position: absolute; + top: 15px; + right: 15px; + cursor: pointer; +} + +#slvj-close-icon:before:hover { + opacity: 1; + cursor: pointer; +} + + +/* --------- 6.6 Clients ---------- */ + +#clients a { + display: block; + text-align: center; + position: relative; + text-transform: uppercase; + font-weight: bold; + color: #fff; +} + +#clients img { + display: inline-block; + padding: 15px 25px; +} + +.client-overlay { + background: rgba(0, 0, 0, 0.8); + position: absolute; + top; + 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +#clients a:hover .client-overlay { + opacity: 1; +} + +.client-overlay span { + position: absolute; + top: 48%; + left: 0; + width: 100%; + text-align: center; + display: inline-block; +} + + +/* --------- 6.7 Pricing Table ---------- */ + +.pricing-block-content { + background: #fff; + padding: 25px 0 25px 0; + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.07); + transition: all 0.2s ease-in-out 0s; + position: relative; + border: 10px solid #fff; +} + +.pricing-block ul { + list-style: none; + margin: 25px 0 25px 0; +} + +.pricing-block li { + padding: 14px 0; + border-bottom: 1px dotted #e1e1e1; +} + +.pricing-block li:last-of-type { + border: none; +} + +.pricing-block h3 { + font-size: 17px; + text-transform: uppercase; + padding-bottom: 0; +} + +.pricing-sub { + font-style: italic; + color: #ccc; + margin: 0 0 25px 0; +} + + +/*Price*/ + +.pricing { + background: #f5f5f5; + padding: 25px; + position: relative; +} + +.price { + display: inline-block; + font-size: 62px; + font-weight: 700; + position: relative; +} + +.price span { + position: absolute; + top: 0; + left: -20px; + font-size: 22px; +} + +.pricing p { + font-style: italic; + color: #b4b4b4; + line-height: auto; + margin: 0; +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* 7. Footer */ + + +/*------------------------------------------------------------------------------------------*/ + +#landing-footer { + clear: both; +} + +#landing-footer .row { + padding: 0; +} + +#landing-footer p { + margin: 0; +} + +#landing-footer ul { + list-style: none; + text-align: right; +} + +#landing-footer li { + display: inline-block; +} + + +/* Scroll Up */ + +#scrollUp { + bottom: 15px; + right: 30px; + width: 70px; + height: 80px; + margin-bottom: -10px; + padding: 0 5px 20px 5px; + text-align: center; + text-decoration: none; + color: #fff; + -webkit-transition: margin-bottom 150ms linear; + -moz-transition: margin-bottom 150ms linear; + -o-transition: margin-bottom 150ms linear; + transition: margin-bottom 150ms linear; +} + +#scrollUp:hover { + margin-bottom: 0; +} + +#scrollUp:before { + background: #ccc; + font-family: "fontawesome"; + font-size: 2.4em; + font-style: normal; + font-weight: normal; + text-align: center; + color: #fff; + width: 45px; + height: 45px; + display: inline-block; + line-height: 45px; + content: "\f106"; + opacity: 1; +} + +.loader { + z-index: 999999; + width: 94px; + height: 77px; + position: relative; + top: 20%; + left: 50%; + transform: translate(-50%, -50%); + backface-visibility: hidden; + display: none; + span { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 20px; + background-color: #ff8c4a6f; + z-index: 1; + transform: translateY(135%); + animation: move 2s cubic-bezier(0.15, 0.44, 0.76, 0.64); + /* Adjust the animation duration here */ + animation-iteration-count: infinite; + } + >div { + z-index: 1; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 48%; + backface-visibility: hidden; + } + i { + display: block; + height: 1px; + background: #000; + margin: 0 auto 2px; + margin: 0 auto 2.2px; + backface-visibility: hidden; + &:nth-child(2) { + width: 75%; + } + &:nth-child(3) { + width: 81%; + } + &:nth-child(4) { + width: 87%; + } + &:nth-child(6) { + width: 71%; + } + &:nth-child(7) { + width: 81%; + } + &:nth-child(8) { + width: 65%; + } + &:nth-child(9) { + width: 83%; + } + &:nth-child(10) { + width: 75%; + } + &:nth-child(12) { + width: 86%; + } + &:nth-child(14) { + width: 65%; + } + &:nth-child(16) { + width: 75%; + } + &:nth-child(18) { + width: 83%; + } + } + &:before, + &:after, + em:after, + em:before { + border-color: #000; + content: ""; + position: absolute; + width: 19px; + height: 16px; + border-style: solid; + border-width: 0px; + } + &:before { + left: 0; + top: 0; + border-left-width: 1px; + border-top-width: 1px; + } + &:after { + right: 0; + top: 0; + border-right-width: 1px; + border-top-width: 1px; + } + em:before { + left: 0; + bottom: 0; + border-left-width: 1px; + border-bottom-width: 1px; + } + em:after { + right: 0; + bottom: 0; + border-right-width: 1px; + border-bottom-width: 1px; + } +} + +@keyframes move { + 0%, + 100% { + transform: translateY(0%); + } + 25% { + transform: translateY(135%); + } + 50% { + transform: translateY(272%); + } + 75% { + transform: translateY(135%); + } +} + + +/*Preloader*/ + +.ocrloader { + z-index: 999999; + width: 94px; + height: 77px; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + backface-visibility: hidden; + span { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 20px; + background-color: #ff8c4a6f; + z-index: 1; + transform: translateY(135%); + animation: move 2s cubic-bezier(0.15, 0.44, 0.76, 0.64); + /* Adjust the animation duration here */ + animation-iteration-count: infinite; + } + >div { + z-index: 1; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 48%; + backface-visibility: hidden; + } + i { + display: block; + height: 1px; + background: #000; + margin: 0 auto 2px; + margin: 0 auto 2.2px; + backface-visibility: hidden; + &:nth-child(2) { + width: 75%; + } + &:nth-child(3) { + width: 81%; + } + &:nth-child(4) { + width: 87%; + } + &:nth-child(6) { + width: 71%; + } + &:nth-child(7) { + width: 81%; + } + &:nth-child(8) { + width: 65%; + } + &:nth-child(9) { + width: 83%; + } + &:nth-child(10) { + width: 75%; + } + &:nth-child(12) { + width: 86%; + } + &:nth-child(14) { + width: 65%; + } + &:nth-child(16) { + width: 75%; + } + &:nth-child(18) { + width: 83%; + } + } + &:before, + &:after, + em:after, + em:before { + border-color: #000; + content: ""; + position: absolute; + width: 19px; + height: 16px; + border-style: solid; + border-width: 0px; + } + &:before { + left: 0; + top: 0; + border-left-width: 1px; + border-top-width: 1px; + } + &:after { + right: 0; + top: 0; + border-right-width: 1px; + border-top-width: 1px; + } + em:before { + left: 0; + bottom: 0; + border-left-width: 1px; + border-bottom-width: 1px; + } + em:after { + right: 0; + bottom: 0; + border-right-width: 1px; + border-bottom-width: 1px; + } +} + +@keyframes move { + 0%, + 100% { + transform: translateY(0%); + } + 25% { + transform: translateY(135%); + } + 50% { + transform: translateY(272%); + } + 75% { + transform: translateY(135%); + } +} + + +/*! + * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/) + * Copyright 2015 Daniel Cardoso <@DanielCardoso> + * Licensed under MIT + */ + +.la-ball-triangle-path, +.la-ball-triangle-path>div { + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.la-ball-triangle-path { + display: block; + font-size: 0; + color: #fff; +} + +.la-ball-triangle-path.la-dark { + color: #333; +} + +.la-ball-triangle-path>div { + display: inline-block; + float: none; + background-color: currentColor; + border: 0 solid currentColor; +} + +.la-ball-triangle-path { + width: 32px; + height: 32px; +} + +.la-ball-triangle-path>div { + position: absolute; + top: 0; + left: 0; + width: 10px; + height: 10px; + border-radius: 100%; +} + +.la-ball-triangle-path>div:nth-child(1) { + -webkit-animation: ball-triangle-path-ball-one 2s 0s ease-in-out infinite; + -moz-animation: ball-triangle-path-ball-one 2s 0s ease-in-out infinite; + -o-animation: ball-triangle-path-ball-one 2s 0s ease-in-out infinite; + animation: ball-triangle-path-ball-one 2s 0s ease-in-out infinite; +} + +.la-ball-triangle-path>div:nth-child(2) { + -webkit-animation: ball-triangle-path-ball-two 2s 0s ease-in-out infinite; + -moz-animation: ball-triangle-path-ball-two 2s 0s ease-in-out infinite; + -o-animation: ball-triangle-path-ball-two 2s 0s ease-in-out infinite; + animation: ball-triangle-path-ball-two 2s 0s ease-in-out infinite; +} + +.la-ball-triangle-path>div:nth-child(3) { + -webkit-animation: ball-triangle-path-ball-tree 2s 0s ease-in-out infinite; + -moz-animation: ball-triangle-path-ball-tree 2s 0s ease-in-out infinite; + -o-animation: ball-triangle-path-ball-tree 2s 0s ease-in-out infinite; + animation: ball-triangle-path-ball-tree 2s 0s ease-in-out infinite; +} + +.la-ball-triangle-path.la-sm { + width: 16px; + height: 16px; +} + +.la-ball-triangle-path.la-sm>div { + width: 4px; + height: 4px; +} + +.la-ball-triangle-path.la-2x { + width: 64px; + height: 64px; +} + +.la-ball-triangle-path.la-2x>div { + width: 20px; + height: 20px; +} + +.la-ball-triangle-path.la-3x { + width: 96px; + height: 96px; +} + +.la-ball-triangle-path.la-3x>div { + width: 30px; + height: 30px; +} + + +/* + * Animations + */ + +@-webkit-keyframes ball-triangle-path-ball-one { + 0% { + -webkit-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(0, 220%); + transform: translate(0, 220%); + } +} + +@-moz-keyframes ball-triangle-path-ball-one { + 0% { + -moz-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -moz-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -moz-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -moz-transform: translate(0, 220%); + transform: translate(0, 220%); + } +} + +@-o-keyframes ball-triangle-path-ball-one { + 0% { + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } +} + +@keyframes ball-triangle-path-ball-one { + 0% { + -webkit-transform: translate(0, 220%); + -moz-transform: translate(0, 220%); + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(110%, 0); + -moz-transform: translate(110%, 0); + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + -moz-transform: translate(220%, 220%); + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(0, 220%); + -moz-transform: translate(0, 220%); + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } +} + +@-webkit-keyframes ball-triangle-path-ball-two { + 0% { + -webkit-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(110%, 0); + transform: translate(110%, 0); + } +} + +@-moz-keyframes ball-triangle-path-ball-two { + 0% { + -moz-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -moz-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -moz-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -moz-transform: translate(110%, 0); + transform: translate(110%, 0); + } +} + +@-o-keyframes ball-triangle-path-ball-two { + 0% { + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } +} + +@keyframes ball-triangle-path-ball-two { + 0% { + -webkit-transform: translate(110%, 0); + -moz-transform: translate(110%, 0); + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + -moz-transform: translate(220%, 220%); + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(0, 220%); + -moz-transform: translate(0, 220%); + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(110%, 0); + -moz-transform: translate(110%, 0); + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } +} + +@-webkit-keyframes ball-triangle-path-ball-tree { + 0% { + -webkit-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } +} + +@-moz-keyframes ball-triangle-path-ball-tree { + 0% { + -moz-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -moz-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -moz-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -moz-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } +} + +@-o-keyframes ball-triangle-path-ball-tree { + 0% { + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } +} + +@keyframes ball-triangle-path-ball-tree { + 0% { + -webkit-transform: translate(220%, 220%); + -moz-transform: translate(220%, 220%); + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } + 17% { + opacity: .25; + } + 33% { + opacity: 1; + -webkit-transform: translate(0, 220%); + -moz-transform: translate(0, 220%); + -o-transform: translate(0, 220%); + transform: translate(0, 220%); + } + 50% { + opacity: .25; + } + 66% { + opacity: 1; + -webkit-transform: translate(110%, 0); + -moz-transform: translate(110%, 0); + -o-transform: translate(110%, 0); + transform: translate(110%, 0); + } + 83% { + opacity: .25; + } + 100% { + opacity: 1; + -webkit-transform: translate(220%, 220%); + -moz-transform: translate(220%, 220%); + -o-transform: translate(220%, 220%); + transform: translate(220%, 220%); + } +} + + +/*------------------------------------------------------------------------------------------*/ + + +/* Responsive Elements */ + + +/*------------------------------------------------------------------------------------------*/ + + +/* =Media Queries for Nav +===============================*/ + +@media all and (max-width: 1024px) { + #nav-trigger { + display: block; + } + nav#nav-main { + display: none; + } + nav#nav-mobile { + display: block; + } + nav#nav-mobile li { + display: block; + } + #header aside { + display: none; + } +} + + +/* Landscape mobile & down +===============================*/ + +@media (max-width: 480px) { + #wrapper { + margin: 0; + padding: 0; + } + .page-border, + #scrollUp, + #scrollUp:before { + display: none; + } + .row { + padding: 15px !important; + } + .col-1, + .col-2, + .col-3, + .col-4, + .col-5, + .col-6, + .col-7, + .col-8, + .col-9, + .col-10, + .col-11, + .col-12, + .col-2-3, + .col-3-4, + .col-9-10, + .col-61, + .col-38, + .row { + width: 100%; + } + .col-1, + .col-2, + .col-3, + .col-4, + .col-5, + .col-6, + .col-7, + .col-8, + .col-9, + .col-10, + .col-11, + .col-12, + .col-2-3, + .col-3-4, + .col-9-10, + .col-61, + .col-38 { + padding-right: 0; + padding-left: 0; + } + /*-----------------Header Elements-----------------*/ + #header .row { + padding: 0 15px !important; + } + #header.nav-solid [class*="col-"] { + padding: 0; + } + /*Logo*/ + #logo h2 { + padding: 0; + } + /* Social */ + #header aside { + clear: both; + padding: 0; + } + #header ul.social-icons { + margin-top: 0; + } + #banner-content.row { + padding-top: 85px !important; + } + /*-----------------Sections-----------------*/ + /* Call to Action*/ + .call-to-action { + padding-bottom: 25px; + } + /* Video */ + .slvj-lightbox iframe, + .slvj-lightbox object, + .slvj-lightbox embed { + height: 270px !important; + } + /* Footer */ + #landing-footer #copyright { + float: left; + width: 50%; + } + #landing-footer .social-icons { + float: right; + width: 50%; + } + /*-----------------Typography-----------------*/ + h1 { + font-size: 38px; + } + #banner h1 { + font-size: 48px; + } + /* Hide Elements */ + a#scrollUp { + display: none !important; + } +} + + +/* Mobile to Tablet Portrait +===============================*/ + +@media (min-width: 480px) and (max-width: 767px) { + #wrapper { + margin: 0; + padding: 0; + } + .page-border, + #scrollUp, + #scrollUp:before { + display: none; + } + .row { + padding: 15px 0 !important; + } + .col-1, + .col-2, + .col-5, + .col-7, + .col-9, + .col-11, + .col-2-3, + .col-3-4, + .col-61, + .col-38, + .row { + width: 100%; + } + .col-3, + .col-4, + .col-6, + .col-8, + .col-10, + .col-12 { + width: 50%; + } + /*-----------------Header Elements-----------------*/ + #header .row { + padding: 0 !important; + } + #header aside { + display: inline-block; + position: absolute; + top: 40px; + right: 60px; + padding-top: 3px; + padding-right: 5px; + } + #header.nav-solid aside { + top: 20px; + } + #header aside ul { + margin-top: 0 !important; + padding-top: 6px; + } + #banner-content.row { + padding-top: 85px !important; + } + /*Navigation*/ + nav#nav-mobile ul { + margin-left: -40px; + margin-right: -40px; + padding-left: 20px; + padding-right: 20px; + } + /*-----------------Sections-----------------*/ + /* Video */ + .slvj-lightbox iframe, + .slvj-lightbox object, + .slvj-lightbox embed { + height: 370px !important; + } + /* Footer */ + #landing-footer #copyright { + float: left; + width: 50%; + } + #landing-footer .social-icons { + float: right; + width: 50%; + } +} + + +/* Landscape Tablet to Desktop +===============================*/ + +@media (min-width: 768px) and (max-width: 1024px) { + #wrapper { + margin: 0; + padding: 0; + } + .page-border { + display: none; + } + .big-padding-top { + padding-top: 45px !important; + } + /*-----------------Header Elements-----------------*/ + #header aside { + display: inline-block; + position: absolute; + top: 40px; + right: 60px; + padding-top: 3px; + padding-right: 5px; + } + #header.nav-solid aside { + top: 20px; + } + #header aside ul { + margin-top: 0 !important; + padding-top: 6px; + } + /*Navigation*/ + nav#nav-mobile ul { + margin-left: -40px; + margin-right: -40px; + padding-left: 20px; + padding-right: 20px; + } + /*-----------------Sections-----------------*/ + /* Video */ + .slvj-lightbox object, + .slvj-lightbox embed { + height: 432px !important; + } +} + +@import 'https://fonts.googleapis.com/css?family=Montserrat:800|Poppins:400'; +.wall { + position: absolute; + width: 100vw; + height: 100vh; + background-color: #fff; +} + +.row1 { + z-index: -9999999; + display: flex; + animation: 200s linear ticker-to-left infinite; +} + +.row1:nth-child(even) { + animation: 60s linear ticker-to-right infinite; + justify-content: flex-end; +} + +.row1 span { + margin-right: 0.2em; + font-family: sans-serif; + color: transparent; + font-size: 20vh; + font-weight: bold; + line-height: 1; + text-transform: uppercase; + -webkit-text-stroke-width: 4px; + text-stroke-width: 4px; + -webkit-text-stroke-color: #f5f5f599; + text-stroke-color: #f5f5f599; +} + +@keyframes ticker-to-left { + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes ticker-to-right { + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(100%, 0, 0); + } +} + +.container { + max-width: 500px; + max-height: 400px; + width: 100%; + padding: 25px; + background: rgb(255 255 255 / 0%); + box-shadow: 0 8px 32px 0 rgba(154, 154, 154, 0.37); + backdrop-filter: blur(2.2px); + -webkit-backdrop-filter: blur(2.2px); + border-radius: 12px; + border: 1px solid rgba(52, 52, 52, 0.195); +} + +.uploadbuttons { + display: flex; + justify-content: flex-start; +} + +.container:hover { + background: rgb(255 93 0 / 11%); + /* Adjust the alpha value for the desired transparency */ + box-shadow: 0 8px 32px 0 rgba(154, 154, 154, 0.37); + backdrop-filter: blur(2.2px); + -webkit-backdrop-filter: blur(2.2px); + border: 1px solid rgba(103, 101, 101, 0.195); + transition: all .4s ease-in-out; +} + +.drag-area { + height: 200px; + border: 3px dashed rgba(128, 128, 128, 0.263); + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding: 0px 50px; +} + +.drag-area:hover { + height: 200px; + border: 3px dashed #ff8c4a5a; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +h3 { + margin-bottom: 20px; + font-weight: 500; +} + +.drag-area .icon { + font-size: 50px; + width: 60px; + height: 60px; +} + +.drag-area .headerx { + font-size: 17px; + font-weight: 500; + color: #34495e; +} + +.drag-area .support { + font-size: 12px; + color: gray; + margin: 10px 0 15px 0; +} + +.drag-area .buttonx { + font-size: 17px; + font-weight: 500; + color: #FF8B4A; + cursor: pointer; +} + +.drag-area.active { + border: 2px solid #FF8B4A; + margin-bottom: 20px; +} + +.drag-area img { + width: 100%; + height: 100%; + object-fit: contain; + z-index: -1; + padding-top: 8px; +} + +.image-grid { + display: flex; + justify-content: space-between; + margin-top: 20px; +} + +.image-grid img { + width: 30%; + /* Adjust the width as needed */ + cursor: pointer; +} + + +/* Additional styles for responsiveness */ + +@media (max-width: 768px) { + .image-grid { + flex-direction: column; + align-items: center; + } + .image-grid img { + width: 80%; + /* Adjust the width for smaller screens */ + margin-bottom: 10px; + } +} + +.arrow { + width: 20px; + height: 20px; + transform: rotate(90deg); +} + +.ar { + margin-bottom: 20px; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; +} + +.easytext { + background: linear-gradient(45deg, #FFA07A, #FF6347); + -webkit-background-clip: text; + color: transparent; +} + + +/* Add this CSS for the grid container */ + +.grid-container { + display: grid; + grid-template-columns: repeat(3, 1fr); + max-width: 600px; + margin: 0 auto; + gap: 10px; + /* Adjust the gap as needed */ +} + +.grid-item { + background: rgba(100, 97, 97, 0.2); + backdrop-filter: blur(3.5px); + padding: 20px; + text-align: center; + width: auto; + height: max-content; + border-radius: 5px; +} + +.grid-item:hover { + background: linear-gradient(45deg, #FFA07A, #FF6347); + color: #fff; +} + +.uploadbuttons { + display: flex; + align-items: center; + align-content: center; + flex-wrap: nowrap; + justify-content: space-around; +} + +.uploadbutton { + font-family: poppins; + font-weight: 400; + position: relative; + padding: 12px 35px; + background: linear-gradient(45deg, #FFA07A, #fa7962); + font-size: 17px; + font-weight: 500; + color: #fff; + border: 2px solid transparent; + border-radius: 10px; + box-shadow: 0 0 0 #fec1958c; + transition: all .3s ease-in-out; + justify-self: center; +} + +.star-1 { + position: absolute; + top: 20%; + left: 20%; + width: 25px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all 1s cubic-bezier(0.05, 0.83, 0.43, 0.96); +} + +.star-2 { + position: absolute; + top: 45%; + left: 45%; + width: 15px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all 1s cubic-bezier(0, 0.4, 0, 1.01); +} + +.star-3 { + position: absolute; + top: 40%; + left: 40%; + width: 5px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all 1s cubic-bezier(0, 0.4, 0, 1.01); +} + +.star-4 { + position: absolute; + top: 20%; + left: 40%; + width: 8px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all .8s cubic-bezier(0, 0.4, 0, 1.01); +} + +.star-5 { + position: absolute; + top: 25%; + left: 45%; + width: 15px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all .6s cubic-bezier(0, 0.4, 0, 1.01); +} + +.star-6 { + position: absolute; + top: 5%; + left: 50%; + width: 5px; + height: auto; + filter: drop-shadow(0 0 0 #fffdef); + z-index: -5; + transition: all .8s ease; +} + +.uploadbutton:hover { + border: 2px solid #FF8B4A; + background: #f5f5f5; + color: #000; + transition: all .3s ease-in-out; +} + +.uploadbutton:hover .star-1 { + position: absolute; + top: -80%; + left: -30%; + width: 25px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.uploadbutton:hover .star-2 { + position: absolute; + top: -25%; + left: 10%; + width: 15px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.uploadbutton:hover .star-3 { + position: absolute; + top: 55%; + left: 25%; + width: 5px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.uploadbutton:hover .star-4 { + position: absolute; + top: 30%; + left: 80%; + width: 8px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.uploadbutton:hover .star-5 { + position: absolute; + top: 25%; + left: 115%; + width: 15px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.uploadbutton:hover .star-6 { + position: absolute; + top: 5%; + left: 60%; + width: 5px; + height: auto; + filter: drop-shadow(0 0 10px #fffdef); + z-index: 2; +} + +.buttondiv { + margin-top: 15px; + display: flex; + justify-content: center; +} + +input #file-input { + height: 100%; +} \ No newline at end of file diff --git a/static/images/arrow.gif b/static/images/arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..4eada4931bf8397a9bb3537822e408aa7bf0d22b Binary files /dev/null and b/static/images/arrow.gif differ diff --git a/static/images/banner-images/banner-image-1.jpg b/static/images/banner-images/banner-image-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..613b70a2f834d57e21ff1fea886b58fddd73e419 Binary files /dev/null and b/static/images/banner-images/banner-image-1.jpg differ diff --git a/static/images/company-images/company-logo1.png b/static/images/company-images/company-logo1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c286bfd6f3c200b590140fc1c3cbdfb878b43fa Binary files /dev/null and b/static/images/company-images/company-logo1.png differ diff --git a/static/images/company-images/company-logo2.png b/static/images/company-images/company-logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7371da12479401fdd49cb672698934738e983b8 Binary files /dev/null and b/static/images/company-images/company-logo2.png differ diff --git a/static/images/company-images/company-logo3.png b/static/images/company-images/company-logo3.png new file mode 100644 index 0000000000000000000000000000000000000000..421ede965e75267fb3d122fa9845f678b1276bec Binary files /dev/null and b/static/images/company-images/company-logo3.png differ diff --git a/static/images/company-images/company-logo4.png b/static/images/company-images/company-logo4.png new file mode 100644 index 0000000000000000000000000000000000000000..37fe1cd09577e841928c59ad2126397d0a4effbe Binary files /dev/null and b/static/images/company-images/company-logo4.png differ diff --git a/static/images/company-images/company-logo5.png b/static/images/company-images/company-logo5.png new file mode 100644 index 0000000000000000000000000000000000000000..89d9ef6743a9ba481336ffcca87fd3f5638757e1 Binary files /dev/null and b/static/images/company-images/company-logo5.png differ diff --git a/static/images/company-images/company-logo6.png b/static/images/company-images/company-logo6.png new file mode 100644 index 0000000000000000000000000000000000000000..b56c36941dbdf89550df8b7c5cfc4d45f3a86c54 Binary files /dev/null and b/static/images/company-images/company-logo6.png differ diff --git a/static/images/company-images/company-logo7.png b/static/images/company-images/company-logo7.png new file mode 100644 index 0000000000000000000000000000000000000000..b398cc87b73696f224986379079e1a8c1d429e7d Binary files /dev/null and b/static/images/company-images/company-logo7.png differ diff --git a/static/images/company-images/company-logo8.png b/static/images/company-images/company-logo8.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7304724649f688aa9954e7c4e392e2107652ea Binary files /dev/null and b/static/images/company-images/company-logo8.png differ diff --git a/static/images/company-images/company-logo9.png b/static/images/company-images/company-logo9.png new file mode 100644 index 0000000000000000000000000000000000000000..753586acc579722d637305fc8dc202ab75cd33cc Binary files /dev/null and b/static/images/company-images/company-logo9.png differ diff --git a/static/images/dancer.jpg b/static/images/dancer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6622d631afad1987f2aebb258e0598d89b7fdebe Binary files /dev/null and b/static/images/dancer.jpg differ diff --git a/static/images/favicon.ico b/static/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4ddd2ebab23acad9321f6354908f4bfffffd228e --- /dev/null +++ b/static/images/favicon.ico @@ -0,0 +1,6 @@ + + + + + + diff --git a/static/images/gallery-images/gallery-image-1.jpg b/static/images/gallery-images/gallery-image-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..790110b0ee8d2b564025e207ce0fda9860e3f882 Binary files /dev/null and b/static/images/gallery-images/gallery-image-1.jpg differ diff --git a/static/images/gallery-images/gallery-image-2.jpg b/static/images/gallery-images/gallery-image-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e13a60b1cf5d00c25ea1c84638bd8d29567dc9da Binary files /dev/null and b/static/images/gallery-images/gallery-image-2.jpg differ diff --git a/static/images/gallery-images/gallery-image-3.jpg b/static/images/gallery-images/gallery-image-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a3bc0a774eab01f27656b16c08d3736bc40e715 Binary files /dev/null and b/static/images/gallery-images/gallery-image-3.jpg differ diff --git a/static/images/gallery-images/gallery-image-4.jpg b/static/images/gallery-images/gallery-image-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5af7808053a3d050148a221be4a065764dbfd1f2 Binary files /dev/null and b/static/images/gallery-images/gallery-image-4.jpg differ diff --git a/static/images/gallery-images/gallery-image-5.jpg b/static/images/gallery-images/gallery-image-5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e6d2cbee20e22c2625c1c46e6e5359f67ad9e59 Binary files /dev/null and b/static/images/gallery-images/gallery-image-5.jpg differ diff --git a/static/images/gallery-images/gallery-image-6.jpg b/static/images/gallery-images/gallery-image-6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd4c066afe31cd91c1378a135584f7d3df34c2e1 Binary files /dev/null and b/static/images/gallery-images/gallery-image-6.jpg differ diff --git a/static/images/logo-2.png b/static/images/logo-2.png new file mode 100644 index 0000000000000000000000000000000000000000..85969fa95dae30da6de291d1729ae4a8de223e72 Binary files /dev/null and b/static/images/logo-2.png differ diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9a365155a14022f7126d897f1724cb2d10e079ce Binary files /dev/null and b/static/images/logo.png differ diff --git a/static/images/logox.png b/static/images/logox.png new file mode 100644 index 0000000000000000000000000000000000000000..72cccec91bb07e8576d2199d14cf99bb738a12d1 Binary files /dev/null and b/static/images/logox.png differ diff --git a/static/images/logoxx.png b/static/images/logoxx.png new file mode 100644 index 0000000000000000000000000000000000000000..9a365155a14022f7126d897f1724cb2d10e079ce Binary files /dev/null and b/static/images/logoxx.png differ diff --git a/static/images/receipt.jpg b/static/images/receipt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e90ce84bfe58d6e05407b490593a55cbb9ddd416 Binary files /dev/null and b/static/images/receipt.jpg differ diff --git a/static/images/receiptcon.png b/static/images/receiptcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5a4005de4e362697b2044fa90040260f16bf02 Binary files /dev/null and b/static/images/receiptcon.png differ diff --git a/static/images/uplogo.gif b/static/images/uplogo.gif new file mode 100644 index 0000000000000000000000000000000000000000..0853dbcc3f840b45b4ac6a14b3ebce6d63210ab5 Binary files /dev/null and b/static/images/uplogo.gif differ diff --git a/static/images/uplogo1.gif b/static/images/uplogo1.gif new file mode 100644 index 0000000000000000000000000000000000000000..aba4bc0041c5c6f286ccddc04d263b82d9d07722 Binary files /dev/null and b/static/images/uplogo1.gif differ diff --git a/static/images/uplogo2.gif b/static/images/uplogo2.gif new file mode 100644 index 0000000000000000000000000000000000000000..3716f18167703d95f8ca8ff01dc7cdcf638e88a3 Binary files /dev/null and b/static/images/uplogo2.gif differ diff --git a/static/images/user-images/user-1.jpg b/static/images/user-images/user-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a48cdd09f7e64098dc0216ec6ff644a571e8b66b Binary files /dev/null and b/static/images/user-images/user-1.jpg differ diff --git a/static/images/user-images/user-2.jpg b/static/images/user-images/user-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b87da9fa5ba0b1c24712d91d4d8d903471c0c204 Binary files /dev/null and b/static/images/user-images/user-2.jpg differ diff --git a/static/images/user-images/user-3.jpg b/static/images/user-images/user-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a1abde0c1035aea257cccd6d0239d4681bf759d2 Binary files /dev/null and b/static/images/user-images/user-3.jpg differ diff --git a/static/inference/Layoutlmv3_inference/__init__.py b/static/inference/Layoutlmv3_inference/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-310.pyc b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b876a9b798ca7c36ffd9469e7f07d4b0cb59e5b Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-310.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-311.pyc b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9671e2a50adf97c161f5a85da719ad08fa29704 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-311.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-312.pyc b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f9c71c056d3e6f549f6a5665b67b7c63e088529 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/__init__.cpython-312.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-310.pyc b/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d004062202747f14f0fc8a8425bb3e047ed726aa Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-310.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-311.pyc b/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..198633badbb35711ecec6df572aae2b4d76ff773 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/annotate_image.cpython-311.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-310.pyc b/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b5c2e1ae8aaf703b60dd02c5f263beb6a4d3a51 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-310.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-311.pyc b/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbb996f87380b699222d077a9b75ce6ddc10890c Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/inference_handler.cpython-311.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-310.pyc b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62cd989c9de31bda7858f7879c7498fa8f9c4185 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-310.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-311.pyc b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c5fec23be67ba963ca61f932fd90df57b27e3f9 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-311.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-312.pyc b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..59b860673b6f156e6e871ae3d3f5cfce20d11d0c Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/ocr.cpython-312.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-310.pyc b/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79fcef7e6ee17579ff954e42d0d75f063703c368 Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-310.pyc differ diff --git a/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-311.pyc b/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df376a85e877f924dff45246dec21150b41080ea Binary files /dev/null and b/static/inference/Layoutlmv3_inference/__pycache__/utils.cpython-311.pyc differ diff --git a/static/inference/Layoutlmv3_inference/annotate_image.py b/static/inference/Layoutlmv3_inference/annotate_image.py new file mode 100644 index 0000000000000000000000000000000000000000..fe274d0e970fdecf06eb0598e2bef04384c693cd --- /dev/null +++ b/static/inference/Layoutlmv3_inference/annotate_image.py @@ -0,0 +1,56 @@ +import os +from PIL import Image, ImageDraw, ImageFont +from .utils import image_label_2_color + + +def get_flattened_output(docs): + print("Running Flattened Output") + flattened_output = [] + annotation_key = 'output' + for doc in docs: + flattened_output_item = {annotation_key: []} + doc_annotation = doc[annotation_key] + for i, span in enumerate(doc_annotation): + if len(span['words']) > 1: + for span_chunk in span['words']: + flattened_output_item[annotation_key].append( + { + 'label': span['label'], + 'text': span_chunk['text'], + 'words': [span_chunk] + } + ) + + else: + flattened_output_item[annotation_key].append(span) + flattened_output.append(flattened_output_item) + return flattened_output + + +def annotate_image(image_path, annotation_object): + print("Annotating Images") + img = None + image = Image.open(image_path).convert('RGBA') + tmp = image.copy() + label2color = image_label_2_color(annotation_object) + overlay = Image.new('RGBA', tmp.size, (0, 0, 0)+(0,)) + draw = ImageDraw.Draw(overlay) + font = ImageFont.load_default() + + predictions = [span['label'] for span in annotation_object['output']] + boxes = [span['words'][0]['box'] for span in annotation_object['output']] + for prediction, box in zip(predictions, boxes): + draw.rectangle(box, outline=label2color[prediction], + width=3, fill=label2color[prediction]+(int(255*0.33),)) + draw.text((box[0] + 10, box[1] - 10), text=prediction, + fill=label2color[prediction], font=font) + + img = Image.alpha_composite(tmp, overlay) + img = img.convert("RGB") + + image_name = os.path.basename(image_path) + image_name = image_name[:image_name.find('.')] + output_folder = 'inferenced/' + os.makedirs(output_folder, exist_ok=True) + + img.save(os.path.join(output_folder, f'{image_name}_inference.jpg')) diff --git a/static/inference/Layoutlmv3_inference/inference_handler.py b/static/inference/Layoutlmv3_inference/inference_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..2bc4faa0627b3dd968c79967052c3acf08f858d6 --- /dev/null +++ b/static/inference/Layoutlmv3_inference/inference_handler.py @@ -0,0 +1,199 @@ +from .utils import load_model,load_processor,normalize_box,compare_boxes,adjacent +from .annotate_image import get_flattened_output,annotate_image +from PIL import Image,ImageDraw, ImageFont +import logging +import torch +import json +import os + + +logger = logging.getLogger(__name__) + +class ModelHandler(object): + def __init__(self): + self.model = None + self.model_dir = None + self.device = 'cpu' + self.error = None + self.initialized = False + self._raw_input_data = None + self._processed_data = None + self._images_size = None + + def initialize(self, context): + try: + logger.info("Loading transformer model") + self._context = context + properties = self._context + self.model_dir = properties.get("model_dir") + self.model = self.load(self.model_dir) + self.initialized = True + except Exception as e: + logger.error(f"Error initializing model: {str(e)}") + self.error = str(e) + + def preprocess(self, batch): + try: + inference_dict = batch + self._raw_input_data = inference_dict + processor = load_processor() + images = [Image.open(path).convert("RGB") + for path in inference_dict['image_path']] + self._images_size = [img.size for img in images] + words = inference_dict['words'] + boxes = [[normalize_box(box, images[i].size[0], images[i].size[1]) + for box in doc] for i, doc in enumerate(inference_dict['bboxes'])] + encoded_inputs = processor( + images, words, boxes=boxes, return_tensors="pt", padding="max_length", truncation=True) + self._processed_data = encoded_inputs + return encoded_inputs + except Exception as e: + logger.error(f"Error in preprocessing: {str(e)}") + self.error = str(e) + return None + + def load(self, model_dir): + try: + model = load_model(model_dir) + return model + except Exception as e: + logger.error(f"Error loading LayoutLMv3 model: {str(e)}") + self.error = str(e) + return None + + def inference(self, model_input): + try: + with torch.no_grad(): + inference_outputs = self.model(**model_input) + predictions = inference_outputs.logits.argmax(-1).tolist() + results = [] + for i in range(len(predictions)): + tmp = dict() + tmp[f'output_{i}'] = predictions[i] + results.append(tmp) + return [results] + except Exception as e: + logger.error(f"Error in inference: {str(e)}") + self.error = str(e) + return None + + def postprocess(self, inference_output): + try: + docs = [] + k = 0 + for page, doc_words in enumerate(self._raw_input_data['words']): + doc_list = [] + width, height = self._images_size[page] + for i, doc_word in enumerate(doc_words, start=0): + word_tagging = None + word_labels = [] + word = dict() + word['id'] = k + k += 1 + word['text'] = doc_word + word['pageNum'] = page + 1 + word['box'] = self._raw_input_data['bboxes'][page][i] + _normalized_box = normalize_box( + self._raw_input_data['bboxes'][page][i], width, height) + for j, box in enumerate(self._processed_data['bbox'].tolist()[page]): + if compare_boxes(box, _normalized_box): + if self.model.config.id2label[inference_output[0][page][f'output_{page}'][j]] != 'O': + word_labels.append( + self.model.config.id2label[inference_output[0][page][f'output_{page}'][j]][2:]) + else: + word_labels.append('other') + if word_labels != []: + word_tagging = word_labels[0] if word_labels[0] != 'other' else word_labels[-1] + else: + word_tagging = 'other' + word['label'] = word_tagging + word['pageSize'] = {'width': width, 'height': height} + if word['label'] != 'other': + doc_list.append(word) + spans = [] + def adjacents(entity): return [ + adj for adj in doc_list if adjacent(entity, adj)] + output_test_tmp = doc_list[:] + for entity in doc_list: + if adjacents(entity) == []: + spans.append([entity]) + output_test_tmp.remove(entity) + + while output_test_tmp != []: + span = [output_test_tmp[0]] + output_test_tmp = output_test_tmp[1:] + while output_test_tmp != [] and adjacent(span[-1], output_test_tmp[0]): + span.append(output_test_tmp[0]) + output_test_tmp.remove(output_test_tmp[0]) + spans.append(span) + + output_spans = [] + for span in spans: + if len(span) == 1: + output_span = {"text": span[0]['text'], + "label": span[0]['label'], + "words": [{ + 'id': span[0]['id'], + 'box': span[0]['box'], + 'text': span[0]['text'] + }], + } + else: + output_span = {"text": ' '.join([entity['text'] for entity in span]), + "label": span[0]['label'], + "words": [{ + 'id': entity['id'], + 'box': entity['box'], + 'text': entity['text'] + } for entity in span] + + } + output_spans.append(output_span) + docs.append({f'output': output_spans}) + return [json.dumps(docs, ensure_ascii=False)] + + except Exception as e: + logger.error(f"Error in postprocessing: {str(e)}") + self.error = str(e) + return None + + + def handle(self, data, context): + try: + if not self.initialized: + self.initialize(context) + + if data is None: + return None + + model_input = self.preprocess(data) + if model_input is None: + return None + + model_out = self.inference(model_input) + if model_out is None: + return None + + inference_out = self.postprocess(model_out)[0] + with open('temp/LayoutlMV3InferenceOutput.json', 'w') as inf_out: + inf_out.write(inference_out) + inference_out_list = json.loads(inference_out) + flattened_output_list = get_flattened_output(inference_out_list) + print('Ready for Annotation') + for i, flattened_output in enumerate(flattened_output_list): + annotate_image(data['image_path'][i], flattened_output) + except Exception as e: + logger.error(f"Error handling request: {str(e)}") + self.error = str(e) + +_service = ModelHandler() + + +def handle(data, context): + if not _service.initialized: + _service.initialize(context) + + if data is None: + return None + + return _service.handle(data, context) diff --git a/static/inference/Layoutlmv3_inference/ocr.py b/static/inference/Layoutlmv3_inference/ocr.py new file mode 100644 index 0000000000000000000000000000000000000000..ce827f651c894c351fc31852dafac02498b79658 --- /dev/null +++ b/static/inference/Layoutlmv3_inference/ocr.py @@ -0,0 +1,187 @@ +import os +import pandas as pd +import cv2 +import numpy as np +import json +import requests +import traceback + +from PIL import Image + +def preprocess_image(image_path, max_file_size_mb=1, target_file_size_mb=0.5): + try: + # Check file size + file_size_mb = os.path.getsize(image_path) / (1024 * 1024) # Convert to megabytes + if file_size_mb > max_file_size_mb: + print(f"File size ({file_size_mb} MB) exceeds the maximum allowed size ({max_file_size_mb} MB). Resizing the image.") + + # Read the image + image = cv2.imread(image_path) + + # Calculate the new dimensions to achieve the target file size + ratio = target_file_size_mb / file_size_mb + new_width = int(image.shape[1] * np.sqrt(ratio)) + new_height = int(image.shape[0] * np.sqrt(ratio)) + + # Enhance text + enhanced_img = enhance_txt(image) + + # Resize the image + enhanced = cv2.resize(enhanced_img, (new_width, new_height)) + + return enhanced + + else: + # If the file size is within the limit, proceed with the regular enhancement + image = cv2.imread(image_path) + enhanced = enhance_txt(image) + return enhanced + + except Exception as e: + print(f"An error occurred: {str(e)}") + return None + + +def enhance_txt(img, intensity_increase=20, bilateral_filter_diameter=9, bilateral_filter_sigma_color=75, bilateral_filter_sigma_space=75): + # Get the width and height of the image + w = img.shape[1] + h = img.shape[0] + w1 = int(w * 0.05) + w2 = int(w * 0.95) + h1 = int(h * 0.05) + h2 = int(h * 0.95) + ROI = img[h1:h2, w1:w2] # 95% of the center of the image + threshold = np.mean(ROI) * 0.88 # % of average brightness + + blurred = cv2.GaussianBlur(img, (1, 1), 0) + edged = 255 - cv2.Canny(blurred, 100, 150, apertureSize=7) + + # Increase intensity by adding a constant value + img = np.clip(img + intensity_increase, 0, 255).astype(np.uint8) + + # Apply bilateral filter to reduce noise + img = cv2.bilateralFilter(img, bilateral_filter_diameter, bilateral_filter_sigma_color, bilateral_filter_sigma_space) + + _, binary = cv2.threshold(blurred, threshold, 255, cv2.THRESH_BINARY) + return binary + + +def run_tesseract_on_preprocessed_image(preprocessed_image, image_path): + try: + image_name = os.path.basename(image_path) + image_name = image_name[:image_name.find('.')] + + # Create the "temp" folder if it doesn't exist + temp_folder = "temp" + if not os.path.exists(temp_folder): + os.makedirs(temp_folder) + + # Define the OCR API endpoint + url = "https://api.ocr.space/parse/image" + + # Define the API key and the language + api_key = "K88232854988957" # Replace with your actual OCR Space API key + language = "eng" + + # Save the preprocessed image + cv2.imwrite(os.path.join(temp_folder, f"{image_name}_preprocessed.jpg"), preprocessed_image) + + # Open the preprocessed image file as binary + with open(os.path.join(temp_folder, f"{image_name}_preprocessed.jpg"), "rb") as f: + # Define the payload for the API request + payload = { + "apikey": api_key, + "language": language, + "isOverlayRequired": True, + "OCREngine": 2 + } + # Define the file parameter for the API request + file = { + "file": f + } + # Send the POST request to the OCR API + response = requests.post(url, data=payload, files=file) + + # Check the status code of the response + if response.status_code == 200: + # Parse the JSON response + result = response.json() + print("---JSON file saved") + # Save the OCR result as JSON + with open(os.path.join(temp_folder, f"{image_name}_ocr.json"), 'w') as f: + json.dump(result, f) + + return os.path.join(temp_folder, f"{image_name}_ocr.json") + else: + # Print the error message + print("Error: " + response.text) + return None + + except Exception as e: + print(f"An error occurred during OCR request: {str(e)}") + return None + +def clean_tesseract_output(json_output_path): + try: + with open(json_output_path, 'r') as json_file: + data = json.load(json_file) + + lines = data['ParsedResults'][0]['TextOverlay']['Lines'] + + words = [] + for line in lines: + for word_info in line['Words']: + word = {} + origin_box = [ + word_info['Left'], + word_info['Top'], + word_info['Left'] + word_info['Width'], + word_info['Top'] + word_info['Height'] + ] + + word['word_text'] = word_info['WordText'] + word['word_box'] = origin_box + words.append(word) + + return words + except (KeyError, IndexError, FileNotFoundError, json.JSONDecodeError) as e: + print(f"Error cleaning Tesseract output: {str(e)}") + return None + +def prepare_batch_for_inference(image_paths): + # print("my_function was called") + # traceback.print_stack() # This will print the stack trace + print(f"Number of images to process: {len(image_paths)}") # Print the total number of images to be processed + print("1. Preparing for Inference") + tsv_output_paths = [] + + inference_batch = dict() + print("2. Starting Preprocessing") + # Ensure that the image is only 1 + for image_path in image_paths: + print(f"Processing the image: {image_path}") # Print the image being processed + print("3. Preprocessing the Receipt") + preprocessed_image = preprocess_image(image_path) + if preprocessed_image is not None: + print("4. Preprocessing done. Running OCR") + json_output_path = run_tesseract_on_preprocessed_image(preprocessed_image, image_path) + print("5. OCR Complete") + if json_output_path: + tsv_output_paths.append(json_output_path) + + print("6. Preprocessing and OCR Done") + # clean_outputs is a list of lists + clean_outputs = [clean_tesseract_output(tsv_path) for tsv_path in tsv_output_paths] + print("7. Cleaned OCR output") + word_lists = [[word['word_text'] for word in clean_output] for clean_output in clean_outputs] + print("8. Word List Created") + boxes_lists = [[word['word_box'] for word in clean_output] for clean_output in clean_outputs] + print("9. Box List Created") + inference_batch = { + "image_path": image_paths, + "bboxes": boxes_lists, + "words": word_lists + } + + print("10. Prepared for Inference Batch") + return inference_batch \ No newline at end of file diff --git a/static/inference/Layoutlmv3_inference/utils.py b/static/inference/Layoutlmv3_inference/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..be0c5f596e738f1eae7d4ba524604bf7b2a06f8e --- /dev/null +++ b/static/inference/Layoutlmv3_inference/utils.py @@ -0,0 +1,50 @@ +import numpy as np +from transformers import AutoModelForTokenClassification, AutoProcessor + +def normalize_box(bbox, width, height): + return [ + int(bbox[0]*(1000/width)), + int(bbox[1]*(1000/height)), + int(bbox[2]*(1000/width)), + int(bbox[3]*(1000/height)), + ] + +def compare_boxes(b1, b2): + b1 = np.array([c for c in b1]) + b2 = np.array([c for c in b2]) + equal = np.array_equal(b1, b2) + return equal + +def unnormalize_box(bbox, width, height): + return [ + width * (bbox[0] / 1000), + height * (bbox[1] / 1000), + width * (bbox[2] / 1000), + height * (bbox[3] / 1000), + ] + +def adjacent(w1, w2): + if w1['label'] == w2['label'] and abs(w1['id'] - w2['id']) == 1: + return True + return False + +def random_color(): + return np.random.randint(0, 255, 3) + +def image_label_2_color(annotation): + if 'output' in annotation.keys(): + image_labels = set([span['label'] for span in annotation['output']]) + label2color = {f'{label}': (random_color()[0], random_color()[ + 1], random_color()[2]) for label in image_labels} + return label2color + else: + raise ValueError('please use "output" as annotation key') + +def load_model(model_path): + model = AutoModelForTokenClassification.from_pretrained(model_path) + return model + +def load_processor(): + processor = AutoProcessor.from_pretrained( + "microsoft/layoutlmv3-base", apply_ocr=False) + return processor diff --git a/static/inference/preprocess.py b/static/inference/preprocess.py new file mode 100644 index 0000000000000000000000000000000000000000..a0f9c3ff33ab3b7d3e35db81a57c86f382a844ab --- /dev/null +++ b/static/inference/preprocess.py @@ -0,0 +1,206 @@ +import pandas as pd +import numpy as np +import os +import argparse +from datasets.features import ClassLabel +from transformers import AutoProcessor +from sklearn.model_selection import train_test_split +from datasets import Features, Sequence, ClassLabel, Value, Array2D, Array3D, Dataset +from datasets import Image as Img +from PIL import Image +from tqdm import tqdm_notebook # Import tqdm_notebook for displaying progress bars + + +import warnings +warnings.filterwarnings('ignore') + + +def read_text_file(file_path): + with open(file_path, 'r') as f: + return (f.readlines()) + + +def prepare_examples(examples): + images = examples[image_column_name] + words = examples[text_column_name] + boxes = examples[boxes_column_name] + word_labels = examples[label_column_name] + + encoding = processor(images, words, boxes=boxes, word_labels=word_labels, + truncation=True, padding="max_length") + + return encoding + + +def get_zip_dir_name(): + try: + os.chdir('/kaggle/input/ocr-combinedrec') + + dir_list1 = os.listdir() + dir_list = sorted(dir_list1) + + any_file_name = dir_list[0] + # Using os.path.splitext to get the file extension + zip_dir_name, file_extension = os.path.splitext(any_file_name) + + # Extracting the directory name using os.path.dirname + # zip_dir_name = os.path.dirname(any_file_name) + + # Test + + return 'dataset_files' + + # Check if all files start with the extracted directory name + print(all(list(map(lambda x: x.startswith(zip_dir_name), dir_list)))) + if all(list(map(lambda x: x.startswith(zip_dir_name), dir_list))): + return zip_dir_name + return False + finally: + os.chdir('./../') + +def filter_out_unannotated(example): + tags = example['ner_tags'] + return not all([tag == label2id['O'] for tag in tags]) + + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + parser.add_argument('--valid_size') + parser.add_argument('--output_path') + args = parser.parse_args() + TEST_SIZE = float(args.valid_size) + OUTPUT_PATH = args.output_path + + os.makedirs(args.output_path, exist_ok=True) + files = {} + zip_dir_name = get_zip_dir_name() + + if zip_dir_name: + files['train_box'] = read_text_file('/kaggle/input/ocr-combinedrec/dataset_files_box.txt') + + files['train_image'] = read_text_file(os.path.join( + os.curdir, 'ocr-combinedrec', f'{zip_dir_name}_image.txt')) + files['train'] = read_text_file(os.path.join( + os.curdir, 'ocr-combinedrec', f'{zip_dir_name}.txt')) + else: + for f in os.listdir(): + if f.endswith('.txt') and f.find('box') != -1: + files['train_box'] = read_text_file(os.path.join(os.curdir, f)) + elif f.endswith('.txt') and f.find('image') != -1: + files['train_image'] = read_text_file( + os.path.join(os.curdir, f)) + elif f.endswith('.txt') and f.find('labels') == -1: + files['train'] = read_text_file(os.path.join(os.curdir, f)) + + assert(len(files['train']) == len(files['train_box'])) + assert(len(files['train_box']) == len(files['train_image'])) + assert(len(files['train_image']) == len(files['train'])) + + images = {} + for i, row in enumerate(files['train_image']): + if row != '\n': + image_name = row.split('\t')[-1] + images.setdefault(image_name.replace('\n', ''), []).append(i) + + words, bboxes, ner_tags, image_path = [], [], [], [] + for image, rows in images.items(): + words.append([row.split('\t')[0].replace('\n', '') + for row in files['train'][rows[0]:rows[-1]+1]]) + ner_tags.append([row.split('\t')[1].replace('\n', '') + for row in files['train'][rows[0]:rows[-1]+1]]) + bboxes.append([box.split('\t')[1].replace('\n', '') + for box in files['train_box'][rows[0]:rows[-1]+1]]) + if zip_dir_name: + image_path.append(f"/kaggle/input/ocr-combinedrec/{zip_dir_name}/{image}") + else: + image_path.append(f"/kaggle/input/ocr-combinedrec/{image}") + + labels = list(set([tag for doc_tag in ner_tags for tag in doc_tag])) + id2label = {v: k for v, k in enumerate(labels)} + label2id = {k: v for v, k in enumerate(labels)} + + dataset_dict = { + 'id': range(len(words)), + 'tokens': words, + 'bboxes': [[list(map(int, bbox.split())) for bbox in doc] for doc in bboxes], + 'ner_tags': [[label2id[tag] for tag in ner_tag] for ner_tag in ner_tags], + 'image': [Image.open(path).convert("RGB") for path in image_path] + } + + #raw features + features = Features({ + 'id': Value(dtype='string', id=None), + 'tokens': Sequence(feature=Value(dtype='string', id=None), length=-1, id=None), + 'bboxes': Sequence(feature=Sequence(feature=Value(dtype='int64', id=None), length=-1, id=None), length=-1, id=None), + 'ner_tags': Sequence(feature=ClassLabel(num_classes=len(labels), names=labels, names_file=None, id=None), length=-1, id=None), + 'image': Img(decode=True, id=None) + }) + + full_data_set = Dataset.from_dict(dataset_dict, features=features) + dataset = full_data_set.train_test_split(test_size=TEST_SIZE) + dataset["train"] = dataset["train"].filter(filter_out_unannotated) + processor = AutoProcessor.from_pretrained( + "microsoft/layoutlmv3-base", apply_ocr=False) + + features = dataset["train"].features + column_names = dataset["train"].column_names + image_column_name = "image" + text_column_name = "tokens" + boxes_column_name = "bboxes" + label_column_name = "ner_tags" + + # In the event the labels are not a `Sequence[ClassLabel]`, we will need to go through the dataset to get the + # unique labels. + + +# def get_label_list(labels): +# unique_labels = set() +# for label in labels: +# unique_labels = unique_labels | set(label) +# label_list = list(unique_labels) +# label_list.sort() +# return label_list + + +# if isinstance(features[label_column_name].feature, ClassLabel): +# label_list = features[label_column_name].feature.names +# # No need to convert the labels since they are already ints. +# id2label = {k: v for k, v in enumerate(label_list)} +# label2id = {v: k for k, v in enumerate(label_list)} +# else: +# label_list = get_label_list(dataset["train"][label_column_name]) +# id2label = {k: v for k, v in enumerate(label_list)} +# label2id = {v: k for k, v in enumerate(label_list)} +# num_labels = len(label_list) + + + + # we need to define custom features for `set_format` (used later on) to work properly + features = Features({ + 'pixel_values': Array3D(dtype="float32", shape=(3, 224, 224)), + 'input_ids': Sequence(feature=Value(dtype='int64')), + 'attention_mask': Sequence(Value(dtype='int64')), + 'bbox': Array2D(dtype="int64", shape=(512, 4)), + 'labels': Sequence(ClassLabel(names=labels)), + }) + + train_dataset = dataset["train"].map( + prepare_examples, + batched=True, + remove_columns=column_names, + features=features, + ) + eval_dataset = dataset["test"].map( + prepare_examples, + batched=True, + remove_columns=column_names, + features=features, + ) + train_dataset.set_format("torch") + if not OUTPUT_PATH.endswith('/'): + OUTPUT_PATH += '/' + train_dataset.save_to_disk(f'{OUTPUT_PATH}train_split') + eval_dataset.save_to_disk(f'{OUTPUT_PATH}eval_split') + dataset.save_to_disk(f'{OUTPUT_PATH}raw_data') diff --git a/static/inference/run_inference.py b/static/inference/run_inference.py new file mode 100644 index 0000000000000000000000000000000000000000..5451ca0c177b54ba920d9aeb9e45393f5affb15f --- /dev/null +++ b/static/inference/run_inference.py @@ -0,0 +1,27 @@ +import argparse +from asyncio.log import logger +from Layoutlmv3_inference.ocr import prepare_batch_for_inference +from Layoutlmv3_inference.inference_handler import handle +import logging +import os + +if __name__ == "__main__": + try: + parser = argparse.ArgumentParser() + parser.add_argument("--model_path", type=str) + parser.add_argument("--images_path", type=str) + args, _ = parser.parse_known_args() + images_path = args.images_path + image_files = os.listdir(images_path) + images_path = [images_path + '/' + image_files[0]] + inference_batch = prepare_batch_for_inference(images_path) + context = {"model_dir": args.model_path} + handle(inference_batch,context) + except Exception as err: + os.makedirs('log', exist_ok=True) + logging.basicConfig(filename='log/error_output.log', level=logging.ERROR, + format='%(asctime)s %(levelname)s %(name)s %(message)s') + logger = logging.getLogger(__name__) + logger.error(err) + + diff --git a/static/js/featherlight.gallery.min.js b/static/js/featherlight.gallery.min.js new file mode 100644 index 0000000000000000000000000000000000000000..ed9757f66052486351c1f6c3e658fbe67727de84 --- /dev/null +++ b/static/js/featherlight.gallery.min.js @@ -0,0 +1,7 @@ +/** + * Featherlight Gallery – an extension for the ultra slim jQuery lightbox + * Version 1.3.3 - http://noelboss.github.io/featherlight/ + * + * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com) + * MIT Licensed. +**/!function(a){"use strict";function b(c,d){if(!(this instanceof b)){var e=new b(a.extend({$source:c,$currentTarget:c.first()},d));return e.open(),e}a.featherlight.apply(this,arguments),this.chainCallbacks(h)}var c=function(a){window.console&&window.console.warn&&window.console.warn("FeatherlightGallery: "+a)};if("undefined"==typeof a)return c("Too much lightness, Featherlight needs jQuery.");if(!a.featherlight)return c("Load the featherlight plugin before the gallery plugin");var d="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch,e=a.event&&a.event.special.swipeleft&&a,f=window.Hammer&&function(a){var b=new window.Hammer.Manager(a[0]);return b.add(new window.Hammer.Swipe),b},g=d&&(e||f);d&&!g&&c("No compatible swipe library detected; one must be included before featherlightGallery for swipe motions to navigate the galleries.");var h={afterClose:function(a,b){var c=this;return c.$instance.off("next."+c.namespace+" previous."+c.namespace),c._swiper&&(c._swiper.off("swipeleft",c._swipeleft).off("swiperight",c._swiperight),c._swiper=null),a(b)},beforeOpen:function(a,b){var c=this;return c.$instance.on("next."+c.namespace+" previous."+c.namespace,function(a){var b="next"===a.type?1:-1;c.navigateTo(c.currentNavigation()+b)}),g?c._swiper=g(c.$instance).on("swipeleft",c._swipeleft=function(){c.$instance.trigger("next")}).on("swiperight",c._swiperight=function(){c.$instance.trigger("previous")}):c.$instance.find("."+c.namespace+"-content").append(c.createNavigation("previous")).append(c.createNavigation("next")),a(b)},onKeyUp:function(a,b){var c={37:"previous",39:"next"}[b.keyCode];return c?(this.$instance.trigger(c),!1):a(b)}};a.featherlight.extend(b,{autoBind:"[data-featherlight-gallery]"}),a.extend(b.prototype,{previousIcon:"",nextIcon:"",galleryFadeIn:100,galleryFadeOut:300,slides:function(){return this.filter?this.$source.find(this.filter):this.$source},images:function(){return c("images is deprecated, please use slides instead"),this.slides()},currentNavigation:function(){return this.slides().index(this.$currentTarget)},navigateTo:function(b){var c=this,d=c.slides(),e=d.length,f=c.$instance.find("."+c.namespace+"-inner");return b=(b%e+e)%e,c.$currentTarget=d.eq(b),c.beforeContent(),a.when(c.getContent(),f.fadeTo(c.galleryFadeOut,.2)).always(function(a){c.setContent(a),c.afterContent(),a.fadeTo(c.galleryFadeIn,1)})},createNavigation:function(b){var c=this;return a(''+this[b+"Icon"]+"").click(function(){a(this).trigger(b+"."+c.namespace)})}}),a.featherlightGallery=b,a.fn.featherlightGallery=function(a){return b.attach(this,a)},a(document).ready(function(){b._onReady()})}(jQuery); \ No newline at end of file diff --git a/static/js/featherlight.min.js b/static/js/featherlight.min.js new file mode 100644 index 0000000000000000000000000000000000000000..87942d9c9f227b05fb86750b95bf2a0cb9cc3282 --- /dev/null +++ b/static/js/featherlight.min.js @@ -0,0 +1,8 @@ +/** + * Featherlight - ultra slim jQuery lightbox + * Version 1.3.3 - http://noelboss.github.io/featherlight/ + * + * Copyright 2015, Noël Raoul Bossart (http://www.noelboss.com) + * MIT Licensed. +**/ +!function(a){"use strict";function b(a,c){if(!(this instanceof b)){var d=new b(a,c);return d.open(),d}this.id=b.id++,this.setup(a,c),this.chainCallbacks(b._callbackChain)}if("undefined"==typeof a)return void("console"in window&&window.console.info("Too much lightness, Featherlight needs jQuery."));var c=[],d=function(b){return c=a.grep(c,function(a){return a!==b&&a.$instance.closest("body").length>0})},e=function(a,b){var c={},d=new RegExp("^"+b+"([A-Z])(.*)");for(var e in a){var f=e.match(d);if(f){var g=(f[1]+f[2].replace(/([A-Z])/g,"-$1")).toLowerCase();c[g]=a[e]}}return c},f={keyup:"onKeyUp",resize:"onResize"},g=function(c){a.each(b.opened().reverse(),function(){return c.isDefaultPrevented()||!1!==this[f[c.type]](c)?void 0:(c.preventDefault(),c.stopPropagation(),!1)})},h=function(c){if(c!==b._globalHandlerInstalled){b._globalHandlerInstalled=c;var d=a.map(f,function(a,c){return c+"."+b.prototype.namespace}).join(" ");a(window)[c?"on":"off"](d,g)}};b.prototype={constructor:b,namespace:"featherlight",targetAttr:"data-featherlight",variant:null,resetCss:!1,background:null,openTrigger:"click",closeTrigger:"click",filter:null,root:"body",openSpeed:250,closeSpeed:250,closeOnClick:"background",closeOnEsc:!0,closeIcon:"✕",loading:"",persist:!1,otherClose:null,beforeOpen:a.noop,beforeContent:a.noop,beforeClose:a.noop,afterOpen:a.noop,afterContent:a.noop,afterClose:a.noop,onKeyUp:a.noop,onResize:a.noop,type:null,contentFilters:["jquery","image","html","ajax","iframe","text"],setup:function(b,c){"object"!=typeof b||b instanceof a!=!1||c||(c=b,b=void 0);var d=a.extend(this,c,{target:b}),e=d.resetCss?d.namespace+"-reset":d.namespace,f=a(d.background||['
','
','',d.closeIcon,"",'
'+d.loading+"
","
","
"].join("")),g="."+d.namespace+"-close"+(d.otherClose?","+d.otherClose:"");return d.$instance=f.clone().addClass(d.variant),d.$instance.on(d.closeTrigger+"."+d.namespace,function(b){var c=a(b.target);("background"===d.closeOnClick&&c.is("."+d.namespace)||"anywhere"===d.closeOnClick||c.closest(g).length)&&(b.preventDefault(),d.close())}),this},getContent:function(){if(this.persist!==!1&&this.$content)return this.$content;var b=this,c=this.constructor.contentFilters,d=function(a){return b.$currentTarget&&b.$currentTarget.attr(a)},e=d(b.targetAttr),f=b.target||e||"",g=c[b.type];if(!g&&f in c&&(g=c[f],f=b.target&&e),f=f||d("href")||"",!g)for(var h in c)b[h]&&(g=c[h],f=b[h]);if(!g){var i=f;if(f=null,a.each(b.contentFilters,function(){return g=c[this],g.test&&(f=g.test(i)),!f&&g.regex&&i.match&&i.match(g.regex)&&(f=i),!f}),!f)return"console"in window&&window.console.error("Featherlight: no content filter found "+(i?' for "'+i+'"':" (no target specified)")),!1}return g.process.call(b,f)},setContent:function(b){var c=this;return(b.is("iframe")||a("iframe",b).length>0)&&c.$instance.addClass(c.namespace+"-iframe"),c.$instance.removeClass(c.namespace+"-loading"),c.$instance.find("."+c.namespace+"-inner").not(b).slice(1).remove().end().replaceWith(a.contains(c.$instance[0],b[0])?"":b),c.$content=b.addClass(c.namespace+"-inner"),c},open:function(b){var d=this;if(d.$instance.hide().appendTo(d.root),!(b&&b.isDefaultPrevented()||d.beforeOpen(b)===!1)){b&&b.preventDefault();var e=d.getContent();if(e)return c.push(d),h(!0),d.$instance.fadeIn(d.openSpeed),d.beforeContent(b),a.when(e).always(function(a){d.setContent(a),d.afterContent(b)}).then(d.$instance.promise()).done(function(){d.afterOpen(b)})}return d.$instance.detach(),a.Deferred().reject().promise()},close:function(b){var c=this,e=a.Deferred();return c.beforeClose(b)===!1?e.reject():(0===d(c).length&&h(!1),c.$instance.fadeOut(c.closeSpeed,function(){c.$instance.detach(),c.afterClose(b),e.resolve()})),e.promise()},chainCallbacks:function(b){for(var c in b)this[c]=a.proxy(b[c],this,a.proxy(this[c],this))}},a.extend(b,{id:0,autoBind:"[data-featherlight]",defaults:b.prototype,contentFilters:{jquery:{regex:/^[#.]\w/,test:function(b){return b instanceof a&&b},process:function(b){return this.persist!==!1?a(b):a(b).clone(!0)}},image:{regex:/\.(png|jpg|jpeg|gif|tiff|bmp|svg)(\?\S*)?$/i,process:function(b){var c=this,d=a.Deferred(),e=new Image,f=a('');return e.onload=function(){f.naturalWidth=e.width,f.naturalHeight=e.height,d.resolve(f)},e.onerror=function(){d.reject(f)},e.src=b,d.promise()}},html:{regex:/^\s*<[\w!][^<]*>/,process:function(b){return a(b)}},ajax:{regex:/./,process:function(b){var c=a.Deferred(),d=a("
").load(b,function(a,b){"error"!==b&&c.resolve(d.contents()),c.fail()});return c.promise()}},iframe:{process:function(b){var c=new a.Deferred,d=a("',d='
',e='
',f='
',g='
',h='
',i="
";if(a("body").append(h+g+f+e+d+c+i),a("#slvj-window").hide(),"youtube"==a(this).data("videosite"))var j="http://www.youtube.com/embed/"+a(this).data("videoid")+"?autoplay=1";else if("vimeo"==a(this).data("videosite"))var j="http://player.vimeo.com/video/"+a(this).data("videoid")+"?autoplay=1";return a("#slvj-window").fadeIn(),a("#slvj-video-embed").attr("src",j),a("#slvj-close-icon").click(function(){a("#slvj-window").fadeOut(a.simpleLightboxVideo.vars.delayAnimation,function(){a(this).remove()})}),a("#slvj-background-close").click(function(){a("#slvj-window").fadeOut(a.simpleLightboxVideo.vars.delayAnimation,function(){a(this).remove()})}),!1}),a(document).keyup(function(b){27==b.keyCode&&a("#slvj-window").fadeOut(a.simpleLightboxVideo.vars.delayAnimation,function(){a(this).remove()})}),a(window).resize(function(){if(window.innerHeight>540)var b=(window.innerHeight-540)/2;else var b=0;a(".slvj-lightbox").css({marginTop:b+"px"})}),!1}})}(jQuery),function(a){a.simpleLightboxVideo=function(b,c){return a(c).simpleLightboxVideo()}}(jQuery); \ No newline at end of file diff --git a/static/js/site.js b/static/js/site.js new file mode 100644 index 0000000000000000000000000000000000000000..3f45561546af97e6146309088c00bdbb78557754 --- /dev/null +++ b/static/js/site.js @@ -0,0 +1,136 @@ +$(document).ready(function() { + /* Video Lightbox */ + if (!!$.prototype.simpleLightboxVideo) { + $('.video').simpleLightboxVideo(); + } + + /*ScrollUp*/ + if (!!$.prototype.scrollUp) { + $.scrollUp(); + } + + /*Responsive Navigation*/ + $("#nav-mobile").html($("#nav-main").html()); + $("#nav-trigger span").on("click", function() { + if ($("nav#nav-mobile ul").hasClass("expanded")) { + $("nav#nav-mobile ul.expanded").removeClass("expanded").slideUp(250); + $(this).removeClass("open"); + } else { + $("nav#nav-mobile ul").addClass("expanded").slideDown(250); + $(this).addClass("open"); + } + }); + + $("#nav-mobile").html($("#nav-main").html()); + $("#nav-mobile ul a").on("click", function() { + if ($("nav#nav-mobile ul").hasClass("expanded")) { + $("nav#nav-mobile ul.expanded").removeClass("expanded").slideUp(250); + $("#nav-trigger span").removeClass("open"); + } + }); + + /* Sticky Navigation */ + if (!!$.prototype.stickyNavbar) { + $('#header').stickyNavbar(); + } + + $('#content').waypoint(function(direction) { + if (direction === 'down') { + $('#header').addClass('nav-solid fadeInDown'); + } else { + $('#header').removeClass('nav-solid fadeInDown'); + } + }); + +}); + + +/* Preloader and animations */ +$(window).load(function() { // makes sure the whole site is loaded + $('#status').fadeOut(); // will first fade out the loading animation + $('#preloader').delay(350).fadeOut('slow'); // will fade out the white DIV that covers the website. + $('body').delay(450).css({ 'overflow-y': 'visible' }); + + /* WOW Elements */ + if (typeof WOW == 'function') { + new WOW().init(); + } + + /* Parallax Effects */ + if (!!$.prototype.enllax) { + $(window).enllax(); + } + +}); + +document.addEventListener('DOMContentLoaded', function() { + var canvas = new fabric.Canvas('c3', { width: 700, height: 700 }); + + var image = document.getElementById('my-image'); + var originalScale; + + fabric.Image.fromURL(image.src, function(fabricImg) { + // Calculate scaling factors to fit the image within the canvas + var scaleX = canvas.width / fabricImg.width; + var scaleY = canvas.height / fabricImg.height; + + // Use the minimum scaling factor to fit within the canvas + var minScale = Math.min(scaleX, scaleY); + + // Save the original scale for later use + originalScale = minScale; + + // Set the position and scaling + fabricImg.set({ + left: canvas.width / 2 - (fabricImg.width * minScale) / 2, + top: canvas.height / 2 - (fabricImg.height * minScale) / 2, + scaleX: minScale, + scaleY: minScale + }); + + canvas.add(fabricImg); + }); + + canvas.on('mouse:down', function(options) { + if (options.target) { + options.target.set({ + opacity: 0.5, + borderColor: 'red', + cornerColor: 'green', + cornerSize: 6, + transparentCorners: false + }); + canvas.renderAll(); + } + }); + + canvas.on('mouse:up', function(options) { + if (options.target) { + options.target.set({ + opacity: 1, + borderColor: null, + cornerColor: null + }); + canvas.renderAll(); + } + }); + + // Reset button click event + document.getElementById('reset-button').addEventListener('click', function() { + if (canvas.item(0)) { // Assuming the image is the first object in the canvas + canvas.item(0).set({ + scaleX: originalScale, + scaleY: originalScale + }); + canvas.renderAll(); + } + }); + + canvas.on('object:moving', function(options) { + // Handle object moving (dragging) + }); + + canvas.on('object:scaling', function(options) { + // Handle object scaling + }); +}); \ No newline at end of file diff --git a/static/js/wow.min.js b/static/js/wow.min.js new file mode 100644 index 0000000000000000000000000000000000000000..25609b8a632812031a123327be0a10a422685a12 --- /dev/null +++ b/static/js/wow.min.js @@ -0,0 +1,2 @@ +/*! WOW - v1.1.2 - 2015-08-19 +* Copyright (c) 2015 Matthieu Aussaguel; Licensed MIT */(function(){var a,b,c,d,e,f=function(a,b){return function(){return a.apply(b,arguments)}},g=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};b=function(){function a(){}return a.prototype.extend=function(a,b){var c,d;for(c in b)d=b[c],null==a[c]&&(a[c]=d);return a},a.prototype.isMobile=function(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)},a.prototype.createEvent=function(a,b,c,d){var e;return null==b&&(b=!1),null==c&&(c=!1),null==d&&(d=null),null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e},a.prototype.emitEvent=function(a,b){return null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)?a["on"+b]():void 0},a.prototype.addEvent=function(a,b,c){return null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c},a.prototype.removeEvent=function(a,b,c){return null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]},a.prototype.innerHeight=function(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight},a}(),c=this.WeakMap||this.MozWeakMap||(c=function(){function a(){this.keys=[],this.values=[]}return a.prototype.get=function(a){var b,c,d,e,f;for(f=this.keys,b=d=0,e=f.length;e>d;b=++d)if(c=f[b],c===a)return this.values[b]},a.prototype.set=function(a,b){var c,d,e,f,g;for(g=this.keys,c=e=0,f=g.length;f>e;c=++e)if(d=g[c],d===a)return void(this.values[c]=b);return this.keys.push(a),this.values.push(b)},a}()),a=this.MutationObserver||this.WebkitMutationObserver||this.MozMutationObserver||(a=function(){function a(){"undefined"!=typeof console&&null!==console&&console.warn("MutationObserver is not supported by your browser."),"undefined"!=typeof console&&null!==console&&console.warn("WOW.js cannot detect dom mutations, please call .sync() after loading new content.")}return a.notSupported=!0,a.prototype.observe=function(){},a}()),d=this.getComputedStyle||function(a){return this.getPropertyValue=function(b){var c;return"float"===b&&(b="styleFloat"),e.test(b)&&b.replace(e,function(a,b){return b.toUpperCase()}),(null!=(c=a.currentStyle)?c[b]:void 0)||null},this},e=/(\-([a-z]){1})/g,this.WOW=function(){function e(a){null==a&&(a={}),this.scrollCallback=f(this.scrollCallback,this),this.scrollHandler=f(this.scrollHandler,this),this.resetAnimation=f(this.resetAnimation,this),this.start=f(this.start,this),this.scrolled=!0,this.config=this.util().extend(a,this.defaults),null!=a.scrollContainer&&(this.config.scrollContainer=document.querySelector(a.scrollContainer)),this.animationNameCache=new c,this.wowEvent=this.util().createEvent(this.config.boxClass)}return e.prototype.defaults={boxClass:"wow",animateClass:"animated",offset:0,mobile:!0,live:!0,callback:null,scrollContainer:null},e.prototype.init=function(){var a;return this.element=window.document.documentElement,"interactive"===(a=document.readyState)||"complete"===a?this.start():this.util().addEvent(document,"DOMContentLoaded",this.start),this.finished=[]},e.prototype.start=function(){var b,c,d,e;if(this.stopped=!1,this.boxes=function(){var a,c,d,e;for(d=this.element.querySelectorAll("."+this.config.boxClass),e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.all=function(){var a,c,d,e;for(d=this.boxes,e=[],a=0,c=d.length;c>a;a++)b=d[a],e.push(b);return e}.call(this),this.boxes.length)if(this.disabled())this.resetStyle();else for(e=this.boxes,c=0,d=e.length;d>c;c++)b=e[c],this.applyStyle(b,!0);return this.disabled()||(this.util().addEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().addEvent(window,"resize",this.scrollHandler),this.interval=setInterval(this.scrollCallback,50)),this.config.live?new a(function(a){return function(b){var c,d,e,f,g;for(g=[],c=0,d=b.length;d>c;c++)f=b[c],g.push(function(){var a,b,c,d;for(c=f.addedNodes||[],d=[],a=0,b=c.length;b>a;a++)e=c[a],d.push(this.doSync(e));return d}.call(a));return g}}(this)).observe(document.body,{childList:!0,subtree:!0}):void 0},e.prototype.stop=function(){return this.stopped=!0,this.util().removeEvent(this.config.scrollContainer||window,"scroll",this.scrollHandler),this.util().removeEvent(window,"resize",this.scrollHandler),null!=this.interval?clearInterval(this.interval):void 0},e.prototype.sync=function(){return a.notSupported?this.doSync(this.element):void 0},e.prototype.doSync=function(a){var b,c,d,e,f;if(null==a&&(a=this.element),1===a.nodeType){for(a=a.parentNode||a,e=a.querySelectorAll("."+this.config.boxClass),f=[],c=0,d=e.length;d>c;c++)b=e[c],g.call(this.all,b)<0?(this.boxes.push(b),this.all.push(b),this.stopped||this.disabled()?this.resetStyle():this.applyStyle(b,!0),f.push(this.scrolled=!0)):f.push(void 0);return f}},e.prototype.show=function(a){return this.applyStyle(a),a.className=a.className+" "+this.config.animateClass,null!=this.config.callback&&this.config.callback(a),this.util().emitEvent(a,this.wowEvent),this.util().addEvent(a,"animationend",this.resetAnimation),this.util().addEvent(a,"oanimationend",this.resetAnimation),this.util().addEvent(a,"webkitAnimationEnd",this.resetAnimation),this.util().addEvent(a,"MSAnimationEnd",this.resetAnimation),a},e.prototype.applyStyle=function(a,b){var c,d,e;return d=a.getAttribute("data-wow-duration"),c=a.getAttribute("data-wow-delay"),e=a.getAttribute("data-wow-iteration"),this.animate(function(f){return function(){return f.customStyle(a,b,d,c,e)}}(this))},e.prototype.animate=function(){return"requestAnimationFrame"in window?function(a){return window.requestAnimationFrame(a)}:function(a){return a()}}(),e.prototype.resetStyle=function(){var a,b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(a.style.visibility="visible");return e},e.prototype.resetAnimation=function(a){var b;return a.type.toLowerCase().indexOf("animationend")>=0?(b=a.target||a.srcElement,b.className=b.className.replace(this.config.animateClass,"").trim()):void 0},e.prototype.customStyle=function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a},e.prototype.vendors=["moz","webkit"],e.prototype.vendorSet=function(a,b){var c,d,e,f;d=[];for(c in b)e=b[c],a[""+c]=e,d.push(function(){var b,d,g,h;for(g=this.vendors,h=[],b=0,d=g.length;d>b;b++)f=g[b],h.push(a[""+f+c.charAt(0).toUpperCase()+c.substr(1)]=e);return h}.call(this));return d},e.prototype.vendorCSS=function(a,b){var c,e,f,g,h,i;for(h=d(a),g=h.getPropertyCSSValue(b),f=this.vendors,c=0,e=f.length;e>c;c++)i=f[c],g=g||h.getPropertyCSSValue("-"+i+"-"+b);return g},e.prototype.animationName=function(a){var b;try{b=this.vendorCSS(a,"animation-name").cssText}catch(c){b=d(a).getPropertyValue("animation-name")}return"none"===b?"":b},e.prototype.cacheAnimationName=function(a){return this.animationNameCache.set(a,this.animationName(a))},e.prototype.cachedAnimationName=function(a){return this.animationNameCache.get(a)},e.prototype.scrollHandler=function(){return this.scrolled=!0},e.prototype.scrollCallback=function(){var a;return!this.scrolled||(this.scrolled=!1,this.boxes=function(){var b,c,d,e;for(d=this.boxes,e=[],b=0,c=d.length;c>b;b++)a=d[b],a&&(this.isVisible(a)?this.show(a):e.push(a));return e}.call(this),this.boxes.length||this.config.live)?void 0:this.stop()},e.prototype.offsetTop=function(a){for(var b;void 0===a.offsetTop;)a=a.parentNode;for(b=a.offsetTop;a=a.offsetParent;)b+=a.offsetTop;return b},e.prototype.isVisible=function(a){var b,c,d,e,f;return c=a.getAttribute("data-wow-offset")||this.config.offset,f=this.config.scrollContainer&&this.config.scrollContainer.scrollTop||window.pageYOffset,e=f+Math.min(this.element.clientHeight,this.util().innerHeight())-c,d=this.offsetTop(a),b=d+a.clientHeight,e>=d&&b>=f},e.prototype.util=function(){return null!=this._util?this._util:this._util=new b},e.prototype.disabled=function(){return!this.config.mobile&&this.util().isMobile(navigator.userAgent)},e}()}).call(this); \ No newline at end of file diff --git a/static/uploads/temp.jpg b/static/uploads/temp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa4ee4ead5d3c42dcebd6a168e20d861a2a5b220 Binary files /dev/null and b/static/uploads/temp.jpg differ diff --git a/temp/LayoutlMV3InferenceOutput.json b/temp/LayoutlMV3InferenceOutput.json new file mode 100644 index 0000000000000000000000000000000000000000..c7f414affea01fa6efce6fc0296f196a6b472a06 --- /dev/null +++ b/temp/LayoutlMV3InferenceOutput.json @@ -0,0 +1 @@ +[{"output": [{"text": "000019273", "label": "RECEIPTNUMBER", "words": [{"id": 36, "box": [257.0, 422.0, 469.0, 471.0], "text": "000019273"}]}, {"text": "25.00", "label": "TOTAL", "words": [{"id": 76, "box": [333.0, 1156.0, 446.0, 1204.0], "text": "25.00"}]}, {"text": "PM", "label": "TRANSACTIONTIME", "words": [{"id": 96, "box": [982.0, 478.0, 1035.0, 521.0], "text": "PM"}]}, {"text": "24.00", "label": "VATTAX", "words": [{"id": 107, "box": [839.0, 1262.0, 952.0, 1312.0], "text": "24.00"}]}, {"text": "W / SU Nulti Purpose Cooperative", "label": "MERCHANTNAME", "words": [{"id": 0, "box": [208.0, 56.0, 302.0, 106.0], "text": "W"}, {"id": 1, "box": [208.0, 56.0, 302.0, 106.0], "text": "/"}, {"id": 2, "box": [208.0, 56.0, 302.0, 106.0], "text": "SU"}, {"id": 3, "box": [308.0, 56.0, 433.0, 106.0], "text": "Nulti"}, {"id": 4, "box": [439.0, 56.0, 602.0, 106.0], "text": "Purpose"}, {"id": 5, "box": [608.0, 56.0, 849.0, 106.0], "text": "Cooperative"}]}, {"text": "Luna Street Lapaz Iloilo City", "label": "MERCHANTADDRESS", "words": [{"id": 6, "box": [344.0, 116.0, 441.0, 159.0], "text": "Luna"}, {"id": 7, "box": [446.0, 116.0, 591.0, 159.0], "text": "Street"}, {"id": 8, "box": [597.0, 116.0, 704.0, 159.0], "text": "Lapaz"}, {"id": 9, "box": [410.0, 162.0, 545.0, 212.0], "text": "Iloilo"}, {"id": 10, "box": [551.0, 162.0, 645.0, 212.0], "text": "City"}]}, {"text": "09 - 11 - 2023", "label": "TRANSACTIONDATE", "words": [{"id": 37, "box": [271.0, 479.0, 489.0, 523.0], "text": "09"}, {"id": 38, "box": [271.0, 479.0, 489.0, 523.0], "text": "-"}, {"id": 39, "box": [271.0, 479.0, 489.0, 523.0], "text": "11"}, {"id": 40, "box": [271.0, 479.0, 489.0, 523.0], "text": "-"}, {"id": 41, "box": [271.0, 479.0, 489.0, 523.0], "text": "2023"}]}, {"text": "NOVA CHEDDAR 40G CREAM - O VANILLA 30G", "label": "ITEMS", "words": [{"id": 62, "box": [126.0, 949.0, 218.0, 992.0], "text": "NOVA"}, {"id": 63, "box": [223.0, 949.0, 390.0, 992.0], "text": "CHEDDAR"}, {"id": 64, "box": [395.0, 949.0, 470.0, 992.0], "text": "40G"}, {"id": 65, "box": [122.0, 1001.0, 283.0, 1044.0], "text": "CREAM"}, {"id": 66, "box": [122.0, 1001.0, 283.0, 1044.0], "text": "-"}, {"id": 67, "box": [122.0, 1001.0, 283.0, 1044.0], "text": "O"}, {"id": 68, "box": [289.0, 1001.0, 456.0, 1044.0], "text": "VANILLA"}, {"id": 69, "box": [461.0, 1001.0, 532.0, 1044.0], "text": "30G"}]}, {"text": "04 : 12 : 12", "label": "VATTAX", "words": [{"id": 91, "box": [793.0, 479.0, 977.0, 523.0], "text": "04"}, {"id": 92, "box": [793.0, 479.0, 977.0, 523.0], "text": ":"}, {"id": 93, "box": [793.0, 479.0, 977.0, 523.0], "text": "12"}, {"id": 94, "box": [793.0, 479.0, 977.0, 523.0], "text": ":"}, {"id": 95, "box": [793.0, 479.0, 977.0, 523.0], "text": "12"}]}, {"text": "8.00 2.79", "label": "VATTAX", "words": [{"id": 104, "box": [879.0, 1001.0, 972.0, 1051.0], "text": "8.00"}, {"id": 105, "box": [839.0, 1104.0, 932.0, 1157.0], "text": "2.79"}]}]}] \ No newline at end of file diff --git a/temp/temp_ocr.json b/temp/temp_ocr.json new file mode 100644 index 0000000000000000000000000000000000000000..0f696ec16499245823b9d7216f8b3c83f4d97128 --- /dev/null +++ b/temp/temp_ocr.json @@ -0,0 +1 @@ +{"ParsedResults": [{"TextOverlay": {"Lines": [{"LineText": "W/SU Nulti Purpose Cooperative", "Words": [{"WordText": "W", "Left": 208.0, "Top": 56.0, "Height": 50.0, "Width": 94.0}, {"WordText": "/", "Left": 208.0, "Top": 56.0, "Height": 50.0, "Width": 94.0}, {"WordText": "SU", "Left": 208.0, "Top": 56.0, "Height": 50.0, "Width": 94.0}, {"WordText": "Nulti", "Left": 308.0, "Top": 56.0, "Height": 50.0, "Width": 125.0}, {"WordText": "Purpose", "Left": 439.0, "Top": 56.0, "Height": 50.0, "Width": 163.0}, {"WordText": "Cooperative", "Left": 608.0, "Top": 56.0, "Height": 50.0, "Width": 241.0}], "MaxHeight": 50.0, "MinTop": 56.0}, {"LineText": "Luna Street Lapaz", "Words": [{"WordText": "Luna", "Left": 344.0, "Top": 116.0, "Height": 43.0, "Width": 97.0}, {"WordText": "Street", "Left": 446.0, "Top": 116.0, "Height": 43.0, "Width": 145.0}, {"WordText": "Lapaz", "Left": 597.0, "Top": 116.0, "Height": 43.0, "Width": 107.0}], "MaxHeight": 43.0, "MinTop": 116.0}, {"LineText": "Iloilo City", "Words": [{"WordText": "Iloilo", "Left": 410.0, "Top": 162.0, "Height": 50.0, "Width": 135.0}, {"WordText": "City", "Left": 551.0, "Top": 162.0, "Height": 50.0, "Width": 94.0}], "MaxHeight": 50.0, "MinTop": 162.0}, {"LineText": "By: WVSU MPC", "Words": [{"WordText": "By", "Left": 410.0, "Top": 214.0, "Height": 50.0, "Width": 62.0}, {"WordText": ":", "Left": 410.0, "Top": 214.0, "Height": 50.0, "Width": 62.0}, {"WordText": "WVSU", "Left": 477.0, "Top": 214.0, "Height": 50.0, "Width": 92.0}, {"WordText": "MPC", "Left": 575.0, "Top": 215.0, "Height": 50.0, "Width": 73.0}], "MaxHeight": 52.0, "MinTop": 214.0}, {"LineText": "VAT TIN No. :000-000-000-000", "Words": [{"WordText": "VAT", "Left": 241.0, "Top": 268.0, "Height": 50.0, "Width": 79.0}, {"WordText": "TIN", "Left": 327.0, "Top": 268.0, "Height": 49.0, "Width": 74.0}, {"WordText": "No", "Left": 406.0, "Top": 268.0, "Height": 49.0, "Width": 67.0}, {"WordText": ".", "Left": 406.0, "Top": 268.0, "Height": 49.0, "Width": 67.0}, {"WordText": ":", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "000", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "-", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "000", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "-", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "000", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "-", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}, {"WordText": "000", "Left": 480.0, "Top": 268.0, "Height": 50.0, "Width": 336.0}], "MaxHeight": 50.0, "MinTop": 268.0}, {"LineText": "Serial. No. W1ES74S", "Words": [{"WordText": "Serial", "Left": 311.0, "Top": 321.0, "Height": 50.0, "Width": 160.0}, {"WordText": ".", "Left": 311.0, "Top": 321.0, "Height": 50.0, "Width": 160.0}, {"WordText": "No", "Left": 476.0, "Top": 321.0, "Height": 49.0, "Width": 74.0}, {"WordText": ".", "Left": 476.0, "Top": 321.0, "Height": 49.0, "Width": 74.0}, {"WordText": "W1ES74S", "Left": 556.0, "Top": 321.0, "Height": 50.0, "Width": 188.0}], "MaxHeight": 50.0, "MinTop": 321.0}, {"LineText": "Mach ED: 000000000000000000", "Words": [{"WordText": "Mach", "Left": 248.0, "Top": 373.0, "Height": 47.0, "Width": 100.0}, {"WordText": "ED", "Left": 354.0, "Top": 373.0, "Height": 47.0, "Width": 65.0}, {"WordText": ":", "Left": 354.0, "Top": 373.0, "Height": 47.0, "Width": 65.0}, {"WordText": "000000000000000000", "Left": 424.0, "Top": 373.0, "Height": 47.0, "Width": 382.0}], "MaxHeight": 47.0, "MinTop": 373.0}, {"LineText": "000019273", "Words": [{"WordText": "000019273", "Left": 257.0, "Top": 422.0, "Height": 49.0, "Width": 212.0}], "MaxHeight": 49.0, "MinTop": 422.0}, {"LineText": "09-11-2023", "Words": [{"WordText": "09", "Left": 271.0, "Top": 479.0, "Height": 44.0, "Width": 218.0}, {"WordText": "-", "Left": 271.0, "Top": 479.0, "Height": 44.0, "Width": 218.0}, {"WordText": "11", "Left": 271.0, "Top": 479.0, "Height": 44.0, "Width": 218.0}, {"WordText": "-", "Left": 271.0, "Top": 479.0, "Height": 44.0, "Width": 218.0}, {"WordText": "2023", "Left": 271.0, "Top": 479.0, "Height": 44.0, "Width": 218.0}], "MaxHeight": 44.0, "MinTop": 479.0}, {"LineText": "Tine", "Words": [{"WordText": "Tine", "Left": 588.0, "Top": 476.0, "Height": 46.0, "Width": 89.0}], "MaxHeight": 46.0, "MinTop": 476.0}, {"LineText": "gampay", "Words": [{"WordText": "gampay", "Left": 271.0, "Top": 538.0, "Height": 41.0, "Width": 136.0}], "MaxHeight": 41.0, "MinTop": 538.0}, {"LineText": "Invoice #", "Words": [{"WordText": "Invoice", "Left": 20.0, "Top": 426.0, "Height": 44.0, "Width": 158.0}, {"WordText": "#", "Left": 182.0, "Top": 427.0, "Height": 43.0, "Width": 46.0}], "MaxHeight": 44.0, "MinTop": 426.0}, {"LineText": "Date", "Words": [{"WordText": "Date", "Left": 20.0, "Top": 479.0, "Height": 43.0, "Width": 93.0}], "MaxHeight": 43.0, "MinTop": 479.0}, {"LineText": "Cashier", "Words": [{"WordText": "Cashier", "Left": 20.0, "Top": 529.0, "Height": 43.0, "Width": 155.0}], "MaxHeight": 43.0, "MinTop": 529.0}, {"LineText": "Sold To:", "Words": [{"WordText": "Sold", "Left": 20.0, "Top": 582.0, "Height": 46.0, "Width": 98.0}, {"WordText": "To", "Left": 124.0, "Top": 582.0, "Height": 46.0, "Width": 71.0}, {"WordText": ":", "Left": 124.0, "Top": 582.0, "Height": 46.0, "Width": 71.0}], "MaxHeight": 46.0, "MinTop": 582.0}, {"LineText": "Bus. Name:", "Words": [{"WordText": "Bus", "Left": 20.0, "Top": 638.0, "Height": 46.0, "Width": 98.0}, {"WordText": ".", "Left": 20.0, "Top": 638.0, "Height": 46.0, "Width": 98.0}, {"WordText": "Name", "Left": 123.0, "Top": 638.0, "Height": 46.0, "Width": 108.0}, {"WordText": ":", "Left": 124.0, "Top": 638.0, "Height": 46.0, "Width": 108.0}], "MaxHeight": 46.0, "MinTop": 638.0}, {"LineText": "TIN:", "Words": [{"WordText": "TIN", "Left": 20.0, "Top": 684.0, "Height": 46.0, "Width": 89.0}, {"WordText": ":", "Left": 20.0, "Top": 684.0, "Height": 46.0, "Width": 89.0}], "MaxHeight": 46.0, "MinTop": 684.0}, {"LineText": "Address:", "Words": [{"WordText": "Address", "Left": 20.0, "Top": 736.0, "Height": 48.0, "Width": 172.0}, {"WordText": ":", "Left": 20.0, "Top": 736.0, "Height": 48.0, "Width": 172.0}], "MaxHeight": 48.0, "MinTop": 736.0}, {"LineText": "QTV DESC", "Words": [{"WordText": "QTV", "Left": 20.0, "Top": 843.0, "Height": 44.0, "Width": 90.0}, {"WordText": "DESC", "Left": 114.0, "Top": 841.0, "Height": 44.0, "Width": 101.0}], "MaxHeight": 46.0, "MinTop": 841.0}, {"LineText": "1", "Words": [{"WordText": "1", "Left": 26.0, "Top": 955.0, "Height": 33.0, "Width": 17.0}], "MaxHeight": 33.0, "MinTop": 955.0}, {"LineText": "NOVA CHEDDAR 40G", "Words": [{"WordText": "NOVA", "Left": 126.0, "Top": 949.0, "Height": 43.0, "Width": 92.0}, {"WordText": "CHEDDAR", "Left": 223.0, "Top": 949.0, "Height": 43.0, "Width": 167.0}, {"WordText": "40G", "Left": 395.0, "Top": 949.0, "Height": 43.0, "Width": 75.0}], "MaxHeight": 43.0, "MinTop": 949.0}, {"LineText": "CREAM-O VANILLA 30G", "Words": [{"WordText": "CREAM", "Left": 122.0, "Top": 1001.0, "Height": 43.0, "Width": 161.0}, {"WordText": "-", "Left": 122.0, "Top": 1001.0, "Height": 43.0, "Width": 161.0}, {"WordText": "O", "Left": 122.0, "Top": 1001.0, "Height": 43.0, "Width": 161.0}, {"WordText": "VANILLA", "Left": 289.0, "Top": 1001.0, "Height": 43.0, "Width": 167.0}, {"WordText": "30G", "Left": 461.0, "Top": 1001.0, "Height": 43.0, "Width": 71.0}], "MaxHeight": 43.0, "MinTop": 1001.0}, {"LineText": "Net Of VAT", "Words": [{"WordText": "Net", "Left": 20.0, "Top": 1104.0, "Height": 47.0, "Width": 75.0}, {"WordText": "Of", "Left": 100.0, "Top": 1104.0, "Height": 46.0, "Width": 58.0}, {"WordText": "VAT", "Left": 163.0, "Top": 1103.0, "Height": 47.0, "Width": 71.0}], "MaxHeight": 47.0, "MinTop": 1103.0}, {"LineText": "Total Due", "Words": [{"WordText": "Total", "Left": 20.0, "Top": 1157.0, "Height": 46.0, "Width": 115.0}, {"WordText": "Due", "Left": 141.0, "Top": 1157.0, "Height": 46.0, "Width": 74.0}], "MaxHeight": 46.0, "MinTop": 1157.0}, {"LineText": "23.21", "Words": [{"WordText": "23.21", "Left": 333.0, "Top": 1106.0, "Height": 51.0, "Width": 113.0}], "MaxHeight": 51.0, "MinTop": 1106.0}, {"LineText": "25.00", "Words": [{"WordText": "25.00", "Left": 333.0, "Top": 1156.0, "Height": 48.0, "Width": 113.0}], "MaxHeight": 48.0, "MinTop": 1156.0}, {"LineText": "Cash Payment", "Words": [{"WordText": "Cash", "Left": 20.0, "Top": 1263.0, "Height": 47.0, "Width": 92.0}, {"WordText": "Payment", "Left": 117.0, "Top": 1262.0, "Height": 47.0, "Width": 160.0}], "MaxHeight": 48.0, "MinTop": 1262.0}, {"LineText": "50.00", "Words": [{"WordText": "50.00", "Left": 334.0, "Top": 1263.0, "Height": 46.0, "Width": 116.0}], "MaxHeight": 46.0, "MinTop": 1263.0}, {"LineText": "Sold To:", "Words": [{"WordText": "Sold", "Left": 20.0, "Top": 1364.0, "Height": 47.0, "Width": 98.0}, {"WordText": "To", "Left": 123.0, "Top": 1365.0, "Height": 47.0, "Width": 69.0}, {"WordText": ":", "Left": 123.0, "Top": 1365.0, "Height": 47.0, "Width": 69.0}], "MaxHeight": 48.0, "MinTop": 1364.0}, {"LineText": "Bus. Name:", "Words": [{"WordText": "Bus", "Left": 20.0, "Top": 1423.0, "Height": 44.0, "Width": 95.0}, {"WordText": ".", "Left": 20.0, "Top": 1423.0, "Height": 43.0, "Width": 95.0}, {"WordText": "Name", "Left": 119.0, "Top": 1424.0, "Height": 44.0, "Width": 112.0}, {"WordText": ":", "Left": 119.0, "Top": 1424.0, "Height": 44.0, "Width": 112.0}], "MaxHeight": 45.0, "MinTop": 1423.0}, {"LineText": "TIN:", "Words": [{"WordText": "TIN", "Left": 20.0, "Top": 1471.0, "Height": 46.0, "Width": 89.0}, {"WordText": ":", "Left": 20.0, "Top": 1471.0, "Height": 46.0, "Width": 89.0}], "MaxHeight": 46.0, "MinTop": 1471.0}, {"LineText": "Address:", "Words": [{"WordText": "Address", "Left": 20.0, "Top": 1523.0, "Height": 47.0, "Width": 172.0}, {"WordText": ":", "Left": 20.0, "Top": 1523.0, "Height": 47.0, "Width": 172.0}], "MaxHeight": 47.0, "MinTop": 1523.0}, {"LineText": "04:12:12 PM", "Words": [{"WordText": "04", "Left": 793.0, "Top": 479.0, "Height": 44.0, "Width": 184.0}, {"WordText": ":", "Left": 793.0, "Top": 479.0, "Height": 44.0, "Width": 184.0}, {"WordText": "12", "Left": 793.0, "Top": 479.0, "Height": 44.0, "Width": 184.0}, {"WordText": ":", "Left": 793.0, "Top": 479.0, "Height": 44.0, "Width": 184.0}, {"WordText": "12", "Left": 793.0, "Top": 479.0, "Height": 44.0, "Width": 184.0}, {"WordText": "PM", "Left": 982.0, "Top": 478.0, "Height": 43.0, "Width": 53.0}], "MaxHeight": 44.0, "MinTop": 478.0}, {"LineText": "VAT Airt", "Words": [{"WordText": "VAT", "Left": 565.0, "Top": 1106.0, "Height": 44.0, "Width": 74.0}, {"WordText": "Airt", "Left": 643.0, "Top": 1107.0, "Height": 44.0, "Width": 74.0}], "MaxHeight": 46.0, "MinTop": 1106.0}, {"LineText": "Total Qty", "Words": [{"WordText": "Total", "Left": 565.0, "Top": 1157.0, "Height": 51.0, "Width": 117.0}, {"WordText": "Qty", "Left": 687.0, "Top": 1156.0, "Height": 51.0, "Width": 73.0}], "MaxHeight": 52.0, "MinTop": 1156.0}, {"LineText": "Change", "Words": [{"WordText": "Change", "Left": 562.0, "Top": 1263.0, "Height": 50.0, "Width": 135.0}], "MaxHeight": 50.0, "MinTop": 1263.0}, {"LineText": "Total", "Words": [{"WordText": "Total", "Left": 879.0, "Top": 843.0, "Height": 46.0, "Width": 109.0}], "MaxHeight": 46.0, "MinTop": 843.0}, {"LineText": "18.00", "Words": [{"WordText": "18.00", "Left": 885.0, "Top": 948.0, "Height": 51.0, "Width": 110.0}], "MaxHeight": 51.0, "MinTop": 948.0}, {"LineText": "8.00", "Words": [{"WordText": "8.00", "Left": 879.0, "Top": 1001.0, "Height": 50.0, "Width": 93.0}], "MaxHeight": 50.0, "MinTop": 1001.0}, {"LineText": "2.79", "Words": [{"WordText": "2.79", "Left": 839.0, "Top": 1104.0, "Height": 53.0, "Width": 93.0}], "MaxHeight": 53.0, "MinTop": 1104.0}, {"LineText": "2", "Words": [{"WordText": "2", "Left": 839.0, "Top": 1160.0, "Height": 40.0, "Width": 26.0}], "MaxHeight": 40.0, "MinTop": 1160.0}, {"LineText": "24.00", "Words": [{"WordText": "24.00", "Left": 839.0, "Top": 1262.0, "Height": 50.0, "Width": 113.0}], "MaxHeight": 50.0, "MinTop": 1262.0}, {"LineText": "Tr #:000019365", "Words": [{"WordText": "Tr", "Left": 377.0, "Top": 1577.0, "Height": 46.0, "Width": 52.0}, {"WordText": "#:", "Left": 434.0, "Top": 1577.0, "Height": 46.0, "Width": 243.0}, {"WordText": "000019365", "Left": 434.0, "Top": 1577.0, "Height": 46.0, "Width": 243.0}], "MaxHeight": 46.0, "MinTop": 1577.0}, {"LineText": "SUPPLIER: AYAMICA COMPUTER TECHNOLOGIES", "Words": [{"WordText": "SUPPLIER", "Left": 20.0, "Top": 1682.0, "Height": 47.0, "Width": 188.0}, {"WordText": ":", "Left": 20.0, "Top": 1682.0, "Height": 47.0, "Width": 188.0}, {"WordText": "AYAMICA", "Left": 214.0, "Top": 1682.0, "Height": 47.0, "Width": 153.0}, {"WordText": "COMPUTER", "Left": 373.0, "Top": 1682.0, "Height": 47.0, "Width": 188.0}, {"WordText": "TECHNOLOGIES", "Left": 566.0, "Top": 1682.0, "Height": 47.0, "Width": 256.0}], "MaxHeight": 47.0, "MinTop": 1682.0}, {"LineText": "ADDRESS :BLK.21 LOT 55 DEGA HOMES", "Words": [{"WordText": "ADDRESS", "Left": 20.0, "Top": 1732.0, "Height": 50.0, "Width": 163.0}, {"WordText": ":", "Left": 189.0, "Top": 1732.0, "Height": 50.0, "Width": 156.0}, {"WordText": "BLK", "Left": 189.0, "Top": 1732.0, "Height": 50.0, "Width": 156.0}, {"WordText": ".", "Left": 189.0, "Top": 1732.0, "Height": 50.0, "Width": 156.0}, {"WordText": "21", "Left": 189.0, "Top": 1732.0, "Height": 50.0, "Width": 156.0}, {"WordText": "LOT", "Left": 351.0, "Top": 1732.0, "Height": 50.0, "Width": 75.0}, {"WordText": "55", "Left": 433.0, "Top": 1732.0, "Height": 50.0, "Width": 62.0}, {"WordText": "DEGA", "Left": 501.0, "Top": 1732.0, "Height": 50.0, "Width": 94.0}, {"WordText": "HOMES", "Left": 601.0, "Top": 1732.0, "Height": 50.0, "Width": 119.0}], "MaxHeight": 50.0, "MinTop": 1732.0}, {"LineText": "PANDAL PAVIA ILOILO", "Words": [{"WordText": "PANDAL", "Left": 205.0, "Top": 1785.0, "Height": 46.0, "Width": 138.0}, {"WordText": "PAVIA", "Left": 349.0, "Top": 1785.0, "Height": 46.0, "Width": 127.0}, {"WordText": "ILOILO", "Left": 481.0, "Top": 1785.0, "Height": 46.0, "Width": 134.0}], "MaxHeight": 46.0, "MinTop": 1785.0}, {"LineText": "TIN # :994785225-060", "Words": [{"WordText": "TIN", "Left": 19.0, "Top": 1829.0, "Height": 62.0, "Width": 76.0}, {"WordText": "#", "Left": 101.0, "Top": 1830.0, "Height": 62.0, "Width": 76.0}, {"WordText": ":", "Left": 184.0, "Top": 1832.0, "Height": 67.0, "Width": 306.0}, {"WordText": "994785225", "Left": 184.0, "Top": 1832.0, "Height": 67.0, "Width": 306.0}, {"WordText": "-", "Left": 184.0, "Top": 1832.0, "Height": 67.0, "Width": 306.0}, {"WordText": "060", "Left": 184.0, "Top": 1832.0, "Height": 67.0, "Width": 306.0}], "MaxHeight": 70.0, "MinTop": 1829.0}, {"LineText": "Accred.#:00000000000", "Words": [{"WordText": "Accred", "Left": 20.0, "Top": 1891.0, "Height": 50.0, "Width": 426.0}, {"WordText": ".#:", "Left": 20.0, "Top": 1891.0, "Height": 50.0, "Width": 426.0}, {"WordText": "00000000000", "Left": 20.0, "Top": 1891.0, "Height": 50.0, "Width": 426.0}], "MaxHeight": 50.0, "MinTop": 1891.0}, {"LineText": "05/08/2015-07/31/2025", "Words": [{"WordText": "05", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "/", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "08", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "/", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "2015", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "-", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "07", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "/", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "31", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "/", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}, {"WordText": "2025", "Left": 17.0, "Top": 1943.0, "Height": 50.0, "Width": 449.0}], "MaxHeight": 50.0, "MinTop": 1943.0}, {"LineText": "Permit *#: FP0-0000000-00000", "Words": [{"WordText": "Permit", "Left": 17.0, "Top": 1993.0, "Height": 46.0, "Width": 133.0}, {"WordText": "*#:", "Left": 155.0, "Top": 1993.0, "Height": 46.0, "Width": 52.0}, {"WordText": "FP0", "Left": 212.0, "Top": 1993.0, "Height": 46.0, "Width": 359.0}, {"WordText": "-", "Left": 213.0, "Top": 1993.0, "Height": 46.0, "Width": 359.0}, {"WordText": "0000000", "Left": 212.0, "Top": 1993.0, "Height": 46.0, "Width": 359.0}, {"WordText": "-", "Left": 213.0, "Top": 1993.0, "Height": 46.0, "Width": 359.0}, {"WordText": "00000", "Left": 212.0, "Top": 1993.0, "Height": 46.0, "Width": 359.0}], "MaxHeight": 46.0, "MinTop": 1993.0}, {"LineText": "THANK YOU", "Words": [{"WordText": "THANK", "Left": 430.0, "Top": 2046.0, "Height": 46.0, "Width": 115.0}, {"WordText": "YOU", "Left": 551.0, "Top": 2046.0, "Height": 46.0, "Width": 74.0}], "MaxHeight": 46.0, "MinTop": 2046.0}, {"LineText": "PLEASE COME AGAIN", "Words": [{"WordText": "PLEASE", "Left": 311.0, "Top": 2099.0, "Height": 46.0, "Width": 173.0}, {"WordText": "COME", "Left": 489.0, "Top": 2099.0, "Height": 46.0, "Width": 98.0}, {"WordText": "AGAIN", "Left": 593.0, "Top": 2099.0, "Height": 46.0, "Width": 118.0}], "MaxHeight": 46.0, "MinTop": 2099.0}, {"LineText": "THIS SERVE AS AN OFFICIAL RECEIPT", "Words": [{"WordText": "THIS", "Left": 175.0, "Top": 2152.0, "Height": 50.0, "Width": 92.0}, {"WordText": "SERVE", "Left": 273.0, "Top": 2152.0, "Height": 49.0, "Width": 123.0}, {"WordText": "AS", "Left": 402.0, "Top": 2152.0, "Height": 49.0, "Width": 55.0}, {"WordText": "AN", "Left": 463.0, "Top": 2152.0, "Height": 49.0, "Width": 61.0}, {"WordText": "OFFICIAL", "Left": 530.0, "Top": 2152.0, "Height": 49.0, "Width": 178.0}, {"WordText": "RECEIPT", "Left": 714.0, "Top": 2152.0, "Height": 50.0, "Width": 162.0}], "MaxHeight": 50.0, "MinTop": 2152.0}], "HasOverlay": true}, "TextOrientation": "0", "FileParseExitCode": 1, "ParsedText": "W/SU Nulti Purpose Cooperative\nLuna Street Lapaz\nIloilo City\nBy: WVSU MPC\nVAT TIN No. :000-000-000-000\nSerial. No. W1ES74S\nMach ED: 000000000000000000\n000019273\n09-11-2023\nTine\ngampay\nInvoice #\nDate\nCashier\nSold To:\nBus. Name:\nTIN:\nAddress:\nQTV DESC\n1\nNOVA CHEDDAR 40G\nCREAM-O VANILLA 30G\nNet Of VAT\nTotal Due\n23.21\n25.00\nCash Payment\n50.00\nSold To:\nBus. Name:\nTIN:\nAddress:\n04:12:12 PM\nVAT Airt\nTotal Qty\nChange\nTotal\n18.00\n8.00\n2.79\n2\n24.00\nTr #:000019365\nSUPPLIER: AYAMICA COMPUTER TECHNOLOGIES\nADDRESS :BLK.21 LOT 55 DEGA HOMES\nPANDAL PAVIA ILOILO\nTIN # :994785225-060\nAccred.#:00000000000\n05/08/2015-07/31/2025\nPermit *#: FP0-0000000-00000\nTHANK YOU\nPLEASE COME AGAIN\nTHIS SERVE AS AN OFFICIAL RECEIPT", "ErrorMessage": "", "ErrorDetails": ""}], "OCRExitCode": 1, "IsErroredOnProcessing": false, "ProcessingTimeInMilliseconds": "1359", "SearchablePDFURL": "Searchable PDF not generated as it was not requested."} \ No newline at end of file diff --git a/temp/temp_preprocessed.jpg b/temp/temp_preprocessed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8292447c40a6d592097b7ac6636235e314f482d1 Binary files /dev/null and b/temp/temp_preprocessed.jpg differ diff --git a/templates/extractor.html b/templates/extractor.html new file mode 100644 index 0000000000000000000000000000000000000000..9b483f987032a2edb08c51be623e7205b5dba27a --- /dev/null +++ b/templates/extractor.html @@ -0,0 +1,510 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + ExCeipt | Extractor + + + + + + +
+
+ +
+ + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + {{ old_name }} + +
+
+ + +
+ + {% if uploaded_file %} + + {% else %} +

No file uploaded.

+ {% endif %} + +
+
+
+
+ +
+ +
+
+
+

Receipt Verification

+
+
+
+ {% if prediction_result.lower() == 'receipt' %} + + +

The image uploaded is a Valid Receipt.

+ {% else %} + + +

The image uploaded is NOT a Receipt Please return and upload again.

+ {% endif %} +
+
+
+
+

Text Extraction

+
+ + + +
+
+ +
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + +
Receipt No.MerchantAddressDateTimeItemsPriceTotalVat Tax
+
+
+
+

Export

+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000000000000000000000000000000000000..f768cc4f4ce049ce4772e9e4cd896a5ea4d35123 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,256 @@ + + + + + + + + ExCeipt + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + +
+ +
+
+ + +
+
+
+
+
+
+ +
+ + +
+ + + + + + + + + + + + + + + + + \ No newline at end of file