Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Cómputo
Elastic Cloud Server
Bare Metal Server
Auto Scaling
Image Management Service
Dedicated Host
FunctionGraph
Cloud Phone Host
Huawei Cloud EulerOS
Redes
Virtual Private Cloud
Elastic IP
Elastic Load Balance
NAT Gateway
Direct Connect
Virtual Private Network
VPC Endpoint
Cloud Connect
Enterprise Router
Enterprise Switch
Global Accelerator
Gestión y gobernanza
Cloud Eye
Identity and Access Management
Cloud Trace Service
Resource Formation Service
Tag Management Service
Log Tank Service
Config
Resource Access Manager
Simple Message Notification
Application Performance Management
Application Operations Management
Organizations
Optimization Advisor
Cloud Operations Center
Resource Governance Center
Migración
Server Migration Service
Object Storage Migration Service
Cloud Data Migration
Migration Center
Cloud Ecosystem
KooGallery
Partner Center
User Support
My Account
Billing Center
Cost Center
Resource Center
Enterprise Management
Service Tickets
HUAWEI CLOUD (International) FAQs
ICP Filing
Support Plans
My Credentials
Customer Operation Capabilities
Partner Support Plans
Professional Services
Análisis
MapReduce Service
Data Lake Insight
CloudTable Service
Cloud Search Service
Data Lake Visualization
Data Ingestion Service
GaussDB(DWS)
DataArts Studio
IoT
IoT Device Access
Otros
Product Pricing Details
System Permissions
Console Quick Start
Common FAQs
Instructions for Associating with a HUAWEI CLOUD Partner
Message Center
Seguridad y cumplimiento
Security Technologies and Applications
Web Application Firewall
Host Security Service
Cloud Firewall
SecMaster
Data Encryption Workshop
Database Security Service
Cloud Bastion Host
Data Security Center
Cloud Certificate Manager
Blockchain
Blockchain Service
Servicios multimedia
Media Processing Center
Video On Demand
Live
SparkRTC
Almacenamiento
Object Storage Service
Elastic Volume Service
Cloud Backup and Recovery
Storage Disaster Recovery Service
Scalable File Service
Volume Backup Service
Cloud Server Backup Service
Data Express Service
Dedicated Distributed Storage Service
Contenedores
Cloud Container Engine
SoftWare Repository for Container
Application Service Mesh
Ubiquitous Cloud Native Service
Cloud Container Instance
Bases de datos
Relational Database Service
Document Database Service
Data Admin Service
Data Replication Service
GeminiDB
GaussDB
Distributed Database Middleware
Database and Application Migration UGO
TaurusDB
Middleware
Distributed Cache Service
API Gateway
Distributed Message Service for Kafka
Distributed Message Service for RabbitMQ
Distributed Message Service for RocketMQ
Cloud Service Engine
EventGrid
Dedicated Cloud
Dedicated Computing Cluster
Aplicaciones empresariales
ROMA Connect
Message & SMS
Domain Name Service
Edge Data Center Management
Meeting
AI
Face Recognition Service
Graph Engine Service
Content Moderation
Image Recognition
Data Lake Factory
Optical Character Recognition
ModelArts
ImageSearch
Conversational Bot Service
Speech Interaction Service
Huawei HiLens
Developer Tools
SDK Developer Guide
API Request Signing Guide
Terraform
Koo Command Line Interface
Distribución de contenido y cómputo de borde
Content Delivery Network
Intelligent EdgeFabric
CloudPond
Soluciones
SAP Cloud
High Performance Computing
Servicios para desarrolladores
ServiceStage
CodeArts
CodeArts PerfTest
CodeArts Req
CodeArts Pipeline
CodeArts Build
CodeArts Deploy
CodeArts Artifact
CodeArts TestPlan
CodeArts Check
Cloud Application Engine
aPaaS MacroVerse
KooPhone
KooDrive

Acceso autenticado mediante un token

Actualización más reciente 2024-09-25 GMT+08:00

Si un servicio en tiempo real se encuentra en estado Running, se ha desplegado correctamente. Este servicio proporciona una API de RESTful estándar para que los usuarios invoquen. Antes de integrar la API en el entorno de producción, comisione la API. Puede utilizar los siguientes métodos para enviar una solicitud de inferencia al servicio en tiempo real:

Requisitos previos

