- Implemented `licensePlateRecognizer` module with configuration classes (`enabled`, `api_key`) and API handling. - Introduced `moduleConfigRoute` endpoints for fetching and updating `licensePlateRecognizer` configurations. - Added `vehicleProductSuggestionRoute` with logic to fetch product suggestions based on vehicle plates. - Extended `moduleScannerRoute` with license plate recognition test and exception handling. - Updated `index.php` to include `licensePlateRecognizer` class.
116 lines
4.7 KiB
PHP
116 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace routes;
|
|
|
|
use classes\authentication;
|
|
use classes\image_processor;
|
|
use classes\licenseplaterecognizer;
|
|
use classes\openai;
|
|
use classes\response;
|
|
use classes\router;
|
|
use classes\upload_store;
|
|
use Exception;
|
|
use objects\logs_o;
|
|
use traits\route_t;
|
|
|
|
class moduleScannerRoute
|
|
{
|
|
use route_t;
|
|
|
|
public function run(): void
|
|
{
|
|
global /** @var response $response */
|
|
$router, $response;
|
|
/** Modules > Scanner > test > GET */
|
|
$this->get('/modules/scanner/test', function () {
|
|
global $response;
|
|
$base64_image = '';
|
|
// CREATE FILE READY TO UPLOAD WITH CURL
|
|
$file = realpath('example.jpg');
|
|
if (function_exists('curl_file_create')) { // php 5.5+
|
|
$cFile = curl_file_create($file);
|
|
} else {
|
|
$cFile = '@' . realpath($file);
|
|
}
|
|
|
|
//ADD PARAMETER IN REQUEST LIKE regions
|
|
$data = array(
|
|
'upload' => $cFile,
|
|
'regions' => 'us-ca' // Optional
|
|
);
|
|
|
|
// Prepare new cURL resource
|
|
$ch = curl_init('https://api.platerecognizer.com/v1/plate-reader/');
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
|
|
|
|
// Set HTTP Header for POST request
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
|
"Authorization: Token d7fff863b815cde9fe3f83d687290399ef4854f4", // TODO: Move to settings or environment variable.
|
|
)
|
|
);
|
|
|
|
// Submit the POST request and close cURL session handle
|
|
$result = curl_exec($ch);
|
|
print_r($result);exit;
|
|
curl_close($ch);
|
|
$response->success('Scanner module test executed successfully.');
|
|
},
|
|
[
|
|
'modules_scanner_test' => 'Test the scanner module',
|
|
]
|
|
);
|
|
/** Modules > Scanner > License Plate Recognition > POST */
|
|
$this->post('/modules/scanner/lpr', function () {
|
|
global $response;
|
|
self::requireParameters(['base64_image']);
|
|
$base64_image = self::getParameter('base64_image');
|
|
//self::requirePermission('modules_scanner_lpr');
|
|
if (empty($base64_image)) {
|
|
$response->error('Base64 image is required.');}
|
|
$uploads = new upload_store();
|
|
$object_name = $uploads->storeTempImageFromBase64(
|
|
$base64_image
|
|
);
|
|
//echo $object_name;
|
|
//echo "License Plate Recognition result:\n";
|
|
// Uncomment the line below to use the actual license plate recognizer.
|
|
$lpr_result = (new licenseplaterecognizer())->licenseplaterecognizer($base64_image);
|
|
if ($lpr_result['success']) {
|
|
// Set the LICENSE_PLATE_NUMBER to uppercase and remove spaces.
|
|
$lpr_result['license_plate_number'] = strtoupper(str_replace(' ', '', $lpr_result['license_plate_number']));
|
|
// If the confidence is below 90%, consider it a failure.
|
|
if (isset($lpr_result['confidence']) && $lpr_result['confidence'] < 0.9) {
|
|
throw new Exception('License plate recognition confidence too low. Score: ' . $lpr_result['confidence'] . ' Plate: ' . $lpr_result['license_plate_number'] . ' Raw: ' . json_encode($lpr_result['raw_response']));
|
|
}
|
|
// Success
|
|
$response->success(['success' => true, 'license_plate_number' => $lpr_result['license_plate_number']]);
|
|
} else {
|
|
throw new Exception('License plate extraction failed.');
|
|
//$response->error($lpr_result['message'] ?? 'License plate recognition failed.', $lpr_result);
|
|
}
|
|
exit;
|
|
// For debugging purposes, we will simulate recognized license plates.
|
|
$openai = new openai();
|
|
$registration_numbers_debug = [
|
|
'EC21233',
|
|
'EC21234',
|
|
'EC21235',
|
|
];
|
|
$random_index = rand(0, count($registration_numbers_debug) - 1);
|
|
$object_name = $registration_numbers_debug[$random_index];
|
|
// Attempt to recognize the license plate number from the image.
|
|
|
|
//Debug: TODO: Remove this.
|
|
$response->success(['success' => true, 'license_plate_number' => $object_name]);
|
|
$response->success($openai->lpr($object_name));
|
|
},
|
|
[
|
|
'modules_scanner_lpr' => 'License Plate Recognition',
|
|
]
|
|
);
|
|
}
|
|
} |