Saltar al contenido principal

Ayuda al diagnóstico

POST /diagnosis-support devuelve una lista clasificada de condiciones probables para una o más imágenes de piel, además de indicadores de riesgo y un bloque de validez de medios por imagen.

Petición

import requests
import base64

base_url = "<base_url>"
url = f"{base_url}/diagnosis-support"

# Encode each image you want to analyse. Multiple images can be sent in
# the same request: each image becomes a separate item in `payload[]`.
image_path = "<path_to_image>" # e.g. "lesion_image.jpg"
with open(image_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")

json_payload = {
"payload": [
{
"contentAttachment": {
"data": image_data, # required base64-encoded image bytes
"title": "Lesion close-up", # optional free-text label for the image
"contentType": "image/jpeg" # optional defaults to image/png
}
}
# Add more {"contentAttachment": {...}} items here for additional images.
]
}

headers = {
"Content-Type": "application/json",
"Authorization": "Bearer <access_token>" # obtained from /login
}

response = requests.post(url, json=json_payload, headers=headers)
result = response.json()

Campos de la petición

  • payload[] matriz de imágenes a analizar. Se requiere al menos una entrada; varias entradas se agregan en un único resultado.
  • payload[].contentAttachment (requerido) envolvente de imagen; consulte la sección compartida Image attachment para ver los campos.

La cabecera Authorization es el token de portador estándar; consulte Authentication header.

Respuesta

La respuesta sigue la forma del recurso FHIR DiagnosticReport. La parte superior de la respuesta lleva el resultado agregado; imagingAnalysis[] contiene el desglose por imagen incluyendo mapas de calor de explicabilidad.

{
"resourceType": "DiagnosticReport",
"identifier": {
"use": "official",
"value": "f426f15d-fcea-4bd0-942e-7528bf163c5d"
},
"status": "preliminary",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"systemDisplay": "HL7 FHIR",
"code": "IMG",
"display": "Diagnostic Imaging"
}
],
"text": "Diagnostic imaging"
}
],
"code": {
"coding": [
{
"system": "http://loinc.org/",
"systemDisplay": "Logical Observation Identifiers Names and Codes (LOINC)",
"code": "100063-7",
"display": "Primary skin concern"
}
],
"text": "Skin condition analysis"
},
"issued": "2026-02-13T14:58:27.466367",
"analysisDuration": 1.11359,
"performanceIndicator": {
"sensitivity": 66.97074175,
"specificity": 98.58783484,
"entropy": 8.4339413
},
"clinicalIndicator": {
"hasCondition": 99.96490132,
"pigmentedLesion": 0.53779946,
"malignancy": 0.24731814,
"urgentReferral": 0.67645404,
"highPriorityReferral": 1.51389415
},
"conclusion": [
{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "EA89",
"display": "Generalised eczematous dermatitis of unspecified type"
}
],
"text": "Eczematous dermatitis"
},
"probability": 94.89877797
},
{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "1F28",
"display": "Dermatophytosis"
}
],
"text": "Tinea"
},
"probability": 0.15845833
}
// ... 4 more shown in production for the top 5; full array contains every supported pathology.
],
"imagingAnalysis": [
{
"mediaValidity": { /* see the "Image quality assessment" common building block */ },
"performanceIndicator": { "entropy": 8.4339413 },
"clinicalIndicator": { /* same shape as top-level clinicalIndicator */ },
"conclusion": [
{
"code": { /* same ICD-11 coding as top-level conclusion[] */ },
"probability": 94.8987782,
"explainability": {
"heatMap": { /* visual attention map for this conclusion */ }
}
}
// ...
]
}
]
}

Campos de nivel superior

Los campos FHIR de nivel superior (resourceType, identifier, status, issued, analysisDuration) siguen el FHIR response envelope compartido. Este endpoint también lleva bloques category y code que describen el tipo de informe (Diagnostic Imaging, LOINC 100063-7 "Primary skin concern"); son estáticos y pueden ignorarse en la mayoría de integraciones.

performanceIndicator: rendimiento del modelo para esta predicción

