Utiliser GPT-4 Turbo avec Vision
GPT-4 Turbo avec Vision est un grand modèle multimodal (LMM) développé par OpenAI qui peut analyser des images et fournir des réponses textuelles à des questions les concernant. Il intègre à la fois le traitement du langage naturel et la compréhension visuelle.
Le modèle GPT-4 Turbo avec Vision répond à des questions générales sur ce qui est présent dans des images.
Conseil
Pour utiliser GPT-4 Turbo avec Vision, vous appelez l'API de saisie semi-automatique de conversation sur un modèle GPT-4 Turbo avec Vision que vous avez déployé. Si vous n’êtes pas familiarisé avec l’API Complétion de conversation, consultez le Guide pratique de GPT-4 Turbo et GPT-4.
Mise à niveau d’un modèle GPT-4 Turbo
La dernière version en disponibilité générale de GPT-4 Turbo est :
gpt-4
Version :turbo-2024-04-09
Il s’agit du remplacement des modèles en préversion suivants :
gpt-4
Version :1106-Preview
gpt-4
Version :0125-Preview
gpt-4
Version :vision-preview
Différences entre les modèles OpenAI et OpenAI GPT-4 Turbo GA
- La version d’OpenAI du dernier modèle
0409
Turbo prend en charge le mode JSON et l’appel de fonction pour toutes les requêtes d’inférence. - La version d’Azure OpenAI du dernier
turbo-2024-04-09
ne prend actuellement pas en charge l’utilisation du mode JSON et l’appel de fonction lors de l’exécution de requêtes d’inférence avec une entrée d’image (vision). Les requêtes d’entrée basées sur du texte (requêtes sansimage_url
et images incluses) prennent par contre en charge le mode JSON et l’appel de fonction.
Différences par rapport à gpt-4 vision-preview
- L’intégration des améliorations de Vision propres à Azure AI à GPT-4 Turbo avec Vision n’est pas prise en charge pour
gpt-4
Version :turbo-2024-04-09
. Cela inclut la reconnaissance optique de caractères (OCR), l’ancrage d’objets, les invites vidéo et la gestion améliorée de vos données avec des images.
Important
Les fonctionnalités en préversion des améliorations de Vision, notamment la reconnaissance optique de caractères (OCR), la mise au sol des objets, les invites vidéo, seront supprimées et ne seront plus disponibles une fois la version gpt-4
: vision-preview
mise à niveau vers turbo-2024-04-09
. Si vous utilisez actuellement l’une de ces fonctionnalités en préversion, cette mise à niveau automatique du modèle sera un changement cassant.
Disponibilité managée approvisionnée de GPT-4 Turbo
gpt-4
Version :turbo-2024-04-09
est disponible pour les déploiements standard et approvisionnés. Actuellement, la version approvisionnée de ce modèle ne prend pas en charge les requêtes d’inférence d’image/vision. Les déploiements approvisionnés de ce modèle acceptent uniquement les entrées de texte. Les déploiements de modèles standard acceptent les requêtes d’inférence de texte et d’image/vision.
Déploiement de la disponibilité générale de GPT-4 Turbo avec Vision
Pour déployer le modèle en disponibilité générale à partir de l’interface utilisateur Studio, sélectionnez GPT-4
, puis choisissez la version turbo-2024-04-09
du menu de la liste déroulante. Le quota par défaut pour le modèle gpt-4-turbo-2024-04-09
est le même que le quota actuel pour GPT-4-Turbo. Voir les limites de quota régionales.
Appeler les API de saisie semi-automatique de conversation
La commande suivante montre la manière la plus élémentaire d'utiliser le modèle GPT-4 Turbo avec Vision avec du code. Si c’est la première fois que vous utilisez ces modèles programmatiquement, nous vous recommandons de commencer par notre guide Démarrage rapide avec GPT-4 Turbo avec Vision.
Envoyez une requête POST à https://{RESOURCE_NAME}.openai.azure.com/openai/deployments/{DEPLOYMENT_NAME}/chat/completions?api-version=2024-02-15-preview
où
- RESOURCE_NAME est le nom de votre ressource Azure OpenAI
- DEPLOYMENT_NAME est le nom de votre modèle de déploiement GPT-4 Turbo avec Vision
En-têtes obligatoires :
Content-Type
: application/jsonapi-key
: {API_KEY}
Corps : voici un exemple de corps de la requête. Le format est le même que celui de l'API de saisie semi-automatique de conversation pour GPT-4, sauf que le contenu du message peut être un tableau contenant du texte et des images (soit une URL HTTP ou HTTPS valide vers une image, soit une image encodée en base 64).
Important
N’oubliez pas de définir une valeur "max_tokens"
, ou la sortie de retour sera coupée.
Important
Lors du chargement d’images, il existe une limite de 10 images par demande de conversation.
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this picture:"
},
{
"type": "image_url",
"image_url": {
"url": "<image URL>"
}
}
]
}
],
"max_tokens": 100,
"stream": false
}
Conseil
Utiliser une image locale
Si vous souhaitez utiliser une image locale, vous pouvez utiliser le code Python suivant pour la convertir en base64 afin qu’elle puisse être transmise à l’API. D’autres outils de conversion de fichiers sont disponibles en ligne.
import base64
from mimetypes import guess_type
# Function to encode a local image into data URL
def local_image_to_data_url(image_path):
# Guess the MIME type of the image based on the file extension
mime_type, _ = guess_type(image_path)
if mime_type is None:
mime_type = 'application/octet-stream' # Default MIME type if none is found
# Read and encode the image file
with open(image_path, "rb") as image_file:
base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')
# Construct the data URL
return f"data:{mime_type};base64,{base64_encoded_data}"
# Example usage
image_path = '<path_to_image>'
data_url = local_image_to_data_url(image_path)
print("Data URL:", data_url)
Lorsque vos données d’image base64 sont prêtes, vous pouvez les transmettre à l’API dans le corps de la requête comme suit :
...
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<your_image_data>"
}
...
Sortie
La réponse de l’API doit ressembler à ce qui suit.
{
"id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
"object": "chat.completion",
"created": 1702439277,
"model": "gpt-4",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"choices": [
{
"finish_reason":"stop",
"index": 0,
"message": {
"role": "assistant",
"content": "The picture shows an individual dressed in formal attire, which includes a black tuxedo with a black bow tie. There is an American flag on the left lapel of the individual's jacket. The background is predominantly blue with white text that reads \"THE KENNEDY PROFILE IN COURAGE AWARD\" and there are also visible elements of the flag of the United States placed behind the individual."
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"usage": {
"prompt_tokens": 1156,
"completion_tokens": 80,
"total_tokens": 1236
}
}
Chaque réponse inclut un champ "finish_reason"
. Il contient les valeurs possibles suivantes :
stop
: l’API a retourné la sortie complète du modèle.length
: sortie de modèle incomplète en raison du paramètre d’entréemax_tokens
ou de la limite de jetons du modèle.content_filter
: contenu omis en raison d’un indicateur de nos filtres de contenu.
Paramètres de détail dans le traitement d’images : Low, High, Auto
Le paramètre detail du modèle offre trois choix : low
, high
ou auto
, pour ajuster la façon dont le modèle interprète et traite les images. Le paramètre par défaut est auto ; le modèle décide alors entre low ou high en fonction de la taille de l’entrée d’image.
- Paramètre
low
: le modèle n’active pas le mode « résolution élevée ». Au lieu de cela, il traite une version de résolution inférieure 512x512, ce qui entraîne des réponses plus rapides et une consommation de jeton réduite pour les scénarios où des détails précis ne sont pas essentiels. - Paramètre
high
: le modèle active le mode « résolution élevée ». Ici, le modèle affiche initialement l’image à faible résolution, puis il génère des segments détaillés 512x512 à partir de l’image d’entrée. Chaque segment utilise deux fois le budget du jeton, ce qui permet une interprétation plus détaillée de l’image.
Pour plus d’informations sur l’impact des paramètres d’image sur les jetons utilisés et les tarifs, consultez Qu’est-ce qu’Azure OpenAI ? Jetons d’image
Sortie
Les réponses au chat que vous recevez du modèle devraient maintenant inclure des informations améliorées sur l'image, telles que les étiquettes d'objet et les cadres englobants, ainsi que les résultats de l'OCR. La réponse de l’API doit ressembler à ce qui suit.
{
"id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
"object": "chat.completion",
"created": 1702394683,
"model": "gpt-4",
"choices":
[
{
"finish_reason": {
"type": "stop",
"stop": "<|fim_suffix|>"
},
"index": 0,
"message":
{
"role": "assistant",
"content": "The image shows a close-up of an individual with dark hair and what appears to be a short haircut. The person has visible ears and a bit of their neckline. The background is a neutral light color, providing a contrast to the dark hair."
}
}
],
"usage":
{
"prompt_tokens": 816,
"completion_tokens": 49,
"total_tokens": 865
}
}
Chaque réponse inclut un champ "finish_reason"
. Il contient les valeurs possibles suivantes :
stop
: l’API a retourné la sortie complète du modèle.length
: sortie de modèle incomplète en raison du paramètre d’entréemax_tokens
ou de la limite de jetons du modèle.content_filter
: contenu omis en raison d’un indicateur de nos filtres de contenu.
Créer un index de récupération vidéo
Obtenez une ressource Azure AI Vision dans la même région que la ressource Azure OpenAI que vous utilisez.
Créez un index où stocker et organiser les fichiers vidéo et leurs métadonnées. L’exemple de commande ci-dessous illustre la création d’un index nommé
my-video-index
à l’aide de l’API Créer un index. Notez le nom de l’index à un emplacement temporaire, car vous en aurez besoin dans des étapes ultérieures.Conseil
Pour obtenir des instructions plus détaillées sur la création d’un index vidéo, consultez Effectuer une récupération vidéo en utilisant la vectorisation.
Important
Un nom d’index vidéo peut comporter jusqu’à 24 caractères, sauf s’il s’agit d’un GUID, qui peut être de 36 caractères.
curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii " { 'metadataSchema': { 'fields': [ { 'name': 'cameraId', 'searchable': false, 'filterable': true, 'type': 'string' }, { 'name': 'timestamp', 'searchable': false, 'filterable': true, 'type': 'datetime' } ] }, 'features': [ { 'name': 'vision', 'domain': 'surveillance' }, { 'name': 'speech' } ] }"
Ajoutez des fichiers vidéo à l’index, avec leurs métadonnées associées. L’exemple ci-dessous montre comment ajouter deux fichiers vidéo à l’index en utilisant des URL SAS avec l’API Créer une ingestion. Notez les URL SAS et les valeurs
documentId
à un emplacement temporaire, car vous en aurez besoin dans des étapes ultérieures.curl.exe -v -X PUT "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions/my-ingestion?api-version=2023-05-01-preview" -H "Ocp-Apim-Subscription-Key: <YOUR_SUBSCRIPTION_KEY>" -H "Content-Type: application/json" --data-ascii " { 'videos': [ { 'mode': 'add', 'documentId': '02a504c9cd28296a8b74394ed7488045', 'documentUrl': 'https://example.blob.core.windows.net/videos/02a504c9cd28296a8b74394ed7488045.mp4?sas_token_here', 'metadata': { 'cameraId': 'camera1', 'timestamp': '2023-06-30 17:40:33' } }, { 'mode': 'add', 'documentId': '043ad56daad86cdaa6e493aa11ebdab3', 'documentUrl': '[https://example.blob.core.windows.net/videos/043ad56daad86cdaa6e493aa11ebdab3.mp4?sas_token_here', 'metadata': { 'cameraId': 'camera2' } } ] }"
Une fois que vous avez ajouté des fichiers vidéo à l’index, le processus d’ingestion démarre. Cela peut prendre un certain temps selon la taille et le nombre de fichiers. Pour vérifier que l’ingestion est terminée avant d’effectuer des recherches, vous pouvez utiliser l’API Obtenir une ingestion pour vérifier l’état. Attendez que cet appel renvoie
"state" = "Completed"
avant de passer à l’étape suivante.curl.exe -v -X GET "https://<YOUR_ENDPOINT_URL>/computervision/retrieval/indexes/my-video-index/ingestions?api-version=2023-05-01-preview&$top=20" -H "ocp-apim-subscription-key: <YOUR_SUBSCRIPTION_KEY>"