Saltar a contenido

Protocolo de comunicaciones

Cuando un dispositivo periférico se comunica con el controlador principal a través del puerto serie, es necesario un protocolo de interacción determinado para completar la transmisión de datos o comandos. Sentry2 es compatible con los protocolos de comandos estándar y simples, y utilizan el mismo formato de protocolo de comunicación. No obstante, es posible que diferentes productos admitan comandos de protocolo ligeramente diferentes. A continuación, se toma como base el Sentry2. Para obtener más información detallada o requisitos técnicos, hay que ponerse en contacto con:

  • Soporte técnico: support@aitosee.com
  • Ventas: sales@aitosee.com.

Protocolo de comandos estándar

El protocolo de comando estándar tiene un formato de datos estandarizado, y combinado con la tabla de registro, puede lograr funciones completas de interacción de datos y una alta eficiencia de comunicación.

Formato del comando

START | LEN | ADDR | CMD | DATA | CHKSUM | END

Símbolo Significado Longitud Descripción
START Marco Cabecera 1 Byte Indica el inicio de un paquete de datos, siempre 0xFF
LEN Longitud 1 Byte Longitud total del paquete de datos (en bytes), incluyendo la cabecera y el final de la trama
ADDR Dirección 1 Byte Dirección física del dispositivo
CMD Comando 1 Byte Código de comando, véase la lista de comandos para más detalles
DATA Dato (LEN-6)Byte Contenido de los datos, véase la lista de comandos para más detalles
CHKSUM Suma de comprobación 1 Byte La suma de todos los bytes desde la cabecera de la trama (inclusive) hasta los datos DATA, con el carry descartado
END Fin del frame 1 Byte Indica el final de un paquete de datos, siempre 0xED

Modo de interacción de datos

El mecanismo de respuesta se adopta en el modo de puerto serie. El proceso de intercambio de datos está completamente controlado por el controlador principal y el sensor no envía datos de forma activa a este. Durante la interacción de datos, el controlador principal envía primero una trama de comando y, a continuación, el sensor devuelve una o varias tramas de respuesta para completarla.

Comando Introducción

Código del comando Nombre Descripción
0x01 SetRegister Establecer registro
0x02 GetRegister Leer registro
0x20 SetParam Establecer los parámetros del algoritmo
0x21 SetParamGroup Establecer los parámetros del algoritmo por grupo
0x22 GetResult Obtener resultados del algoritmo
0x23 GetResultGroup Obtener resultados del algoritmo por grupo
0x24 SetResult Establecer los resultados del algoritmo
0x25 SetResultGroup Establecer los resultados del algoritmo por grupo
  • Grupo de parámetros: cada grupo de parámetros contiene hasta cinco valores, cuyo significado puede variar según los diferentes algoritmos.

Solo algunos algoritmos tienen funciones de configuración de parámetros y algunos también pueden configurar varios grupos de parámetros, cada uno de los cuales está marcado con un ParamID. Por ejemplo, para el algoritmo Color, si se necesitan configurar 25 regiones de reconocimiento, se deben escribir 25 grupos de parámetros.

  • Valor del parámetro
Algoritmo Valor 1 Valor 2 Valor 3 Valor 4 Valor 5
Color Coordenada x central de la región de reconocimiento Coordenada y central de la región de reconocimiento Anchura de la región de reconocimiento Altura de la región de reconocimiento Ninguno
Blob Ninguno Ninguno Anchura mínima del bloque de color Altura mínima del bloque de color Etiqueta de clasificación de color
Learning Ninguno Ninguno Ninguno Ninguno 0 = borrar los datos del objeto,
100 = aprender el objeto de destino
Learning Ninguno Ninguno Ninguno Ninguno 0 = borrar los datos de caras,
100 = aprender la cara destino
  • Grupo de resultados: Un grupo de datos de resultados representa un resultado, y cada grupo contiene 5 valores de retorno. El significado de estos valores de retorno puede variar según los distintos algoritmos. Algunos algoritmos pueden devolver múltiples resultados, cada uno marcado por un ResultID.
