A principal motivação por trás da construção rubrix
foi ter um mecanismo de busca visual totalmente alimentado por Inteligência Artificial, vinculando conceitos nas áreas de Processamento de Linguagem Natural e Visão Computacional, algo que gostamos de chamar de “busca de similaridade combinada”. Atualmente rubrix
possui duas funcionalidades principais:
Clique aqui para saber mais detalhes sobre a arquitetura e como funciona rubrix
!
rubrix
em ação Você pode conferir algumas das imagens recuperadas pela rubrix
para exemplos de consultas aqui.
Esta seção descreve os pré-requisitos e contém instruções para colocar o projeto em funcionamento.
Atualmente, rubrix
funciona perfeitamente no Linux e pode ser facilmente configurado com todos os pacotes de pré-requisitos seguindo estas instruções:
Baixe a versão apropriada do conda para sua máquina.
Instale-o executando o arquivo conda_install.sh
, com o comando:
$ bash conda_install.sh
Adicione conda
ao perfil bash:
$ source ~ /.bashrc
Navegue até rubrix/
(diretório de nível superior) e crie um ambiente virtual conda com o arquivo environment.yml
incluído usando o seguinte comando:
$ conda env create -f environment.yml
Ative o ambiente virtual com o seguinte comando:
$ conda activate rubrix
Para instalar o pacote com extras do setuptools, use o seguinte comando em rubrix/
(diretório de nível superior) que contém o arquivo setup.py
:
$ pip install .
Depois que os pré-requisitos forem instalados, siga estas instruções para construir o projeto:
Navegue até o diretório rubrix/index
.
Execute o script bash setup.sh
com o seguinte comando:
$ bash setup.sh
O que isso faz?
darknet/
dentro de rubrix/index
para permitir a detecção de objetos com YOLOv4.assets/index.json
, que essencialmente é um índice de imagem inversa que mapeia todos os objetos nos quais o YOLOv4 foi treinado, para as imagens que os contêm.assets/imageEmbeddingLocations.json
, que essencialmente mapeia todas as imagens no banco de dados para os vetores de incorporação de frases gerados para cada uma das legendas no banco de dados.assets/descriptors
.NOTA: O script acima pode levar de 1,5 a 2 horas para ser concluído.
rubrix/assets
.rubrix/assets/index.json
e rubrix/assets/imageEmbeddingLocations.json
em relação à máquina local. Isso pode ser feito da seguinte maneira:$ 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
e execute o seguinte script bash: $ bash quick_setup.sh
Com a conclusão dessas etapas, você poderá usar rubrix
.
rubrix/query/query_by_text
.rubrix/query/query_by_image_objects
.Você também pode seguir um exemplo prático para isso aqui.
Uma alternativa é usar rubrix
como um aplicativo no navegador da web.
rubrix/rubrix/web
.$ python app.py
Isto é para se você deseja implantar rubrix
em um servidor, por exemplo, um servidor Ubuntu Linux na AWS
$ sudo docker build -t < YOUR-NAME > /rubrix .
$ sudo docker run -p 9000:80 < YOUR-NAME > /rubrix
A configuração ideal para isso seria ter uma configuração de proxy reverso Apache/Nginx no sistema host, apontando para a porta 9000
neste caso, e o Apache/Nginx do sistema host lidaria com SSL. Isso seria para que você pudesse implantar o aplicativo repetidamente sem se preocupar em refazer os certificados SSL.
environment.yml
porque usar conda em qualquer tipo de ambiente de produção é um pesadelo. As alterações feitas lá não serão refletidas no contêiner Dockerizado. Não existem diretrizes específicas para contribuir, exceto algumas diretrizes gerais que tentamos seguir, como:
Se você encontrar algo que possa ser melhorado, envie uma solicitação pull! Estamos sempre felizes em buscar melhorias, para garantir que rubrix
, como projeto, seja a melhor versão de si mesmo.
Se você acha que algo deveria ser feito de maneira diferente (ou está simplesmente quebrado), crie um problema.
Consulte o arquivo LICENSE para obter mais detalhes.