From be3957746698b0407156abfe494fbec7cab6815f Mon Sep 17 00:00:00 2001 From: James Collins Date: Sun, 5 Feb 2023 11:35:21 +1000 Subject: [PATCH] added OCR support --- app/Http/Controllers/Api/OCRController.php | 78 ++++++++++++++++++++++ routes/api.php | 8 ++- 2 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/Api/OCRController.php diff --git a/app/Http/Controllers/Api/OCRController.php b/app/Http/Controllers/Api/OCRController.php new file mode 100644 index 0000000..fd27ea2 --- /dev/null +++ b/app/Http/Controllers/Api/OCRController.php @@ -0,0 +1,78 @@ +middleware('auth:sanctum') + // ->only(['show']); + } + + /** + * Display the specified resource. + * + * @param Request $request The log request. + * @param string $name The log name. + * @return \Illuminate\Http\Response + */ + public function show(Request $request, string $name) + { + // if ($request->user()?->hasPermission('logs/' . $name) === true) { + $url = $request->get('url'); + if ($url !== null) { + $tmpfname = tempnam(sys_get_temp_dir(), 'download'); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + $data = curl_exec($ch); + curl_close($ch); + + file_put_contents($tmpfname, $data); + + $ocr = new TesseractOCR(); + $ocr->image($tmpfname); + $result = $ocr->run(500); + + unlink($tmpfname); + + return $this->respondJson([ + 'ocr' => $result + ]); + }//end if + + return $this->respondWithErrors(['url' => 'url is missing']); + } + + + // $ffmpeg = FFMpeg\FFMpeg::create(); + + // // Load the input video + // $inputFile = $ffmpeg->open('input.mp4'); + + // // Split the video into individual frames + // $videoFrames = $inputFile->frames(); + // foreach ($videoFrames as $frame) { + // // Save the frame as a PNG + // $frame->save(new FFMpeg\Format\Video\PNG(), 'frame-' . $frame->getMetadata('pts') . '.png'); + + // // Pass the PNG to Tesseract for processing + // exec("tesseract frame-" . $frame->getMetadata('pts') . ".png output"); + // } + + // // Read the output from Tesseract + // $text = file_get_contents("output.txt"); + + // // Do something with the text from Tesseract + // echo $text; +} diff --git a/routes/api.php b/routes/api.php index 85ff6db..75be01a 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,13 +2,14 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\Api\AuthController; -use App\Http\Controllers\Api\UserController; -use App\Http\Controllers\Api\PostController; +use App\Http\Controllers\Api\ContactController; use App\Http\Controllers\Api\EventController; use App\Http\Controllers\Api\LogController; use App\Http\Controllers\Api\MediaController; -use App\Http\Controllers\Api\ContactController; +use App\Http\Controllers\Api\OCRController; +use App\Http\Controllers\Api\PostController; use App\Http\Controllers\Api\SubscriptionController; +use App\Http\Controllers\Api\UserController; /* |-------------------------------------------------------------------------- @@ -44,6 +45,7 @@ Route::delete('subscriptions', [SubscriptionController::class, 'destroyByEmail'] Route::post('/contact', [ContactController::class, 'send']); Route::get('/logs/{name}', [LogController::class, 'show']); +Route::get('/ocr', [OCRController::class, 'show']); Route::middleware('auth:sanctum')->group(function () { Route::post('/logout', [AuthController::class, 'logout']);