Algoritmo Valor 1 Valor 2 Valor 3 Valor 4 Valor 5 Observaciones
Color Valor del canal rojo R Valor del canal verde G Valor del canal azul B Ninguno Etiqueta de clasificación de color
Blob Centro coordenada X Centro coordenada Y Ancho Alto Etiqueta de clasificación de color
Line Punto final coordenada X Punto final coordenada Y Punto inicial coordenada X Punto inicial coordenada Y Ángulo de inclinación
Apriltag Centro coordenada X Centro coordenada Y Ancho Alto Etiqueta n de clasificación
Learning Centro coordenada X (valor fijo) Centro coordenada Y (valor fijo) Ancho (valor fijo) Alto (valor fijo) Etiqueta n de clasificación Primero hay que aprender el objeto de destino
Card Centro coordenada X Centro coordenada Y Ancho Alto Etiqueta n de clasificación
Face Centro coordenada X Centro coordenada Y Ancho Alto Etiqueta n de clasificación Primero hay que aprender la cara objetivo
20Class Centro coordenada X Centro coordenada Y Ancho Alto Etiqueta n de clasificación
QrCode Centro coordenada X Centro coordenada Y Ancho Alto Número de caracteres El siguiente grupo de resultados son datos de caracteres
Custom Significado personalizado Significado personalizado Significado personalizado Significado personalizado Significado personalizado
Motion Centro coordenada X Centro coordenada Y Ancho (valor fijo) Alto (valor fijo) Ninguno
  • 0x01-SetRegister. Descripción: Establece el registro, sólo se puede establecer un registro (un byte) cada vez.

command frame CMD: 0x01

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
Registro de direcciones Dato a escribir

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x01 Dato escrito
  • 0x02-GetRegister. Descripción: Leer el registro, sólo un registro (un byte) se puede leer cada vez.

command frame CMD: 0x02

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
Registro de direcciones

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x01 Dato leido
  • 0x20-SetParam. Descripción: Establece los valores de los parámetros del mismo tipo para el algoritmo especificado, y se pueden establecer varios parámetros al mismo tiempo. Por ejemplo, se pueden establecer las coordenadas x de 10 regiones de reconocimiento del algoritmo "Color" solo.
Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
ID del algoritmo Tipo de parámetro Inicio ID1 de parámetro Fin IDn de parámetro Parámetro 1 Parámetro 2 Parámetro n

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x20 ID del algoritmo
  • 0x21-SetParamGroup. Descripción: Establece los parámetros del algoritmo especificado por grupo, cada grupo contiene 5 elementos de datos. Por ejemplo, establezca los parámetros x, y, w, h de 10 regiones de reconocimiento del algoritmo "Color" al mismo tiempo.

command frame CMD: 0x21

Byte1 Byte2 Byte3 Byte4 Bytes Bytes Bytes
ID del algoritmo Inicio ID1 de parámetro Fin IDn de parámetro Parámetro grupo 1 Parámetro grupo 2 Parámetro grupo n

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
0x21 ID del algoritmo
  • 0x22-GetResult. Descripción: Obtener un determinado tipo de datos de resultado del algoritmo especificado. Por ejemplo, obtener únicamente la etiqueta de clasificación del algoritmo "Color".

command frame CMD: 0x22

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
ID del algoritmo Tipo de dato Inicio ID1 de resultado Fin IDn de resultado

Dado que la longitud máxima de cada trama de datos es de sólo 255 bytes, cuando la longitud supere este valor se generarán múltiples tramas de datos. Cuando el CMD es 0xEC, indica una trama intermedia, y cuando es 0xE0, indica una trama final.

Respuesta desde CMD: 0xEC o 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes
0x22 Número de cuadro de imagen ID del algoritmo Tipo de dato Inicio ID1 de resultado Fin IDn de resultado Datos de resultados
  • 0x23-GetResultGroup. Descripción: Obtener los datos de resultado del algoritmo especificado por grupo, cada grupo contiene 5 elementos de datos. Por ejemplo, obtener los valores RGB y las etiquetas de clasificación de 5 regiones del algoritmo "Color" al mismo tiempo.

command frame CMD: 0x23

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
ID del algoritmo Inicio ID1 de resultado Fin IDn de resultado

Dado que la longitud máxima de cada trama de datos es de sólo 255 bytes, cuando la longitud de los datos de la trama de resultados de detección supere este valor, se generarán múltiples tramas de datos. Cuando el CMD es 0xEC, indica una trama intermedia, y cuando es 0xE0, indica una trama final.

Respuesta desde CMD: 0xEC o 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes
0x23 Número de cuadro de imagen ID del algoritmo Inicio ID1 de resultado Fin IDn de resultado Grupo 1 de resultados Grupo n de resultados
  • 0x24-SetResult. Descripción: Establece un determinado tipo de datos de resultado del algoritmo especificado, que se utiliza para escribir los datos de resultado del algoritmo "Custom" que se ejecuta en el chip WiFi en el registro K210 para que el controlador principal los lea.

