This commit is contained in:
2024-12-31 11:07:09 +01:00
parent df7915205d
commit e089172b15
1916 changed files with 165422 additions and 271 deletions

View File

@ -0,0 +1,108 @@
<?php
/**
* @author Tassos Marinos <info@tassos.gr>
* @link https://www.tassos.gr
* @copyright Copyright © 2024 Tassos All Rights Reserved
* @license GNU GPLv3 <http://www.gnu.org/licenses/gpl.html> or later
*/
namespace NRFramework\AI\TextGeneration;
defined('_JEXEC') or die;
use Joomla\CMS\Http\HttpFactory;
class ImageToText
{
/**
* Generate a caption for an image
*
* @param string $imageUrl
*
* @return array
*/
public function generate($imageUrl = '')
{
if (!$imageUrl)
{
return [
'error' => true,
'message' => 'Image URL is required',
];
}
$apiKey = \NRFramework\Helpers\Settings::getValue('openai_api_key');
$apiEndpoint = 'https://api.openai.com/v1/chat/completions';
// Disable SSL verification for local files
$context = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
$imageData = base64_encode(file_get_contents($imageUrl, false, $context));
$url = "data:image/jpeg;base64,{$imageData}";
$data = [
'model' => 'gpt-4o-mini',
'messages' => [
[
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => 'Describe this image with maximum 120 characters, spaces included.'
],
[
'type' => 'image_url',
'image_url' => [
'url' => $url,
],
],
],
],
],
'max_tokens' => 50,
];
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $apiKey,
];
$error = false;
$message = '';
try {
$http = HttpFactory::getHttp();
$response = $http->post($apiEndpoint, json_encode($data), $headers);
if ($response->code == 200)
{
$result = json_decode($response->body);
$message = $result->choices[0]->message->content;
}
else
{
$error = true;
$decodedResponse = json_decode($response->body, true);
$message = isset($decodedResponse['error']['message']) ? $decodedResponse['error']['message'] : 'An error occurred while generating the caption.';
}
}
catch (\Exception $e)
{
$error = true;
$message = "Error: " . $e->getMessage();
}
return [
'error' => $error,
'message' => $message
];
}
}