Server : LiteSpeed System : Linux server 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : alsaif ( 1057) PHP Version : 7.4.33 Disable Function : show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/alsaif/public_html/plugins/system/nrframework/NRFramework/AI/TextGeneration/ |
<?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
];
}
}