<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\SwiftmailerBundle;
use Google\Cloud\Vision\VisionClient;
use App\Utils\FaceDetect;
use Symfony\Component\HttpFoundation\JsonResponse;
class PrivateController extends AbstractController
{
/**
* @Route("/private", name="private")
*/
public function index()
{
$user = $this->get('security.token_storage')->getToken()->getUser();
return $this->render('private/index.html.twig', [
'controller_name' => 'PrivateController',
]);
}
/**
* @Route("/private/dashboard", name="priv_homepage_dashboard")
*/
public function indexdashAction(Request $request){
// dependiendo del usuario
$user = $this->get('security.token_storage')->getToken()->getUser();
$session=$request->getSession();
/*
if ($user->getCanPartner()){
return $this->redirectToRoute('priv_index_partners');
} else if ($user->getCanPreinscriptor()) {
if ($session->get('modopartner')==1){
return $this->redirectToRoute('priv_index_partners');
}else {
return $this->redirectToRoute('priv_index_preinscriptor');
}
}
/* if ($this->initVariablesAction($request)){
if ($user->getCanPartner()){
return $this->redirectToRoute('priv_index_partners');
}else{
return $this->redirectToRoute('priv_index_clients');
}
} */
return $this->render('default/index.html.twig', [
'controller_name' => 'DefaultController',
]);
}
/**
* @Route("/private/capture/doc", name="priv_capture_doc")
*/
public function captureDocAction(Request $request){
return $this->render('private/captureDoc.html.twig', [
]);
}
/**
* @Route("/private/compare/face", name="priv_compare_face")
*/
public function compareFaceAction(Request $request){
$decodedfailed=$request->query->get("decodedfailed");
$msg=$request->query->get("msg");
if($decodedfailed!='' && $decodedfailed!=null){
if ($decodedfailed){
return $this->render('private/compareFaces.html.twig', ['failed'=>1,'msg'=>$msg
]);
}
}
return $this->render('private/compareFaces.html.twig', ['failed'=>0
]);
}
/**
* @Route("/private/real/detection", name="priv_reale_time")
*/
public function tensorFlowAction(Request $request){
$root=$this->getParameter("config_directory");
$models=$this->getParameter("pathModels");
return $this->render('tensorFlow/index.html.twig', ['pathModels'=>$root.$models
]);
}
/**
* @Route("/private/index", name="priv_index")
*/
public function indexAction(Request $request){
$decodedfailed=$request->query->get("decodedfailed");
$msg=$request->query->get("msg");
if($decodedfailed!='' && $decodedfailed!=null){
if ($decodedfailed){
return $this->render('private/indexDoc.html.twig', ['failed'=>1,'msg'=>$msg
]);
}
}
return $this->render('private/indexDoc.html.twig', ['failed'=>0
]);
}
/**
* @Route("/private/extraction", name="priv_extraction")
*/
public function extractionAction(Request $request){
$em = $this->getDoctrine()->getManager();
$path=$this->getParameter('config_directory');
$vision = new VisionClient(['keyFile' => json_decode(file_get_contents($this->getParameter("config_directory").$this->getParameter("visual_key")), true)]);
$file1 = $request->files->get('image_original1');
$file2 = $request->files->get('image_original2');
$typeDoc= $request->request->get('typeDoc');
if ($typeDoc==0){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true, 'msg' => 'Seleccione el tipo de documento'));
}
/* $imgdata4=base64_decode($image4);
file_put_contents(__DIR__ . '/feed/' . $imagetoken_BN. ".png", $imgdata1); */
if ($file1!='' && $file1!=null && $file2!='' && $file2!=null && ($typeDoc==1 || $typeDoc==2)){
$imagetoken1 = random_int(1111111, 999999999);
$file1->move("uploads/feed",$imagetoken1.'.jpg');
$imagetoken2 = random_int(1111111, 999999999);
$file2->move("uploads/feed",$imagetoken2.'.jpg');
}else if ($file1!='' && $file1!=null && ($typeDoc==3 || $typeDoc==4)) {
$imagetoken1 = random_int(1111111, 999999999);
$file1->move("uploads/feed",$imagetoken1.'.jpg');
}else {
$file1 = $request->request->get('image1');
$file2 = $request->request->get('image2');
$imagetoken1 = random_int(1111111, 999999999);
$imagetoken2 = random_int(1111111, 999999999);
$imgdata1=base64_decode($file1);
$imgdata2=base64_decode($file2);
if ($imgdata1=='' || $imgdata2==''){
if ($typeDoc==1 || $typeDoc==2){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true, 'msg' => 'Suba las dos caras del documento por favor'));
}else {
if ($typeDoc==3 && $imgdata1==''){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true, 'msg' => 'Suba el anverso del pasaporte'));
}
}
}
// echo $path."/public/uploads/feed/"; die;
file_put_contents($path."/public/uploads/feed/". $imagetoken1. ".jpg", $imgdata1);
file_put_contents($path."/public/uploads/feed/". $imagetoken2. ".jpg", $imgdata2);
}
if (isset($imagetoken1)){
$anverso_path=$path."/public/uploads/feed/".$imagetoken1.'.jpg';
}
if (isset($imagetoken2)){
$reverso_path=$path."/public/uploads/feed/".$imagetoken2.'.jpg';
}
if ($typeDoc==1 || $typeDoc==2) {
$imagen= imageProcessing::resizeImageAction('',$anverso_path);
$imagen2= imageProcessing::resizeImageAction('',$reverso_path);
$familyPhotoResource=fopen($imagen, 'r');
$image = $vision->image($familyPhotoResource,
['FACE_DETECTION',
'IMAGE_PROPERTIES',
'LANDMARK_DETECTION',
'TEXT_DETECTION'
]);
$result = $vision->annotate($image);
$faces = $result->faces();
$text = $result->text();
$properties = $result->imageProperties();
//var_dump($result);die;
$familyPhotoResource2=fopen($imagen2, 'r');
$image = $vision->image($familyPhotoResource2,
['IMAGE_PROPERTIES',
'LANDMARK_DETECTION',
'TEXT_DETECTION'
]);
$result2 = $vision->annotate($image);
$labels2 = $result2->labels();
$text2 = $result2->text();
$fullText2 = $result2->fullText();
$landmarks2 = $result2->landmarks();
if ($text[0]=='' || $text[0]==null || $text2[0]=='' || $text2[0]==null){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true));
}else {
$decoded=true;
}
$cadenaFront=$text[0]->info()['description'];
$cadenaBack=$text2[0]->info()['description'];
/*
echo $cadenaFront.'<br>';
echo $cadenaBack.'<br>';
*/
$completeText=imageProcessing::decodeTextCompleteAction($text, $text2,$typeDoc,$em);
if ($completeText['typeDoc']==''){
$decoded=false;
}else {
$decoded=true;
}
$faceImage=imageProcessing::getFaceAction($faces, $imagen);
$img=file_get_contents($path.$faceImage);
$faceImageEncoded= base64_encode($img);
$img1=file_get_contents($imagen);
$image1_64=base64_encode($img1);
$img2=file_get_contents($imagen2);
$image2_64=base64_encode($img2);
$propieties=imageProcessing::getPropietiesAction($properties);
}else if ($typeDoc==3){
$imagen= imageProcessing::resizeImageAction('',$anverso_path);
$familyPhotoResource=fopen($imagen, 'r');
$image = $vision->image($familyPhotoResource,
['FACE_DETECTION',
'IMAGE_PROPERTIES',
'LANDMARK_DETECTION',
'TEXT_DETECTION'
]);
$result = $vision->annotate($image);
$faces = $result->faces();
$text = $result->text();
$properties = $result->imageProperties();
//var_dump($result);die;
if ($text[0]=='' || $text[0]==null){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true));
}else {
$decoded=true;
}
$cadenaFront=$text[0]->info()['description'];
/*
echo $cadenaFront.'<br>';
echo $cadenaBack.'<br>';
*/
$completeText=imageProcessing::decodeTextCompleteAction($text,'', $typeDoc,$em);
// $completeText=imageProcessing::decodeTextCompleteAction($text, '', $typeDoc);
$faceImage=imageProcessing::getFaceAction($faces, $imagen);
$img=file_get_contents($path.$faceImage);
$faceImageEncoded= base64_encode($img);
$img1=file_get_contents($imagen);
$image1_64=base64_encode($img1);
$propieties=imageProcessing::getPropietiesAction($properties);
}else if ($typeDoc==4){
// Carta Verde
$imagen= imageProcessing::resizeImageAction('',$anverso_path);
$familyPhotoResource=fopen($imagen, 'r');
$image = $vision->image($familyPhotoResource,
[
'IMAGE_PROPERTIES',
'TEXT_DETECTION'
]);
$result = $vision->annotate($image);
$text = $result->text();
// var_dump($text[0]); die;
$fullText = $result->fullText();
$properties = $result->imageProperties();
if ($text[0]=='' || $text[0]==null){
return $this->redirectToRoute('priv_index', array('decodedfailed' => true));
}else {
$decoded=true;
}
ob_start();
$completeText=imageProcessing::decodeTextCompleteAction($text, '', $typeDoc, $em);
ob_end_clean();
$img1=file_get_contents($imagen);
$image1_64=base64_encode($img1);
$propieties=imageProcessing::getPropietiesAction($properties);
}
/*
if ($completeText['typeDoc']==''){
$decoded=false;
}else {
$decoded=true;
}
$faceImage=imageProcessing::getFaceAction($faces, $imagen);
$img=file_get_contents($path.$faceImage);
$faceImageEncoded= base64_encode($img);
$img1=file_get_contents($imagen);
$image1_64=base64_encode($img1);
$img2=file_get_contents($imagen2);
$image2_64=base64_encode($img2);
$propieties=imageProcessing::getPropietiesAction($properties);
*/
if ($decoded){
if ($typeDoc==1 || $typeDoc==2) {
return $this->render('private/resultExtraction.html.twig', ['propieties'=>$propieties,'face'=>$faceImageEncoded,'faces'=>$faces,'text'=>$completeText,'image1'=>$image1_64,
'image2'=>$image2_64
]);
}else if ($typeDoc==3) {
return $this->render('private/resultExtractionPassport.html.twig', ['propieties'=>$propieties,'face'=>$faceImageEncoded,'faces'=>$faces,'text'=>$completeText,'image1'=>$image1_64
]);
}else if ($typeDoc==4) {
return $this->render('private/resultExtractionCartaVerde.html.twig', ['propieties'=>$propieties,'text'=>$completeText,'image1'=>$image1_64
]);
}
}else {
return $this->redirectToRoute('priv_index', array('decodedfailed' => true, 'msg' => 'Error decode files'));
}
}
/**
* @Route("/private/face/compare", name="private_face_compare")
*/
public function faceCompAction(Request $request)
{
$body = $request->getContent();
$data = json_decode($body, true);
$image1=$request->request->get('image1','');
$image2=$request->request->get('image2','');
if ($image1!='' && $image2!='') {
$path=$this->getParameter('config_directory');
$imagetoken1 = random_int(1111111, 999999999);
$imagetoken2 = random_int(1111111, 999999999);
$imgdata1=base64_decode($image1);
$imgdata2=base64_decode($image2);
file_put_contents($path. '/public/ocrImages/' . $imagetoken1. ".jpg", $imgdata1);
file_put_contents($path. '/public/ocrImages/' . $imagetoken2. ".jpg", $imgdata2);
$url1=$this->getParameter('urlToView').$imagetoken1. ".jpg";
$url2=$this->getParameter('urlToView').$imagetoken2. ".jpg";
$res=FaceDetect::faceCompare2($url1, $url2);
$res=json_decode($res,true);
if (!empty($res['error_message'])){
$result['error']='Algo ha ido mal';
$result['state']='ko';
$result_json=json_encode($result);
gc_collect_cycles();
unlink($path. '/public/ocrImages/' . $imagetoken1. ".jpg");
unlink($path. '/public/ocrImages/' . $imagetoken2. ".jpg");
return new JsonResponse($result_json);
}else {
if (!empty($res['confidence'])){
$result['confidence']=$res['confidence'];
$result['state']='ok';
$result_json=json_encode($result);
}else {
$result['state']='ko';
$result['error']='No face detected on one or both images';
$result_json=json_encode($result);
}
// Borrar las imagenes
gc_collect_cycles();
unlink($path. '/public/ocrImages/' . $imagetoken1. ".jpg");
unlink($path. '/public/ocrImages/' . $imagetoken2. ".jpg");
return new JsonResponse($result_json);
}
}else{
// Sin imagenes
$result['state']='ko';
$result['error']='No images recivied';
$result_json=json_encode($result);
return new JsonResponse($result_json);
}
}
}