Spaces:
Sleeping
Sleeping
title: Food Image Crowdsourcing | |
emoji: π½οΈ | |
colorFrom: green | |
colorTo: yellow | |
sdk: streamlit | |
sdk_version: 1.43.2 | |
app_file: app.py | |
pinned: false | |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference | |
# π½οΈ Food Image Crowdsourcing App | |
A Streamlit application that allows users to upload food images for AI model training. These images will be used to fine-tune datasets for food image recognition to annotate uploaded food pictures with caloric and nutrient values. | |
## π Features | |
- User authentication via Firebase | |
- Image upload and processing | |
- Token reward system for contributors | |
- AWS S3 storage for images | |
- DynamoDB for metadata storage | |
## π Deployment to Hugging Face Spaces | |
### Prerequisites | |
1. [Hugging Face](https://huggingface.co/) account | |
2. AWS account with S3 and DynamoDB | |
3. Firebase project for authentication | |
### Step 1: Set up AWS Resources | |
1. Create an S3 bucket: `food-image-crowdsourcing` | |
2. Create a DynamoDB table: `image_metadata` with primary key `image_id` | |
3. Create an IAM user with permissions for S3 and DynamoDB | |
4. Note your AWS Access Key and Secret Key | |
### Step 2: Set up Firebase Authentication | |
1. Create a new Firebase project at [Firebase Console](https://console.firebase.google.com/) | |
2. Enable Email/Password authentication | |
3. Generate a new private key for your service account (Project settings > Service accounts > Generate new private key) | |
4. Save the JSON file | |
### Step 3: Create a New Hugging Face Space | |
1. Go to [Hugging Face Spaces](https://huggingface.co/spaces) | |
2. Click "Create new Space" | |
3. Choose a name for your Space | |
4. Select "Streamlit" as the SDK | |
5. Choose visibility (Public or Private) | |
6. Click "Create Space" | |
### Step 4: Upload Files to the Space | |
Upload the following files to your Space: | |
- `app.py` | |
- `requirements.txt` | |
- `PARTICIPATION_GUIDELINES.md` | |
- `TOKEN_REWARDS.md` | |
- `TERMS_OF_SERVICE.md` | |
You can do this via the Hugging Face web interface or using Git. | |
### Step 5: Configure Secrets | |
1. Go to your Space's Settings tab | |
2. Under "Repository secrets", add the following secrets: | |
- `AWS_ACCESS_KEY`: Your AWS access key | |
- `AWS_SECRET_KEY`: Your AWS secret key | |
- `AWS_REGION`: Your AWS region (e.g., `us-east-1`) | |
- `S3_BUCKET_NAME`: Your S3 bucket name (e.g., `food-image-crowdsourcing`) | |
- `DYNAMODB_TABLE`: Your DynamoDB table name (e.g., `image_metadata`) | |
- `FIREBASE_CONFIG`: Paste the entire content of your Firebase service account JSON file | |
### Step 6: Deploy and Run | |
1. Your Space should automatically build and deploy when you push your changes | |
2. If not, you can manually rebuild from the Settings tab | |
3. Once deployed, you can access your app at `https://huggingface.co/spaces/your-username/your-space-name` | |
## π Important Files | |
- `app.py`: The main Streamlit application | |
- `requirements.txt`: Python dependencies | |
- `PARTICIPATION_GUIDELINES.md`: Rules for user participation | |
- `TOKEN_REWARDS.md`: Explanation of the token reward system | |
- `TERMS_OF_SERVICE.md`: Legal terms and conditions | |
## π Local Development | |
To run this application locally: | |
1. Clone the repository | |
2. Install dependencies: `pip install -r requirements.txt` | |
3. Create a `.env` file with the required environment variables | |
4. Run the app: `streamlit run app.py` | |
## π¦ Required Environment Variables | |
``` | |
AWS_ACCESS_KEY=your_aws_access_key | |
AWS_SECRET_KEY=your_aws_secret_key | |
AWS_REGION=your_aws_region | |
S3_BUCKET_NAME=your_s3_bucket_name | |
DYNAMODB_TABLE=your_dynamodb_table_name | |
FIREBASE_CONFIG=your_firebase_json_config | |
``` | |
## π Data Model | |
### S3 Object Structure | |
Images are stored in S3 with the following path pattern: | |
``` | |
{user_id}/{timestamp}_{image_id}.jpg | |
``` | |
### DynamoDB Schema | |
Each image entry in DynamoDB contains: | |
- `image_id` (Primary Key): UUID for the image | |
- `user_id`: ID of the uploading user | |
- `upload_timestamp`: When the image was uploaded | |
- `food_name`: Name of the food | |
- `portion_size`: Size/weight of the portion | |
- `portion_unit`: Unit of measurement | |
- `cooking_method`: How the food was prepared | |
- `ingredients`: List of main ingredients | |
- `s3_path`: Path to the image in S3 | |
- `tokens_awarded`: Number of tokens awarded for this upload | |
## π οΈ Future Enhancements | |
1. Image tagging with machine learning | |
2. Nutritional information estimation | |
3. Social sharing features | |
4. Mobile app integration | |
5. Enhanced analytics dashboard | |
## π License | |
This project is licensed under the MIT License - see the LICENSE file for details. |