电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>用Raspberry Pi的视觉识别事物

用Raspberry Pi的视觉识别事物

2022-12-26 | zip | 0.30 MB | 次下载 | 免费

资料介绍

描述

这篇文章包含制作您自己的图像分析器的说明。

硬件要求

  • 树莓派
  • 树莓派相机
  • 字符型液晶显示器
  • 跳线
  • 面包板
  • 电位计(如果您的 LCD 支持对比度调整)
  • 按钮

请检查下面的示意图以获取接线图。

软件要求

我们将在按下按钮时拍摄照片,然后将该图像上传到 Dropbox。然后,我们将从 Dropbox 获取可共享链接,并使用该照片链接调用 Microsoft Computer Vision APIAPI 调用返回的结果将显示在字符 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   

带有示例图片和结果链接的原始帖子

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费