Ha obtenido un token de usuario, ruta local al archivo de inferencia, URL del servicio en tiempo real y parámetros de entrada del servicio en tiempo real.

  • Para obtener detalles sobre cómo obtener un token de usuario, consulte Autenticación basada en token. Las API de servicio en tiempo real generadas por ModelArts no admiten tokens cuyo alcance es dominio. Por lo tanto, es necesario obtener el token cuyo alcance es proyecto.
  • La ruta local al archivo de inferencia puede ser una ruta absoluta (por ejemplo, D:/test.png para Windows y /opt/data/test.png para Linux) o una ruta relativa (por ejemplo, ./test.png).
  • Puede obtener URL del servicio y los parámetros de entrada de un servicio en tiempo real en la página de ficha Usage Guides de su página de detalles del servicio.

    La URL de API es la URL de servicio del servicio en tiempo real. Si se define una ruta para apis en el archivo de configuración del modelo, la URL debe ir seguida de la ruta definida por el usuario, por ejemplo, {URL of the real-time service}/predictions/poetry.

    Figura 1 Obtención de la URL de la API y los parámetros de entrada de predicción de archivos de un servicio en tiempo real
    Figura 2 Obtención de la URL de la API y los parámetros de entrada de predicción de texto de un servicio en tiempo real

Método 1: Usar software basado en GUI para inferencia (Postman)

  1. Descargue Postman e instalarlo, o instalar la extensión Postman Chrome. Alternativamente, utilice otro software que pueda enviar solicitudes POST. Se recomienda Postman 7.24.0.
  2. Active Postman. Figura 3 muestra la interfaz de Postman.
    Figura 3 Interfaz de Postman
  3. Establezca los parámetros en Postman. A continuación se utiliza la clasificación de imágenes como ejemplo.
    • Seleccione una tarea de POST y copie URL de la API en el cuadro de texto POST. En la página de pestaña Headers, establezca Key en X-Auth-Token y Value en el token de usuario.
      NOTA:

      También puede utilizar las AK y SK para cifrar las solicitudes de invocaciones a la API. Para obtener más información, véase Descripción de autenticación de sesión.

      Figura 4 Configuración de parámetros
    • En la página de la ficha Body, la entrada de archivo y la entrada de texto están disponibles.
      • Ingreso de archivo

        Seleccione form-data. Establezca KEY en el parámetro de entrada de la aplicación de IA, que debe ser el mismo que el parámetro de entrada del servicio en tiempo real. En este ejemplo, KEY es images. Establezca VALUE en una imagen que se va a inferir (solo se puede inferir una imagen). Consulte Figura 5.

        Figura 5 Configuración de parámetros en la página de ficha Body
      • Ingreso de texto

        Seleccione raw y luego JSON(application/json). Introduzca el cuerpo de la solicitud en el cuadro de texto siguiente. Un cuerpo de solicitud de ejemplo es el siguiente:

        {
          "meta": {
            "uuid": "10eb0091-887f-4839-9929-cbc884f1e20e"
          },
          "data": {
            "req_data": [
              {
                "sepal_length": 3,
                "sepal_width": 1,
                "petal_length": 2.2,
                "petal_width": 4
              }
            ]
          }
        }

        meta puede llevar un identificador único universal (UUID). Cuando se devuelve el resultado de la inferencia después de invocar a la API, se devuelve el UUID para rastrear la solicitud. Si no necesita esta función, deje meta en blanco. data contiene una matriz req_data para una o varias piezas de datos de entrada. Los parámetros de cada pieza de datos, como sepal_length y sepal_width en este ejemplo son determinados por la aplicación de IA.

  4. Después de establecer los parámetros, haga clic en send para enviar la solicitud. El resultado se mostrará en Response.
    • Resultado de inferencia usando la entrada de archivo: Figura 6 muestra un ejemplo. Los valores de campo en el resultado devuelto varían según la aplicación de IA.
    • Resultado de inferencia usando la entrada de texto: Figura 7 muestra un ejemplo. El cuerpo de la solicitud contiene meta y data. Si la solicitud contiene uuid, uuid se devolverá en la respuesta. De lo contrario, el uuid se deja en blanco. data contiene una matriz resp_data para los resultados de inferencia de una o varias piezas de datos de entrada. Los parámetros de cada resultado se determinan mediante la aplicación de IA, por ejemplo, sepal_length y predictresult en este ejemplo.
      Figura 6 Resultado de inferencia de archivo
      Figura 7 Resultado de inferencia de texto

Método 2: Ejecutar el comando cURL para enviar una solicitud de inferencia

