public function actionUpload() { $candidateID = intval($_POST['candidateID']); $Candidate = Candidates::findOne($candidateID); if (!$Candidate) { echo 0; die; } $finalDir = '/home/ubuntu/workspace/basic/uploads/' . $Candidate->id; if (!is_dir($finalDir)) { mkdir($finalDir); } $CandidatesFiles = new CandidatesFiles(); $CandidatesFiles->candidate_id = $Candidate->id; $CandidatesFiles->original_filename = basename($_FILES['uploadedFile']['name']); $CandidatesFiles->server_filename = time() . "_" . $CandidatesFiles->original_filename; if (move_uploaded_file($_FILES['uploadedFile']['tmp_name'], $finalDir . "/" . $CandidatesFiles->server_filename)) { // HP Store object $fileUrl = Url::to('@web/uploads/' . $Candidate->id . '/' . $CandidatesFiles->server_filename, true); $CandidatesFiles->hp_reference_id = Yii::$app->HpApi->storeObject($fileUrl); $CandidatesFiles->save(); // Resumes object $Resumes = new Resumes(); $Resumes->candidate_file_id = $CandidatesFiles->id; // HP OCR $Resumes->hp_job_id = Yii::$app->HpApi->ocrDocument($CandidatesFiles->hp_reference_id); $Resumes->save(); // Resumes faces object $ResumesFaces = new ResumesFaces(); $ResumesFaces->resume_id = $Resumes->id; // HP Face Detection $ResumesFaces->hp_job_id = Yii::$app->HpApi->faceDetection($CandidatesFiles->hp_reference_id); $ResumesFaces->save(); echo 1; } else { echo 0; } }
public function getFaceStatus() { $resumeFacesModel = ResumesFaces::find()->where(array('finished_time' => null))->orderBy('id asc')->one(); if ($resumeFacesModel) { $hpStatus = Yii::$app->HpApi->getStatus($resumeFacesModel->hp_job_id); if ($hpStatus['status'] == 'finished') { $faceArray = $hpStatus['actions'][0]['result']['face']; if (count($faceArray) > 1) { $faceSizeArray = array(); for ($ctr = 0; count($faceArray) > $ctr; $ctr++) { $faceSizeArray[$ctr] = $faceArray[$ctr]['width'] * $faceArray[$ctr]['height']; } $faceIndex = array_keys($faceSizeArray, max($faceSizeArray)); $face = $faceArray[$faceIndex[0]]; } else { $face = $faceArray[0]; } $resumeFacesModel->top_position = $face['top']; $resumeFacesModel->left_position = $face['left']; $resumeFacesModel->width = $face['width']; $resumeFacesModel->height = $face['height']; $resumeFacesModel->finished_time = new Expression('NOW()'); if ($face) { try { // Crop the image $imageFilename = $resumeFacesModel->resumes->candidatesFiles->server_filename; $imageFullPath = '/home/ubuntu/workspace/basic/uploads/' . $resumeFacesModel->resumes->candidatesFiles->candidate_id; // Create image instances $src = imagecreatefromjpeg($imageFullPath . '/' . $imageFilename); $dest = imagecreatetruecolor($face['width'], $face['height']); // Copy imagecopy($dest, $src, 0, 0, $face['left'], $face['top'], $face['width'], $face['height']); // Output and free from memory header('Content-Type: image/gif'); imagejpeg($dest, $imageFullPath . '/crop_' . $imageFilename); imagedestroy($dest); imagedestroy($src); $resumeFacesModel->save(); } catch (Exception $exc) { var_dump($face); } } } } }
public function getResumesFaces() { return $this->hasOne(ResumesFaces::className(), ['resume_id' => 'id']); }