command frame CMD: 0x24

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7
ID del algoritmo Tipo de dato Inicio ID1 de resultado Fin IDn de resultado

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes
0x24 ID del algoritmo
  • 0x25-SetResultGroup. Descripción: Establecer varios grupos de datos de resultado del algoritmo especificado, cada grupo contiene 5 elementos de datos, que se utiliza para escribir los resultados del algoritmo personalizado que se ejecuta en el chip WiFi en el registro K210 para que el controlador principal lo lea.

command frame CMD: 0x25

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes
ID del algoritmo Inicio ID1 de resultado Fin IDn de resultado

Respuesta desde CMD: 0xE0

Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes
0x25 ID del algoritmo

Protocolo de comandos simples

Este comando no tiene especificaciones de protocolo complejas. Solo es necesario enviar un carácter y/o números a través del puerto serie para iniciar el algoritmo y obtener datos. No es necesario desarrollar una librería de controladores. Es adecuado para cualquier plataforma de control principal con función UART, pero solo para escenarios de aplicación simples.

Formato del comando

  • Send (Enviar)

CMD | DATA | END

Símbolo Significado Longitud Descripción
CMD Símbolo de comando 1 Ver la lista de comandos para mas detalles
DATA Parámetro - Parámetro del comando
END La bandera del final del paquete de datos 1 No es necesario, también puede ser un salto de línea, un retorno de carro o un espacioen blanco
  • Return (Retorno)

DATA | END

Símbolo Significado Longitud Descripción
DATA Resultado de Dato - Resultado de Dato
END La bandera del final del paquete de datos 1 Todos terminan con un salto de línea

Lista de comandos

Operación Carácter del comando Parámetro Retorno Ejemplo
Ejecuta algoritmo O u o ID algoritmo 1:Éxito
0:Fallo
O7: Ejecuta algoritmo Face
Detén algoritmo C o c ID algoritmo 1:Éxito
0:Fallo
C7: Detén algoritmo Face
Obtener el número de resultados de detección N o n ID algoritmo Número de objetos detectados, 0 si no se detectan N7: retorna el número de caras
Obtener la coordenada horizontal (X) X o x ID resultado, se puede omitir, por defecto es 1 Valor de la coordenada horizontal del objeto X1: Devuelve la coordenada de la primera cara
Obtener la coordenada vertical (Y) Y o y ID resultado, se puede omitir, por defecto es 1 Valor de la coordenada vertical del objeto Y3: Devuelve la coordenada de la tercera cara
Obtener el ancho del objeto (W) W o w ID resultado, se puede omitir, por defecto es 1 Valor del ancho del objeto W: retorna el ancho de la primera cara
Obtener el alto del objeto (H) H o h ID resultado, se puede omitir, por defecto es 1 Valor de la altura del objeto H: retorna la altura de la primera cara
Obtener la etiqueta de clasificación del objeto (L) L o l ID resultado, se puede omitir, por defecto es 1 Etiqueta de clasificación del objeto L2: retorna la etiqueta de clasificación de la segunda cara
Obtener todos los resultados A o a ID resultado, se puede omitir, por defecto es 1 El comando A devuelve la descripción del resultado A2: Devuelve todos los datos de la segunda cara
Obtener imagen I o i Ninguno Marco de datos de imagen I: retorna una imagen
Establecer parámetros S o s Parámetro ID+X
parámetro+Y

parámetro+W

parámetro+H

parámetro+L

parámetro
1:Éxito
0:Fallo
S2+100+50+10+10+0: Establece el segundo conjunto de parámetros, x=100, y=50, w=10, h=10, l=0(asumiendo que el algoritmo Color está funcionando)
  • Comando A Descripción de los datos del resultado devuelto

El formato de los datos devueltos es: A+001+002+003+004+005

Donde 001 es la coordenada X, 002 es la coordenada Y, 003 es la anchura W, 004 es la altura H y 005 es la etiqueta L.

Para facilitar el análisis, cada resultado se compone de 3 dígitos fijos, y la parte que falta se rellena con 0.

Nota:

Para los algoritmos con resultados de retorno especiales, como Color, Línea y Código QR, el significado de los resultados de retorno se muestra en la introducción de cada algoritmo.

  • Comando S de descripción del parámetro

