Skip to content

Commit

Permalink
o bagulho eh louco
Browse files Browse the repository at this point in the history
  • Loading branch information
matheusbsilva committed Jul 26, 2019
1 parent 3ab02cb commit e5c17a2
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 65 deletions.
Binary file removed api/bin_models/v1/rf-classifier
Binary file not shown.
Binary file removed api/bin_models/v1/tf-idf-vectorizer
Binary file not shown.
Binary file renamed api/bin_models/v1/model_keystroke.pickle → api/bin_models/v1/voting.pickle
100644 → 100755
Binary file not shown.
52 changes: 8 additions & 44 deletions api/classifier.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,35 @@

#import handlers.pickle_handler as model_handler
import handlers.data_transform as data_transform
import sys

def keystroke_classifier(req_json):
def keystroke_classifier(df):
# TODO: Implementar
classifier = load_keystroke_model()

keystroke_array = data_transform.array_for_predict(req_json)
pred = classifier.predict(df)

pred = classifier.predict(keystroke_array)

return 1
return pred


def face_classifier(req_decoded_image):
# TODO: Implementar
#classifier = load_facial_model()
pic = face_recognition.load_image_file(req_decoded_image)
encoding = face_recognition.face_encodings(pic)[0]

results = face_recognition.compare_faces(clientes, encoding,tolerance=0.6)

return max(results)
#pred = classifier.predict(decoded_image)
return "foo"

def text_classify(text):
text_vectorized = vectorize_text(text)
classifier = load_text_model()

pred = classifier.predict(text_vectorized)

flag = None

if pred[0] == 0:
flag = 'Red flag'
elif pred[0] == 1:
flag = 'Green flag'

return flag



#TODO enviar funções para o handlers

# Keystroke
def load_keystroke_model():
model = pickle.load(open('./bin_models/v1/model_keystroke.pickle', 'rb'))
model = pickle.load(open('/api/api/bin_models/v1/voting.pickle', 'rb'))

return model

Expand All @@ -58,23 +41,4 @@ def load_keystroke_model():
def load_facial_model():
model = pickle.load(open('./bin_models/v1/model_facial.pickle', 'rb'))

return model


# Text
def load_text_model():
model = pickle.load(open('./bin_models/v1/rf-classifier', 'rb'))

return model

def load_text_vectorizer():
vectorizer = pickle.load(open('./bin_models/v1/tf-idf-vectorizer', 'rb'))

return vectorizer

def vectorize_text(text):
vectorizer = load_text_vectorizer()

text_vectorized = vectorizer.transform([text])

return text_vectorized
return model
30 changes: 30 additions & 0 deletions api/handlers/data_transform.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,34 @@
import pandas as pd
import sys


def array_for_predict(req_json):
print('ayn')
#array precisa ser de 31, e preencher com 0 o que não tiver.
return [0,1,0,1]


def transform_keystroke(data):
df = pd.DataFrame.from_dict([data])
df.fillna(0, inplace=True)
print(df.columns)

df['DD.5.shift.r'] = df.get('DD.5.shift', 0) + df.get('DD.shift.r', 0)
df['UD.5.shift.r'] = df.get('UD.5.r', 0) + df.get('UD.5.shift', 0)

df['H.shift.r'] = df.get('H.r', 0)
df['DD.shift.r.o'] = df.get('DD.r.o', 0)
df['UD.shift.r.o'] = df.get('UD.r.o', 0) + df.get('UD.shift.o', 0)

df.drop(columns=['UD.r.o', 'UD.shift.o', 'H.r', 'UD.5.r', 'UD.5.shift', 'DD.shift.r', 'DD.5.shift'], inplace=True, errors='ignore')
df['H.return'] = df['H.l']

colsnew = ['H.period', 'DD.period.t', 'UD.period.t', 'H.t', 'DD.t.i', 'UD.t.i', 'H.i', 'DD.i.e', 'UD.i.e',
'H.e', 'DD.e.5', 'UD.e.5', 'H.5', 'DD.5.shift.r', 'UD.5.shift.r', 'H.shift.r', 'DD.shift.r.o',
'UD.shift.r.o', 'H.o', 'DD.o.a', 'UD.o.a', 'H.a', 'DD.a.n', 'UD.a.n', 'H.n',
'DD.n.l', 'UD.n.l', 'H.l', 'DD.l.return', 'UD.l.return', 'H.return'
]

df = df[colsnew]

return df
31 changes: 11 additions & 20 deletions api/server.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
import numpy as np
import sys
import cv2
import json

from flask import Flask
from flask import jsonify
from flask import request
from flasgger import Swagger
from flasgger import swag_from
from flask_cors import CORS

from swagger.swagger_config import swagger_configuration

from classifier import keystroke_classifier
from classifier import face_classifier
from classifier import text_classify
from handlers.data_transform import transform_keystroke

#import os
#import sys
Expand All @@ -22,6 +25,7 @@

app = Flask(__name__)
swagger = Swagger(app, config=swagger_configuration)
CORS(app, origins="*")


def decode_image(file):
Expand All @@ -44,11 +48,13 @@ def status():
@app.route('/keystroke', methods=['POST'])
@swag_from('swagger/keystroke.yml')
def keystroke():
req_dict = request.get_json()
req_dict = json.loads(request.data)

classification = keystroke_classifier(req_dict)
data = transform_keystroke(req_dict)

return jsonify({'classification': classification})
classification = keystroke_classifier(data)

return jsonify({'classification': classification[0]})


@app.route('/face', methods=['POST'])
Expand All @@ -60,24 +66,9 @@ def face_recognition():
return response

#precisa que manda a imagem e não decodificado

decoded_image = decode_image(request.files['image'])

#o que é essa função decode_image???

classification = face_classifier(decoded_image)

return jsonify({'classification': classification})

#classificação textual para remover depois

@app.route('/classify', methods=['POST'])
@swag_from('swagger/classify.yml')
def route_classify():
req_dict = request.get_json()

try:
classification = text_classify(req_dict['text'])
except KeyError:
return jsonify({'Error': 'Corpo da requisição inválido'}), 400

return jsonify({'classification': classification})
6 changes: 6 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@ services:
FLASK_DEBUG: 1
volumes:
- .:/api
networks:
- lion

networks:
lion:
driver: bridge
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@ opencv-python-headless
gunicorn
cmake
dlib
face_recognition
face_recognition
pandas
flask-cors

0 comments on commit e5c17a2

Please sign in to comment.