資料介紹
描述
這篇文章包含制作您自己的圖像分析器的說明。
硬件要求
- 樹莓派
- 樹莓派相機
- 字符型液晶顯示器
- 跳線
- 面包板
- 電位計(如果您的 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次下載 | 免費
評論
查看更多