Selenium 使用Calorie Mama API的食物识别
用于自动化Web浏览器的开源程序被称为Selenium Webdriver。它为多个平台和浏览器上的Web应用程序提供了一个平台无关的测试框架。借助深度学习和计算机视觉算法,食物识别API Caloriemama可以从一张照片中识别不同的食物和它们的营养价值。
在本指南中,我们将看一下Selenium Webdriver如何自动化上传照片并检索结果,从而使开发人员能够简单地将食物识别功能包含到他们的应用程序中,并为消费者提供正确的营养信息。
设置
Firefox可执行文件
- 从这里下载Firefox浏览器安装程序
-
下载后,安装浏览器,一个exe文件将自动放置在 C:\Program Files\Mozilla Firefox\firefox.exe 。我们稍后将需要它。
Gecko Driver
-
Windows用户可以从这里下载gecko驱动程序。其他版本请参阅发布。
-
解压缩zip文件并将“ geckodriver.exe ”文件放置在C:\目录中。我们稍后会在代码中引用它。
Selenium Python Package
我们将使用最新版本的Selenium Webdriver,所以使用pip安装以下内容:
pip3 install -U selenium
pip3 install -U webdriver-manager
图片
对于我们的用例,我们将使用这张图片作为“ pasta.jpg ”。将此图片保存到C:\驱动器。当然,您可以用您选择的任何其他物品替换这个食品项目。
步骤
- 使用Selenium WebDriver设置Firefox浏览器选项。
-
使用Selenium WebDriver启动Firefox浏览器,打开Caloriemama API网站。
-
使用Selenium WebDriver找到网站上的文件上传按钮元素。
-
使用Selenium WebDriver自动上传图像文件。
-
使用Selenium WebDriver找到识别出的菜品结果元素,并将其打印在控制台中。
示例
将此代码块粘贴到Python文件中,并将 .py 文件也保存在您保存图像的C:\驱动器中。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
options = Options()
# download and install firefox and it will be in the following path
options.binary_location = r'C:\Program Files\Mozilla Firefox\firefox.exe'
# download geckodriver.exe and put it in the same folder as this script
driver = webdriver.Firefox(executable_path=r'C:\geckodriver.exe', options=options)
# launch driver using the selenium webdriver and open the website
driver.get('https://www.caloriemama.ai/api')
# find the upload button element
upload = driver.find_element(By.CLASS_NAME, 'file-upload')
# auto upload the file
upload.send_keys(r"C:\pasta.jpg")
time.sleep(5)
# find the result element
result = driver.find_element(By.CLASS_NAME, 'group-name')
# print it in the console
print(f"Your dish is: {result.text}")
输出
1. 浏览器将自动启动
2. 图像将自动上传并提交进行识别
3. 结果将在终端输出
Your Dish is: Pasta
- 这个代码使用Selenium WebDriver库自动化了饮食辨识API Caloriemama API,该API可以辨识各种食物并提供它们对应的营养信息。
-
代码先导入了time、selenium和selenium.webdriver等必需的库。
-
然后导入了selenium.webdriver.common.by中的By类,用于在网页上定位元素。
-
接着,创建了Options类的一个新实例,用于设置Firefox浏览器选项。
-
将系统中Firefox二进制文件的路径设置为二进制位置选项,通过引用它来创建webdriver实例。
-
使用Firefox()方法创建一个新的Firefox驱动实例,它接受两个参数:geckodriver可执行文件的位置和选项。
-
然后,代码使用driver对象的get()函数访问Caloriemama API网站。
-
接着,代码通过driver对象的find_element()函数定位网页上的“Upload”按钮。
-
根据By.CLASS NAME参数,应使用类名找到该元素,而“file-upload”是上传按钮元素的类名。
-
在发现上传按钮后,调用upload对象上的send_keys()函数上传食物项目的图片。
-
将图片文件的路径作为参数传递给send_keys()。
-
然后使用time.sleep()函数将应用程序暂停5秒,以便Caloriemama API可以提交和处理图像。
-
然后使用find element()函数定位网页上的“Result”元素。同样,指定该元素应由其类名识别,使用By.CLASS NAME选项。
-
结果元素的名称为“group-name”。代码最后通过将文本格式化为“Your dish is: [result text]”,并使用print()方法将结果元素的文本打印到控制台,来结束代码。Caloriemama API检测到的食物项的名称将出现在结果文本中。
结论
该文章演示了如何使用Selenium WebDriver自动化上传食物图片到Caloriemama API,并获取食物的营养数据。开发者可以通过结合Selenium的自动化能力和Caloriemama的AI食物识别技术来构建可靠和准确的食物识别应用,帮助人们监控饮食并做出明智的营养决策。您可以根据本文中的技术说明,将此技术应用于自己的项目,并通过先进的食物识别功能改进您的应用程序。