No a todos los algoritmos se pueden establecer parámetros. El algoritmo debe iniciarse antes de establecer los parámetros. El primer parámetro que sigue al comando S es Param-ID, que es el ID del conjunto de parámetros que se va a establecer. El sensor admite hasta 25 conjuntos de parámetros, y el ID no debe superar este límite.

Al establecer los parámetros, los cinco parámetros XYWHL deben escribirse al mismo tiempo. Si los parámetros de entrada son insuficientes, se establecerán por defecto en 0.

No se puede omitir el símbolo de conexión «+» entre los números.

Protocolo de transmisión de imágenes

Sentry2 admite la función de transmisión de imágenes, que puede enviar imágenes al chip WiFi, al puerto UART o al puerto USB, y es compatible con los formatos RGB565, JPEG y JPEG-Base64.

Formato del comando

START | TYPE | WIDTH | HEIGHT | LEN | DATA

|Símbolo|Significado|Longitud|Descripción| |START|Cabecera del marco|1 byte|Indica el inicio de un paquete de datos, siempre 0xF0| |TYPE|Formato de imagen|1 byte|2=RGB565, 4=JPEG, 5=JPEG-Base64| |WIDTH|Ancho de la imagen|2 bytes|Ancho de la imagen| |HEIGHT|Alto de la imagen|2 bytes|Alto de la imagen| |LEN|Longitud del dato|4 bytes|Longitud de los datos de la imagen| |DATA|Datos de imagen|LEN|Datos de imagen|

RGB565

Los datos de muestreo originales de la imagen, que utilizan dos bytes para representar un punto de píxel, tienen un volumen relativamente grande: una imagen de 320 x 240 píxeles equivale a 153 600 bytes.

El RGB565 es un RGB de 16 bits (2 bytes). Podemos encontrar mas detalles en esta entrada de la Wikipedia

JPEG

Un formato de compresión de imágenes común, que puede comprimir una imagen RGB565 a un tamaño de entre 10 y 30 KB. El tamaño de la relación de compresión depende de la riqueza cromática de la imagen. Cuanto menos color, mayor será la relación de compresión.

Se trata del formato de archivo estándar para las imágenes digitales. Las imágenes JPG pueden tener tambien la extensión JPEG.

En la entrada Joint Photographic Experts Group de la Wikipedia se encuentran todos los detalles.

JPEG-Base64

Se trata de codificar la imagen JPEG según las reglas Base64, convertir los datos hexadecimales en caracteres de texto, lo que resulta conveniente para la transmisión y el análisis en red, y se utiliza normalmente para el reconocimiento de imágenes en la nube.

Base64 es un grupo de esquemas de codificación similares para convertir datos binarios en un formato de texto ASCII. Base64 se usa generalmente para transferir datos a través de Internet. El resultado de convertir una imagen a Base64 es solo un conjunto de letras latinas, números y dos caracteres: “+” y “/”.

En la Wikipedia podemos encontrar la entrada Base64 donde están todos los detalles.

Hay numerosos sitios web que ofrecen convertidores de JPG a Base64. Algunos ejemplos son Base64 Image Encoder, Browserling, y Online JPG Tools. Simplemente sube tu archivo JPG y obtendrás la cadena Base64 correspondiente.

Para convertir una imagen JPG a Base64, también puedes escribir código en lenguajes como JavaScript o Python.

  • Ejemplo en JavaScript
    function toBase64(file) {
        return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = () => resolve(reader.result);
            reader.onerror = (error) => reject(error);
        });
    }

    async function convertImageToBase64(file) {
        const base64String = await toBase64(file);
        return base64String;
    }

    // Ejemplo de uso:
    const fileInput = document.getElementById('imageInput'); // Asume un input de tipo file
    fileInput.addEventListener('change', async (event) => {
        const file = event.target.files[0];
        if (file) {
            try {
                const base64 = await convertImageToBase64(file);
                console.log(base64); // Imprime la cadena Base64
                // Aquí puedes usar la cadena Base64 como necesites
            } catch (error) {
                console.error("Error al convertir la imagen:", error);
            }
        }
    });
  • Ejemplo en Python
    import base64

    def image_to_base64(image_path):
        with open(image_path, "rb") as img_file:
            encoded_string = base64.b64encode(img_file.read()).decode('utf-8')
        return encoded_string

    # Ejemplo de uso:
    image_path = 'ruta/a/tu/imagen.jpg'
    base64_string = image_to_base64(image_path)
    print(base64_string)
    # Agregar el prefijo (opcional)
    prefixed_string = "data:image/jpeg;base64," + base64_string
    print(prefixed_string)