Food Recognition Selenium using Calorie Mama API

Selenium WebDriver is an open-source automation tool for web browsers that provides a platform-independent testing framework. When combined with the Calorie Mama API, which uses deep learning and computer vision algorithms to recognize food items and their nutritional values from images, we can automate food recognition tasks.

In this tutorial, we'll explore how to use Selenium WebDriver to automate the process of uploading food images to the Calorie Mama API and retrieving nutritional information programmatically.

Prerequisites and Setup

Firefox Browser Installation

  • Download Firefox from the official website

  • Install Firefox, which will be placed in C:\Program Files\Mozilla Firefox\firefox.exe on Windows

GeckoDriver Setup

  • Download GeckoDriver from GitHub releases

  • Extract the zip file and place geckodriver.exe in your system PATH or project directory

Required Python Packages

pip install selenium webdriver-manager requests

Implementation Algorithm

  1. Configure Firefox browser options using Selenium WebDriver

  2. Launch Firefox and navigate to the Calorie Mama API website

  3. Locate the file upload element on the webpage

  4. Upload the food image automatically

  5. Extract and display the food recognition results

Complete Example

Here's a complete implementation that automates food recognition using Selenium and the Calorie Mama API ?

import time
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.firefox import GeckoDriverManager

def setup_driver():
    """Configure and return Firefox WebDriver instance"""
    options = Options()
    options.add_argument('--disable-blink-features=AutomationControlled')
    
    # Use WebDriver Manager to handle GeckoDriver automatically
    driver = webdriver.Firefox(
        executable_path=GeckoDriverManager().install(),
        options=options
    )
    return driver

def recognize_food(image_path):
    """Automate food recognition using Calorie Mama API"""
    if not os.path.exists(image_path):
        print(f"Error: Image file not found at {image_path}")
        return None
    
    driver = setup_driver()
    wait = WebDriverWait(driver, 10)
    
    try:
        # Navigate to Calorie Mama API website
        driver.get('https://www.caloriemama.ai/api')
        
        # Wait for and locate the file upload element
        upload_element = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, 'file-upload'))
        )
        
        # Upload the image file
        upload_element.send_keys(os.path.abspath(image_path))
        
        # Wait for processing (adjust time as needed)
        time.sleep(8)
        
        # Extract the recognition result
        result_element = wait.until(
            EC.presence_of_element_located((By.CLASS_NAME, 'group-name'))
        )
        
        recognized_food = result_element.text
        print(f"Recognized food: {recognized_food}")
        
        return recognized_food
        
    except Exception as e:
        print(f"Error during food recognition: {str(e)}")
        return None
        
    finally:
        driver.quit()

# Example usage
if __name__ == "__main__":
    # Replace with your actual image path
    image_path = "pasta.jpg"
    result = recognize_food(image_path)
    
    if result:
        print(f"Successfully recognized: {result}")
    else:
        print("Food recognition failed")

Key Components Explained

WebDriver Configuration

The setup_driver() function configures Firefox with appropriate options and uses WebDriver Manager to automatically handle GeckoDriver installation ?

options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=options)

Element Location and Interaction

We use explicit waits to ensure elements are loaded before interaction ?

wait = WebDriverWait(driver, 10)
upload_element = wait.until(
    EC.presence_of_element_located((By.CLASS_NAME, 'file-upload'))
)

Expected Output

When you run the script with a food image, you'll see output similar to ?

Recognized food: Pasta
Successfully recognized: Pasta

Error Handling and Best Practices

  • Always use explicit waits instead of time.sleep() for better reliability

  • Implement proper exception handling for network issues or element location failures

  • Use WebDriver Manager to automatically handle driver installations

  • Always call driver.quit() in a finally block to clean up resources

Limitations and Considerations

  • API response time varies based on image complexity and server load

  • Image quality affects recognition accuracy

  • The free tier of Calorie Mama API has usage limits

  • Web automation may break if the website structure changes

Conclusion

This tutorial demonstrated how to automate food recognition using Selenium WebDriver and the Calorie Mama API. By combining browser automation with AI-powered food recognition, developers can create applications that help users track their nutrition automatically. The implementation includes proper error handling, explicit waits, and modern WebDriver management practices for reliable automation.

Updated on: 2026-03-27T01:15:52+05:30

589 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements