资料介绍
描述
这篇文章包含制作您自己的图像分析器的说明。
硬件要求
- 树莓派
- 树莓派相机
- 字符型液晶显示器
- 跳线
- 面包板
- 电位计(如果您的 LCD 支持对比度调整)
- 按钮
请检查下面的示意图以获取接线图。
软件要求
我们将在按下按钮时拍摄照片,然后将该图像上传到 Dropbox。然后,我们将从 Dropbox 获取可共享链接,并使用该照片链接调用 Microsoft Computer Vision API。API 调用返回的结果将显示在字符 LCD 上。
安装依赖项
Adafruit Python CharLCD 库
从以下 Github 链接获取 LCD 库。
https://github.com/adafruit/Adafruit_Python_CharLCD
CD 到下载的文件夹并运行以下命令。
sudo python3 setup.py install
要求
sudo pip3 install requests
投递箱
登录您的保管箱帐户并创建一个应用程序来存储捕获的图像。您还需要一个访问令牌。以下链接可能会有所帮助。
通过键入以下命令安装 dropbox python 客户端库
sudo pip3 install dropbox
获取计算机视觉 API(订阅)密钥以进行 API 调用
您可以通过访问以下链接获取免费订阅密钥。在撰写本文时,Microsoft 允许每月进行 5000 次免费交易
Python 3 代码
导入依赖项
import RPi.GPIO as GPIO
import picamera
import Adafruit_CharLCD as LCD
import os.path
import time
import requests
import dropbox
import json
调用 API 的变量
使用您之前获得的密钥更新 subscription_key 变量。
subscription_key = 'YOUR_Subscription_KEY'
# URL will be mentioned when you obtain your
url = "https://westcentralus.api.cognitive.microsoft.com/vision/v1.0/analyze"
Dropbox 的访问令牌
access_token = 'YOUR_ACCESS_TOKEN'
树莓派开发板
GPIO.setmode(GPIO.BCM)
按钮设置
btn = 16
GPIO.setup(btn, GPIO.IN, pull_up_down=GPIO.PUD_UP)
驱动 LCD 的变量
对应的 Raspberry Pi GPIO 引脚用于 LCD 上的寄存器选择、指令和数据寄存器。稍后我们将使用这些变量来初始化 LCD。
lcd_rs = 4
lcd_en = 17
lcd_d4 = 25
lcd_d5 = 24
lcd_d6 = 23
lcd_d7 = 18
LCD 的尺寸,如果您有 16x2 的字符 LCD,则将 lcd_columns 变量修改为 16,将 lcd_rows 修改为 2。由于我使用的是 20x4 LCD,因此我将使用以下值。
lcd_columns = 20
lcd_rows = 4
初始化
通过调用 Dropbox、Adafruit 和 picamera 库提供的构造方法来初始化 Dropbox、LCD 和相机。如果您的 LCD 支持背光,那么您可以传入一个附加参数 backlight = 1 或 backlight = 0 来打开或关闭它。
# Initilaize Dropbox
dbx = dropbox.Dropbox(access_token)
# Initialize the LCD using the pins above by calling the construct method of Adafruit LCD library
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows)
# Initialize the camera
cam = picamera.PiCamera()
主函数
main() 函数是程序启动时第一个被调用的函数。它等待按钮按下,当按下按钮时,它调用其他函数来捕获图像,将其上传到保管箱,获取上传的图像链接,然后最后调用 predict_contents() 函数,该函数调用 Vision API 并在 LCD 上显示结果。当用户再次按下按钮时,在最后一步调用 main() 函数以执行相同的步骤。
def main():
while True:
cam.capture('image.jpg')
display_message('Uploading..')
upload_image()
display_message('Generating Image', 'link..')
image_url = get_image_url()
display_message('Analysing..')
predict_contents(image_url)
main()
下面将更详细地描述此处使用的每个函数。
display_message() 函数
display_function() 函数利用 Adafruit LCD 库提供的 message() 函数。调用它时最多可以传入四个字符串,它会在新行上显示每个字符串。但是,如果您只传入 line1 参数,它将在多行中显示消息。lcd.clear()
将清除 LCD 上的任何现有文本 lcd.home()
并将光标移至第 1 行和第 1 列。
def display_message(line1 = '', line2 = '', line3 = '', line4 = ''):
lcd.clear() # Clear the display
lcd.home() # Bring cursor to row 1 and column 1
if(line1 != '' and line2 == '' and line3 == '' and line4 == ''):
lcd.message(line1)
else:
lcd.message(line1 + '\n' + line2 + '\n' + line3 + '\n' + line4)
upload_image() 函数
这段代码在命名的工作目录中获取先前捕获的图像image.jpg
并将其上传到 dropbox。
def upload_image():
remote_file = '/image.jpg'
f = open(local_file, 'rb')
dbx.files_upload(f.read(), remote_file, mode=dropbox.files.WriteMode.overwrite)
get_image_url() 函数
此函数向 Dropbox 发出发布请求,以获取我们在上一步上传的图像的可共享链接。然后将结果转换为 JSON。image_url.replace('www', 'dl')
以便可以下载。此步骤是必要的,否则图像会在 Dropbox Web 应用程序中打开。此处使用之前从 Dropbox 获取的访问令牌对请求进行身份验证。
def get_image_url():
headers = {
'Authorization': 'Bearer ' + access_token,
'Content-Type': 'application/json'
}
data = {
"path": "/image.jpg"
}
r = requests.post('https://api.dropboxapi.com/2/sharing/create_shared_link', headers=headers, data=json.dumps(data))
image_url = r.json()['url']
image_url = image_url.replace('www', 'dl')
return image_url
predict_contents(image_url) 函数
该函数将之前获取的图片链接作为参数传入计算机视觉API。订阅密钥用于对请求进行身份验证,visualFeatures
参数包含有关我们要在图像中分析哪些特征的详细信息。Vision API 应用机器学习来识别图像并返回结果。标题最好用一个句子概括图像,标签包含有关图像中有哪些特征的信息。前 8 个最有信心的标签显示在 LCD 上的标题后。
def predict_contents(image_url):
params = {'visualFeatures': 'Description'}
data = {'url': image_url}
response = requests.post(url, headers=headers, params=params, json=data)
response.raise_for_status()
image_desc = response.json()['description']['captions'][0]['text']
image_tags = response.json()['description']['tags']
display_message(image_desc)
time.sleep(5)
display_message('{}, {},'.format(image_tags[0], image_tags[1]), '{}, {},'.format(image_tags[2], image_tags[3]), '{}, {},'.format(image_tags[4], image_tags[5]), '{}, {}'.format(image_tags[6], image_tags[7]),)
time.sleep(10)
我们应用程序的起点
这是我们调用main()
函数并在程序停止时显示“程序停止”的地方。
try:
main()
finally:
display_message('Program Stopped.')
运行应用程序
最后,我们到了启动程序并享受拍照的乐趣。https://github.com/dsdilpreet/blog/blob/master/recognize-things-with-raspberry-pi-vision
从 github 下载文件,打开终端并 cd 进入下载文件所在的文件夹并运行以下命令。
python3 app.py
带有示例图片和结果链接的原始帖子
- 使用Google Coral和Raspberry Pi进行ML鸟类识别
- Raspberry Pi 4上带Respeaker的离线语音识别
- 用Raspberry Pi和圆形樱桃派计算Pi
- 用Raspberry Pi和Arduino Micro制作的虚拟窥视孔
- Raspberry Pi和Arduino上的手写数字识别
- 可视频直播的Raspberry Pi网络控制机器人 14次下载
- 树莓派Raspberry Pi 3 Model B+的电路原理图免费下载 179次下载
- 树莓派Raspberry Pi 4 Model B的电路原理图免费下载 409次下载
- 树莓派Raspberry Pi 3 Model B的电路原理图免费下载 187次下载
- Raspberry Pi树莓派使用说明总结资料免费下载
- 《爱上Raspberry Pi》中译版-电子书籍.pdf 0次下载
- Instant Raspberry Pi Gaming 6次下载
- Raspberry_Pi详解 15次下载
- raspberry_pi各版本差别 0次下载
- Getting Started with Raspberry Pi 0次下载
- 基于Raspberry Pi 5的蜂窝物联网项目 1027次阅读
- 使用Raspberry Pi Pico W和MicroPython开发物联网应用 1673次阅读
- 用于测试项目的4个最佳树莓派Raspberry Pi模拟器 5985次阅读
- 如何使用Raspberry Pi使热水浴缸变得智能和远程操作 1813次阅读
- 如何通过Raspberry Pi设置CE电流监视器 2120次阅读
- 基于树莓派产品 Raspberry Pi微控制器板的优缺点 2710次阅读
- 如何将Raspberry Pi相机用作Bash脚本的一部分? 1806次阅读
- 基于Raspberry Pi Pico开发先进的家庭自动化系统 2849次阅读
- 基于FONA通过UART与Raspberry Pi进行通讯的方案介绍 2122次阅读
- 微雪电子ZeroW| Raspberry Pi ZeroW主板简介 2429次阅读
- 微雪电子Raspberry Pi 3 Model主板简介 2873次阅读
- 微雪电子Raspberry Pi 3 Model扩展板简介 1512次阅读
- 利用Raspberry Pi构建存储和虚拟化时间序列数据 884次阅读
- 一文了解Raspberry Pi 4各项性能跑分 2.9w次阅读
- 视觉享受!用Raspberry Pi实现圣诞树灯光秀 8127次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多