En este artículo explico cómo creé mi propio formato de archivo de imagen usando solo Python. El formato se llama AVJ y está orientado a casos de uso de machine learning porque incorpora metadatos, texto alternativo y vectores de embedding tanto del texto como de la imagen.

Estructura general del archivo AVJ: el archivo combina un encabezado fijo con secciones variables. El encabezado almacena metadatos esenciales y los campos variables contienen texto alternativo codificado en UTF-8, dos vectores de embedding en formato de punto flotante y finalmente los bytes crudos de la imagen en RGB sin compresión. El formato de archivo usa la extensión .avj y está pensado para ser simple, reproducible y eficiente en flujos de datos para modelos y APIs.

Campos principales del encabezado y tamaño aproximado en bytes: Magic Number 4 bytes tipo ASCII que identifica el archivo como AVJ1, Version 2 bytes unsigned short para versión del formato, Image Width 4 bytes unsigned int, Image Height 4 bytes unsigned int, Color Mode 1 byte unsigned para indicar representación de color, Alt Text Length 4 bytes unsigned int con longitud en bytes del texto alternativo, Embedding 1 Length 4 bytes unsigned int, Embedding 2 Length 4 bytes unsigned int. El encabezado fijo permite luego leer secciones variables según las longitudes almacenadas.

Conceptos y librerías usadas: para empaquetar y desempaquetar binarios utilizo la librería struct incluida en Python. Para procesar imágenes empleo Pillow y su método tobytes y frombytes. Para manejo de arrays y conversión de embeddings uso numpy. Para generar embeddings de imagen y texto utilizo PyTorch y transformers con el modelo CLIP. Para exponer el servicio como API uso FastAPI, lo que permite subir y descargar archivos de forma sencilla.

Flujo de codificación resumido: se abre la imagen con Pillow y se convierte a RGB; se obtiene la representación de bytes con tobytes y se capturan ancho y alto. El texto alternativo se codifica en UTF-8. Los embeddings se convierten a vectores numpy con tipo float32 y se transforman a bytes. Con struct se empaqueta el encabezado fijo incluyendo las longitudes de las secciones variables. Finalmente se concatena encabezado, texto alternativo codificado, vectores de embedding y bytes crudos de la imagen para generar el archivo .avj final.

Flujo de decodificación resumido: el lector carga los primeros bytes correspondientes al encabezado fijo y con struct desempaqueta los campos; usando las longitudes extrae el texto alternativo y lo decodifica en UTF-8; las secciones de embeddings se convierten desde bytes a arrays numpy con dtype float32; lo que queda después de las secciones variables es la matriz de bytes de la imagen que se reconstruye con Image.frombytes usando ancho, alto y modo. De esta forma se recuperan imagen y metadatos originales de forma determinista.

Sobre embeddings: para generar vectores semánticos de texto e imagen se puede usar el modelo CLIP disponible en transformers. El flujo típico es procesar la imagen y el texto con el processor del modelo, pasar tensores a la GPU si está disponible y obtener embeddings que luego se normalizan y guardan en el archivo AVJ como arrays de float32. Incluir embeddings junto a la imagen facilita búsquedas semánticas, clasificación o pipelines de IA sin tener que recalcular representaciones en cada consulta.

Diseño para APIs: al integrar esto en una API con FastAPI es sencillo crear un endpoint de subida que reciba el archivo original y el texto alternativo, calcule embeddings, empaquete todo en un .avj y devuelva el archivo para descargar. Otro endpoint puede recibir un .avj, decodificarlo y devolver la imagen reconstruida y sus metadatos en JSON. Esta arquitectura es ideal para integraciones en soluciones de visión artificial y motores de búsqueda semántica.

Ventajas del formato AVJ: inclusión nativa de embeddings para despliegues ML, formato no comprimido para acceso directo a bytes RGB, encabezado fijo que facilita lectura por streaming y compatibilidad con herramientas de Python para procesamiento batch y en tiempo real.

En Q2BSTUDIO somos una empresa de desarrollo de software y aplicaciones a medida que combina experiencia en inteligencia artificial, ciberseguridad y servicios cloud. Ofrecemos soluciones empresariales integrales, desde desarrollo de software a medida hasta despliegues cloud en AWS y Azure. Si buscas potenciar tus productos con IA para empresas y agentes IA contamos con servicios especializados en integración de modelos y pipelines. También apoyamos proyectos de inteligencia de negocio y visualización con Power BI para convertir datos en decisiones estratégicas.

Si tu objetivo es crear una aplicación que incluya almacenamiento optimizado de imágenes con embeddings o desplegar APIs que trabajen con visión y semántica, en Q2BSTUDIO desarrollamos soluciones a medida y podemos ayudarte a implementar tanto la lógica de codificación AVJ como la infraestructura en la nube. Conoce nuestros servicios de software a medida en servicios de desarrollo de aplicaciones y software multicanal y descubre nuestras capacidades en inteligencia artificial en servicios de inteligencia artificial para empresas.

También ofrecemos auditorías y pruebas de seguridad para tus sistemas y pipelines de IA, garantizando buenas prácticas de ciberseguridad y cumplimiento. Si precisas integración con plataformas de inteligencia de negocio o Power BI, contamos con experiencia para conectar modelos de datos y visualizaciones, y optimizar flujos de trabajo con automatización y servicios cloud aws y azure.

Conclusión: crear un formato de imagen propio como AVJ en Python es directo cuando se estructuran cabeceras fijas y se aprovecha la potencia de bibliotecas ya consolidadas. El valor añadido proviene de incluir embeddings en el propio archivo, facilitando aplicaciones de búsqueda semántica, clasificación y despliegues de IA empresariales. En Q2BSTUDIO podemos acompañarte desde la idea hasta la puesta en producción con soluciones de software a medida, aplicaciones a medida, inteligencia artificial, agentes IA, ciberseguridad y servicios cloud.