|
---
|
|
language:
|
|
- de
|
|
pipeline_tag: image-to-text
|
|
---
|
|
# Ingredient Scanner
|
|
## Abstract
|
|
|
|
With the recent advancements in computer vision and optical character recognition and using a convolutional neural network to cut out the product from a picture, it has now become possible to reliably extract ingredient lists from the back of a product using the Anthropic API. Open-weight or even only on-device optical character recognition lacks the quality to be used in a production environment, although the progress in development is promising. The Anthropic API is also currently not feasible due to the high cost of 1 Swiss Franc per 100 pictures.
|
|
|
|
The training code and data is available on [GitHub](https://github.com/lenamerkli/ingredient-scanner/). This repository just contains an inference example and the [report](https://huggingface.co/lenamerkli/ingredient-scanner/blob/main/ingredient-scanner.pdf).
|
|
|
|
This is an entry for the [2024 Swiss AI competition](https://www.ki-wettbewerb.ch/).
|
|
|
|
## Table of Contents
|
|
|
|
0. [Abstract](#abstract)
|
|
1. [Report](#report)
|
|
2. [Model Details](#model-details)
|
|
3. [Usage](#usage)
|
|
4. [Citation](#citation)
|
|
|
|
## Report
|
|
Read the full report [here](https://huggingface.co/lenamerkli/ingredient-scanner/blob/main/ingredient-scanner.pdf).
|
|
|
|
## Model Details
|
|
This repository consists of two models, one vision model and a large language model.
|
|
|
|
### Vision Model
|
|
Custom convolutional neural network based on [ResNet18](https://pytorch.org/hub/pytorch_vision_resnet/). It detects the four corner points and the upper and lower limits of a product.
|
|
|
|
### Language Model
|
|
Converts the text from the optical character recognition engine which lies in-between the two models to JSON. It is fine-tuned from [unsloth/Qwen2-0.5B-Instruct-bnb-4bit](https://huggingface.co/unsloth/Qwen2-0.5B-Instruct-bnb-4bit).
|
|
|
|
## Usage
|
|
Clone the repository and install the dependencies on any debian-based system:
|
|
```bash
|
|
git clone https://huggingface.co/lenamerkli/ingredient-scanner
|
|
cd ingredient-scanner
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip3 install -r requirements.txt
|
|
```
|
|
Note: not all requirements are needed for inference, as both training and inference requirements are listed.
|
|
|
|
Select the OCR engine in `main.py` by uncommenting one of the lines 20 to 22:
|
|
```python
|
|
# ENGINE: list[str] = ['easyocr']
|
|
# ENGINE: list[str] = ['anthropic', 'claude-3-5-sonnet-20240620']
|
|
# ENGINE: list[str] = ['llama_cpp/v2/vision', 'qwen-vl-next_b2583']
|
|
```
|
|
Note: Qwen-VL-Next is not an official qwen model. This is only to protect business secrets of a private model.
|
|
|
|
Run the inference script:
|
|
```bash
|
|
python3 main.py
|
|
```
|
|
|
|
You will be asked to enter the file path to a PNG image.
|
|
|
|
### Anthropic API
|
|
|
|
If you want to use the Anthropic API, create a `.env` file with the following content:
|
|
```
|
|
ANTHROPIC_API_KEY=YOUR_API_KEY
|
|
```
|
|
|
|
## Citation
|
|
Here is how to cite this paper in the bibtex format:
|
|
```bibtex
|
|
@misc{merkli2024ingriedient-scanner,
|
|
title={Ingredient Scanner: Automating Reading of Ingredient Labels with Computer Vision},
|
|
author={Lena Merkli and Sonja Merkli},
|
|
date={2024-07-16},
|
|
url={https://huggingface.co/lenamerkli/ingredient-scanner},
|
|
}
|
|
```
|
|
|