El comando para enviar solicitudes de inferencia se puede introducir como un archivo o texto.

  • Ingreso de archivo
    curl -kv -F 'images=@Image path' -H 'X-Auth-Token:Token value' -X POST Real-time service URL
    • -k indica que se puede acceder a los sitios web SSL sin utilizar un certificado de seguridad.
    • -F indica la entrada de archivo. En este ejemplo, el nombre del parámetro es images, que se pueden cambiar según sea necesario. La ruta de almacenamiento de imágenes sigue a @.
    • -H indica el encabezado de un comando de POST. X-Auth-Token es la clave de encabezado, que es fija. Token value indica el token de usuario.
    • POST es seguido por la URL de la API del servicio en tiempo real.

    El siguiente es un ejemplo del comando cURL para inferencia con entrada de archivo:

    curl -kv -F 'images=@/home/data/test.png' -H 'X-Auth-Token:MIISkAY***80T9wHQ==' -X POST https://modelarts-infers-1.xxx/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83
  • Ingreso de texto
    curl -kv -d '{"data":{"req_data":[{"sepal_length":3,"sepal_width":1,"petal_length":2.2,"petal_width":4}]}}' -H 'X-Auth-Token:MIISkAY***80T9wHQ==' -H 'Content-type: application/json' -X POST https://modelarts-infers-1.xxx/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83

    -d indica la entrada de texto del cuerpo de la solicitud.

Método 3: Usar Python para enviar una solicitud de inferencia

  1. Descargue el SDK de Python y configúrelo en la herramienta de desarrollo. Para obtener más información, consulte Integración del SDK de Python para la firma de solicitudes de API.
  2. Cree un cuerpo de solicitud para inferencia.
    • Ingreso de archivo
      # coding=utf-8
      
      import requests
      
      if __name__ == '__main__':
          # Config url, token and file path.
          url = "URL of the real-time service"
          token = "User token"
          file_path = "Local path to the inference file"
      
          # Send request.
          headers = {
              'X-Auth-Token': token
          }
          files = {
              'images': open(file_path, 'rb')
          }
          resp = requests.post(url, headers=headers, files=files)
      
          # Print result.
          print(resp.status_code)
          print(resp.text)

      El nombre de files viene determinado por el parámetro de entrada del servicio en tiempo real. El nombre del parámetro debe ser el mismo que el del parámetro de entrada del tipo de archivo. El parámetro de entrada images obtenido en Requisitos previos es un ejemplo.

    • Ingreso de texto (JSON)

      A continuación se muestra un ejemplo del cuerpo de la solicitud para leer el archivo de inferencia local y realizar la codificación Base64:

      # coding=utf-8
      
      import base64
      import requests
      
      if __name__ == '__main__':
          # Config url, token and file path
          url = "URL of the real-time service"
          token = "User token"
          file_path = "Local path to the inference file"
          with open(file_path, "rb") as file:
              base64_data = base64.b64encode(file.read()).decode("utf-8")
      
          # Set body,then send request
          headers = {
              'Content-Type': 'application/json',
              'X-Auth-Token': token
          }
          body = {
              'image': base64_data
          }
          resp = requests.post(url, headers=headers, json=body)
      
          # Print result
          print(resp.status_code)
          print(resp.text)

      El nombre de body viene determinado por el parámetro de entrada del servicio en tiempo real. El nombre del parámetro debe ser el mismo que el del parámetro de entrada del tipo de cadena. El parámetro de entrada images obtenido en Requisitos previos es un ejemplo. El valor de base64_data de body es del tipo de cadena.

