{"id":18679977,"url":"https://github.com/effeix/imagesearch","last_synced_at":"2025-11-07T15:30:25.386Z","repository":{"id":92510063,"uuid":"155748648","full_name":"effeix/ImageSearch","owner":"effeix","description":"Image search using Mobile Net neural network and ImageNet dataset","archived":false,"fork":false,"pushed_at":"2018-11-01T17:58:47.000Z","size":82585,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-27T22:22:07.065Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/effeix.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-01T17:06:37.000Z","updated_at":"2024-11-25T13:13:10.000Z","dependencies_parsed_at":"2023-08-21T04:00:32.494Z","dependency_job_id":null,"html_url":"https://github.com/effeix/ImageSearch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effeix%2FImageSearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effeix%2FImageSearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effeix%2FImageSearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/effeix%2FImageSearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/effeix","download_url":"https://codeload.github.com/effeix/ImageSearch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239533067,"owners_count":19654617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T09:47:27.294Z","updated_at":"2025-11-07T15:30:25.244Z","avatar_url":"https://github.com/effeix.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ImageSearch\nImage search using Mobile Net neural network and ImageNet dataset\n\n## Objetivo\nNeste projeto, o objetivo foi construir um buscador de imagem utilizando Machine Learning. O processo de treinamento foi feito utilizando a rede neural pré treinada MobileNet, com o dataset ImageNet. O banco de dados de imagens disponíveis (dentro da pasta `images/`) foi construído com um esforço conjunto dos alunos da disciplina de Visão Computacional 2018.2 do Insper. O banco de dados possui aproximadamente 750 imagens.\n\n## Dependências\n - Python 3\n - Keras\n - Tensorflow\n - maplotlib\n - numpy\n\n Para instalar as dependências:\n ```sh\n $ pip install -r requirements.txt\n ```\n\n## Explicação do algoritmo\nO dataset ImageNet possui 1000 classes diferentes e milhares de imagens. O arquivo `imagenet.txt` possui um mapeamento de índices para nome de classes. O pacote Keras provê redes neurais pré-treinadas com as imagens da ImageNet. Utilizaremos a MobileNet, uma rede leve que pode ser utilizada em smartphones.\n\nPara cada imagem do nosso banco de dados customizado, é realizada uma predição utilizando a rede citada acima. Cada imagem gera como predição um vetor de 1000 posições, contendo as probabilidades de cada classes para esta dada imagem. As predições são persistidas em um índice (dicionário) no seguinte formato, usando o módulo `pickle`:\n\n```python\nindex = {\n    \"uri_da_imagem_0\": [], # vetor de probabilidades 0\n    \"uri_da_imagem_1\": [], # vetor de probabilidades 1\n    ...\n}\n```\n\nEste índice será utilizado para retornar as imagens buscadas. O processo de busca se dá assim:\n\n1. O usuário entra com um dos 1000 termos presentes no arquivo `imagenet.txt`.\n2. Este termo é convertido no ID correspondente.\n3. Para cada uma das imagens no banco de dados, é coletada a probabilidade presente na posição ID do vetor de probabilidades daquela imagem.\n4. Estas probabilidades são ordenadas e mostradas juntamente com as imagens correspondentes, em ordem crescente de confiança.\n\n#### Exemplo: termo \"banana\"\n1. Termo \"banana\".\n2. O ID do termo \"banana\" é 954.\n3. Para cada imagem do banco, é coletada a probabilidade (confiança) da posição 954 do vetor. Um dicionário é montado, contendo como chaves as URIs das imagens, e como valores as probabilidades coletadas:\n```python\ncoleta = {\n    \"./images/martimfj/banana3.jpg\": 1.0,\n    \"./images/lucassa3/banana0.jpg\": 0.9999671,\n    \"./images/lucassa3/banana2.jpg\": 0.9995524,\n    \"./images/lucassa3/banana4.jpg\": 0.9994442,\n    \"./images/martimfj/banana2.jpg\": 0.9975414,\n    .....\n}\n```\n4. O dicionário é ordenado em ordem decrescente, de acordo com a probabilidade. Os cinco primeiros resultados são mostrados.\n\nPara evitar com que o índice seja construído toda vez que uma busca for realizada, o pacote `pickle` foi utilizado, permitindo guardar arquivos binários de objetos Python.\n\n## Utilização\nPara rodar o algoritmo, pode-se utilizar:\n```sh\n$ python image_search.py \u003ctermo_imagenet\u003e\n```\n\nCaso a flag `--build-index` seja passada, o índice será reconstruído. Os termos estão em [imagenet.txt](https://github.com/gustavoefeiche/ImageSearch/blob/master/imagenet.txt).\n\n## Resultados\nAbaixo são mostrados resultados utilizando termos presentes no ImageNet, mas procurando por uma categoria que possui imagens no banco de dados (exemplo 1) e uma categoria que não possui.\n\n#### Exemplo 1:\nTermo buscado: banana\n\nPrimeiro resultado (o número no topo representa a confiança do classificador, ou seja, a chance deste resultado estar correto):\n![banana](https://i.imgur.com/heYImiP.png)\n\n#### Exemplo 2:\nTermo buscado: mushroom\n\nPrimeiro resultado (o número no topo representa a confiança do classificador, ou seja, a chance deste resultado estar correto):\n![fries](https://i.imgur.com/VbSaPVJ.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feffeix%2Fimagesearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feffeix%2Fimagesearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feffeix%2Fimagesearch/lists"}