📜  使用 Caloriemama API 的食物识别Selenium(1)

📅  最后修改于: 2023-12-03 15:36:26.840000             🧑  作者: Mango

使用 Caloriemama API 的食物识别 Selenium

简介

在日常生活中,可能遇到如下情况:见到一道美食,但不知道它的名字和热量值。这时,我们可以使用 Caloriemama API 和 Selenium 自动化测试工具来实现食物识别和热量值查询。

这里我们将介绍如何使用 Python 和 Selenium 库来自动打开浏览器、识别图片中的食物,调用 Caloriemama API 查询其热量,并返回查询结果。

环境设置
安装 Selenium
  1. 安装 Python 包管理器 pip:

    sudo apt-get install python3-pip
    
  2. 安装 Selenium 软件包:

    pip3 install selenium
    
获取 Caloriemama API 访问密钥
  1. 打开 https://caloriemama.ai/ 和 https://rapidapi.com/edamam/api/edamam-food-and-grocery-database/ 网站。在两个页面分别注册账户,并获取 API 访问密钥。

  2. 在 https://rapidapi.com/edamam/api/edamam-food-and-grocery-database/ 页面点击 Endpoints 标签页,在 Nutrition Analysis API 栏目复制 Request URLs 链接。

实现过程
1. 引入库和设置参数
import time
import os
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置参数
IMG_NAME = 'food.jpg'    # 图片名字
CALORIE_URL = ''         # API 的链接地址
API_KEY = ''             # API 的访问密钥
2. 获取图片并上传到 Caloriemama API
# 获取图片并上传到 Caloriemama API
img_path = os.path.join(os.getcwd(), IMG_NAME)

files = {'media': open(img_path, 'rb')}
headers = {
    'X-RapidAPI-Key': API_KEY,
    'X-RapidAPI-Host': 'caloriemama.ai',
    'Content-Type': 'application/octet-stream'
}
response = requests.post(CALORIE_URL, headers=headers, files=files)

# 解析返回的 JSON 数据
result = response.json()
print(result['total_calories'])    # 显示热量值
3. 使用 Selenium 打开网页并截图
# 模拟操作浏览器
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 10)

driver.get('https://cn.bing.com/images')
input_box = wait.until(EC.presence_of_element_located((By.NAME, 'q')))
input_box.send_keys('鸡肉饭')   # 输入想要搜索的图片
input_box.submit()

img = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.mimg')))
img.screenshot(IMG_NAME)    # 截图并保存在当前文件夹 
附:完整代码
import time
import os
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions 

# 设置参数
IMG_NAME = 'food.jpg'    # 图片名字
CALORIE_URL = ''         # API 的链接地址
API_KEY = ''             # API 的访问密钥

# 获取图片并上传到 Caloriemama API
img_path = os.path.join(os.getcwd(), IMG_NAME)

files = {'media': open(img_path, 'rb')}
headers = {
    'X-RapidAPI-Key': API_KEY,
    'X-RapidAPI-Host': 'caloriemama.ai',
    'Content-Type': 'application/octet-stream'
}
response = requests.post(CALORIE_URL, headers=headers, files=files)

# 解析返回的 JSON 数据
result = response.json()
print(result['total_calories'])    # 显示热量值

# 模拟操作浏览器
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
wait = WebDriverWait(driver, 10)

driver.get('https://cn.bing.com/images')
input_box = wait.until(EC.presence_of_element_located((By.NAME, 'q')))
input_box.send_keys('鸡肉饭')   # 输入想要搜索的图片
input_box.submit()

img = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.mimg')))
img.screenshot(IMG_NAME)    # 截图并保存在当前文件夹

上述程序可以自动截取并识别图片中的食物,然后查询出相应的热量值。在实际项目中,可以将该程序与 OCR 或其他识别技术相结合,实现更多的功能。