"performanceIndicator": {
"sensitivity": 66.97074175,
"specificity": 98.58783484,
"entropy": 8.4339413
}
  • sensitivity la sensibilidad del modelo (tasa de verdaderos positivos, en porcentaje) en el punto operativo utilizado para esta predicción.
  • specificity la especificidad del modelo (tasa de verdaderos negativos, en porcentaje) en el punto operativo utilizado para esta predicción.
  • entropy entropía de Shannon de la distribución de probabilidad predicha. Los valores más altos significan que el modelo es más incierto acerca de qué condición está presente.

clinicalIndicator: indicadores de riesgo

"clinicalIndicator": {
"hasCondition": 99.96490132,
"pigmentedLesion": 0.53779946,
"malignancy": 0.24731814,
"urgentReferral": 0.67645404,
"highPriorityReferral": 1.51389415
}

Todos los valores son porcentajes (0–100):

  • hasCondition probabilidad de que una condición de piel relevante esté presente en la imagen.
  • pigmentedLesion probabilidad de que la lesión sea pigmentada (relevante para flujos de trabajo de triaje de melanoma).
  • malignancy probabilidad de malignidad.
  • urgentReferral probabilidad de que el caso justifique derivación urgente a un especialista.
  • highPriorityReferral probabilidad de que el caso justifique derivación de alta prioridad (menos urgente que urgentReferral pero aún expedida).

conclusion[]: diagnóstico diferencial clasificado

{
"code": {
"coding": [
{
"system": "https://icd.who.int/browse/2025-01/mms/en",
"systemDisplay": "ICD-11",
"version": "2025-01",
"code": "EA89",
"display": "Generalised eczematous dermatitis of unspecified type"
}
],
"text": "Eczematous dermatitis"
},
"probability": 94.89877797
}
  • code.coding[].system URL del sistema de codificación; siempre ICD-11 para este endpoint.
  • code.coding[].version versión de lanzamiento de ICD-11 (por ejemplo, 2025-01).
  • code.coding[].code / code.coding[].display código ICD-11 y su presentación oficial.
  • code.text etiqueta corta y legible por humanos.
  • probability probabilidad predicha (0–100) para esta conclusión.

La matriz está ordenada en probabilidad descendente. En producción contiene todas las patologías soportadas (300+ entradas); solo las entradas principales son clínicamente significativas. Filtre la matriz a los 5 elementos principales para mostrar, y presente una opción "más" si desea exponer la cola larga.

imagingAnalysis[]: desglose por imagen

imagingAnalysis refleja el resultado de nivel superior para cada imagen de entrada individualmente (una entrada por elemento en su payload[] de solicitud). Cada entrada contiene:

  • mediaValidity bloque de calidad de imagen; consulte la sección Image quality assessment.
  • performanceIndicator.entropy incertidumbre por imagen.
  • clinicalIndicator indicadores de riesgo por imagen (la misma forma que el bloque de nivel superior).
  • conclusion[] diagnósticos clasificados por imagen; cada elemento lleva además un campo explainability.heatMap con un mapa de atención visual que destaca las regiones que el modelo utilizó para llegar a esa conclusión. Una vez decodificado, el mapa de calor es una superposición de imagen donde los colores más cálidos indican las regiones que el modelo pesó más intensamente:

Mapa de calor de explicabilidad decodificado superpuesto en la imagen de lesión original

Forma de explainability.heatMap

"explainability": {
"heatMap": {
"title": "Heat map showing which regions of the image the AI focuses its attention to predict this class.",
"contentType": "image/jpeg",
"data": "<base64_encoded_image_data>",
"height": 238,
"width": 284,
"colorModel": "RGB"
}
}
  • title descripción legible por humanos del mapa de calor.
  • contentType tipo MIME de la imagen codificada (típicamente image/jpeg).
  • data bytes de imagen codificados en Base64. Omitido del ejemplo anterior porque la carga es grande; decodifíquelo de la misma manera que cualquier otra imagen Base64.
  • height / width dimensiones de píxeles de la imagen decodificada.
  • colorModel espacio de color de la imagen decodificada (por ejemplo, RGB).