Método 4: Usar Java para enviar una solicitud de inferencia

  1. Descargue el SDK de Java y configúrelo en la herramienta de desarrollo. Para obtener más información, consulte Integración del SDK de Java para la firma de solicitudes de API.
  2. (Opcional) Si la entrada de la solicitud de inferencia está en el formato de archivo, el proyecto Java depende del módulo httpmime.
    1. Agregue httpmime-x.x.x.jar a la carpeta libs. Figura 8 muestra una biblioteca de dependencias Java completa.

      Se recomienda utilizar httpmime-x.x.x.jar 4.5 o una versión posterior. Descargue httpmime-x.x.x.jar desde https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime.

      Figura 8 Biblioteca de dependencias Java
    2. Después de agregar httpmime-x.x.x.jar, agregue la información httpmime al archivo .classpath del proyecto Java de la siguiente manera:
      <?xml version="1.0" encoding="UTF-8"?>
      <classpath>
      <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
      <classpathentry kind="src" path="src"/>
      <classpathentry kind="lib" path="libs/commons-codec-1.11.jar"/>
      <classpathentry kind="lib" path="libs/commons-logging-1.2.jar"/>
      <classpathentry kind="lib" path="libs/httpclient-4.5.13.jar"/>
      <classpathentry kind="lib" path="libs/httpcore-4.4.13.jar"/>
      <classpathentry kind="lib" path="libs/httpmime-x.x.x.jar"/>
      <classpathentry kind="lib" path="libs/java-sdk-core-3.1.2.jar"/>
      <classpathentry kind="lib" path="libs/okhttp-3.14.9.jar"/>
      <classpathentry kind="lib" path="libs/okio-1.17.2.jar"/>
      <classpathentry kind="output" path="bin"/>
      </classpath>
  3. Cree un cuerpo de solicitud Java para inferencia.
    • Ingreso de archivo
      Un cuerpo de solicitud Java de ejemplo es el siguiente:
      // Package name of the demo.
      package com.apig.sdk.demo;
      
      import org.apache.http.Consts;
      import org.apache.http.HttpEntity;
      import org.apache.http.client.methods.CloseableHttpResponse;
      import org.apache.http.client.methods.HttpPost;
      import org.apache.http.entity.ContentType;
      import org.apache.http.entity.mime.MultipartEntityBuilder;
      import org.apache.http.impl.client.HttpClients;
      import org.apache.http.util.EntityUtils;
      
      import java.io.File;
      
      public class MyTokenFile {
      
          public static void main(String[] args) {
              // Config url, token and filePath
              String url = "URL of the real-time service";
              String token = "User token";
              String filePath = "Local path to the inference file";
      
              try {
                  // Create post
                  HttpPost httpPost = new HttpPost(url);
      
                  // Add header parameters
                  httpPost.setHeader("X-Auth-Token", token);
      
                  // Add a body if you have specified the PUT or POST method. Special characters, such as the double quotation mark ("), contained in the body must be escaped.
                  File file = new File(filePath);
                  HttpEntity entity = MultipartEntityBuilder.create().addBinaryBody("images", file).setContentType(ContentType.MULTIPART_FORM_DATA).setCharset(Consts.UTF_8).build();
                  httpPost.setEntity(entity);
      
                  // Send post
                  CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
      
                  // Print result
                  System.out.println(response.getStatusLine().getStatusCode());
                  System.out.println(EntityUtils.toString(response.getEntity()));
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

      El nombre addBinaryBody viene determinado por el parámetro de entrada del servicio en tiempo real. El nombre del parámetro debe ser el mismo que el del parámetro de entrada del tipo de archivo. El archivo images obtenido en Requisitos previos se usa como ejemplo.

    • Ingreso de texto (JSON)

      A continuación se muestra un ejemplo del cuerpo de la solicitud para leer el archivo de inferencia local y realizar la codificación Base64:

      // Package name of the demo.
      package com.apig.sdk.demo;
      
      import org.apache.http.HttpHeaders;
      import org.apache.http.client.methods.CloseableHttpResponse;
      import org.apache.http.client.methods.HttpPost;
      import org.apache.http.entity.StringEntity;
      import org.apache.http.impl.client.HttpClients;
      import org.apache.http.util.EntityUtils;
      
      public class MyTokenTest {
      
          public static void main(String[] args) {
              // Config url, token and body
              String url = "URL of the real-time service";
              String token = "User token";
              String body = "{}";
      
              try {
                  // Create post
                  HttpPost httpPost = new HttpPost(url);
      
                  // Add header parameters
                  httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json");
                  httpPost.setHeader("X-Auth-Token", token);
      
                  // Special characters, such as the double quotation mark ("), contained in the body must be escaped.
                  httpPost.setEntity(new StringEntity(body));
      
                  // Send post.
                  CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
      
                  // Print result
                  System.out.println(response.getStatusLine().getStatusCode());
                  System.out.println(EntityUtils.toString(response.getEntity()));
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

      body está determinado por el formato de texto. JSON se utiliza como ejemplo.

Utilizamos cookies para mejorar nuestro sitio y tu experiencia. Al continuar navegando en nuestro sitio, tú aceptas nuestra política de cookies. Descubre más

Comentarios

Comentarios

Comentarios

0/500

Seleccionar contenido

Enviar el contenido seleccionado con los comentarios