La principal motivación detrás de la construcción rubrix
fue tener un motor de búsqueda visual completamente impulsado por Inteligencia Artificial, uniendo conceptos dentro de los campos del Procesamiento del Lenguaje Natural y la Visión por Computadora, algo que nos gusta llamar "búsqueda combinada por similitudes". Actualmente rubrix
tiene dos funcionalidades principales:
¡Haga clic aquí para conocer más detalles sobre la arquitectura y cómo funciona rubrix
!
rubrix
en acción Puede consultar algunas de las imágenes recuperadas por rubrix
para consultas de muestra aquí.
Esta sección describe los requisitos previos y contiene instrucciones para poner el proyecto en funcionamiento.
Actualmente, rubrix
funciona perfectamente en Linux y se puede configurar fácilmente con todos los paquetes necesarios siguiendo estas instrucciones:
Descargue la versión adecuada de conda para su máquina.
Instálelo ejecutando el archivo conda_install.sh
, con el comando:
$ bash conda_install.sh
Agregue conda
al perfil de bash:
$ source ~ /.bashrc
Navegue hasta rubrix/
(directorio de nivel superior) y cree un entorno virtual conda con el archivo environment.yml
incluido usando el siguiente comando:
$ conda env create -f environment.yml
Active el entorno virtual con el siguiente comando:
$ conda activate rubrix
Para instalar el paquete con extras de setuptools, use el siguiente comando en rubrix/
(directorio de nivel superior) que contiene el archivo setup.py
:
$ pip install .
Una vez que se hayan instalado los requisitos previos, siga estas instrucciones para construir el proyecto:
Navegue al directorio rubrix/index
.
Ejecute el script bash setup.sh
con el siguiente comando:
$ bash setup.sh
¿Qué hace esto?
darknet/
dentro de rubrix/index
para permitir la detección de objetos con YOLOv4.assets/index.json
, que esencialmente es un índice de imagen inversa que asigna todos los objetos en los que se entrenó YOLOv4 a las imágenes que los contienen.assets/imageEmbeddingLocations.json
, que esencialmente asigna todas las imágenes de la base de datos a los vectores de incrustación de oraciones generados para cada uno de los títulos de la base de datos.assets/descriptors
.NOTA: El script anterior puede tardar entre 1,5 y 2 horas en completarse.
rubrix/assets
.rubrix/assets/index.json
y rubrix/assets/imageEmbeddingLocations.json
en relación con la máquina local. Esto se puede hacer de la siguiente manera:$ conda activate rubrix
>> > from rubrix . utils import fix_paths_in_index
>> > path_to_index = < absolute / path / to / rubrix / assets / index . json >
>> > path_to_emb = < absolute / path / to / rubrix / assets / imageEmbeddingLocations . json >
>> > fix_paths_in_index ( path_to_index , path_to_emb )
rubrix/rubrix/index
y ejecute el siguiente script bash: $ bash quick_setup.sh
Una vez completados estos pasos, debería poder utilizar rubrix
.
rubrix/query/query_by_text
.rubrix/query/query_by_image_objects
.También puede seguir un ejemplo práctico para esto aquí.
Una alternativa es utilizar rubrix
como aplicación en un navegador web.
rubrix/rubrix/web
.$ python app.py
Esto es útil si desea implementar rubrix
en un servidor, por ejemplo, un servidor Ubuntu Linux en AWS.
$ sudo docker build -t < YOUR-NAME > /rubrix .
$ sudo docker run -p 9000:80 < YOUR-NAME > /rubrix
La configuración ideal para esto sería tener una configuración de proxy inverso Apache/Nginx en el sistema host, apuntando al puerto 9000
en este caso, y Apache/Nginx del sistema host manejaría SSL. Esto le permitirá implementar la aplicación una y otra vez sin preocuparse por rehacer los certificados SSL.
environment.yml
porque usar Conda en cualquier tipo de entorno de producción es una pesadilla. Los cambios realizados allí no se reflejarán en el contenedor Dockerizado. No existen pautas específicas para contribuir, aparte de algunas pautas generales que intentamos seguir, como por ejemplo:
Si ve algo que podría mejorarse, ¡envíe una solicitud de extracción! Siempre estamos felices de buscar mejoras para garantizar que rubrix
, como proyecto, sea la mejor versión de sí mismo.
Si cree que algo debería hacerse de manera diferente (o simplemente está roto), cree un problema.
Consulte el archivo de LICENCIA para obtener más detalles.