使用百度云智能SDK和樹莓派搭建簡易的人臉識別系統 Python語言版

硬件

  1. 樹莓派4B一個
  2. CSI攝像頭一個

筆者使用的是樹莓派4B和CSI攝像頭,但是樹莓派3和USB攝像頭等相似設備均可。

百度云智能設置

Step 1 登錄

百度云智能 網址https://cloud.baidu.com/

首先登錄百度賬號,與百度云、百度貼吧等互通,可直接掃碼登錄。如果沒有百度賬號請先自行注冊。

Step 2 實名認證

百度的產品用了這么多年了,想必大家都已經認證過了,沒有認證的讀者現在認證即可,很快。

Step 3 領取免費資源

實名認證之后可以領取免費的智能云資源,一定要領取,否則之后我們測試程序時會報qps不足,不知道在哪領取的話先往后看,后面也會有鏈接。

Step 4 創建應用

鼠標放到右上角的三道橫杠,依次選擇產品服務、人工智能、人臉識別。

在這里插入圖片描述

進來以后創建應用:
在這里插入圖片描述

沒有什么特別好說的,都無關乎我們的程序,按自己想的填寫即可:(注意前面沒有領取免費資源的話,可以在這里點擊去領取)

在這里插入圖片描述

Step 5 下載SDK

創建好應用后回到這個界面,點擊下載SDK,一會兒要用。

在這里插入圖片描述

本文采用Python語言實現,后續可能會出C++版本的教程,這里先直接選擇Python的SDK:

在這里插入圖片描述

Step 6 保存關鍵信息、創建組、新建用戶并上傳圖片

下載好后我們進入到應用詳情,首先保存好AppID、API Key、Secret Key三個字段的值,一會兒程序中要用。

在這里插入圖片描述

保存好后我們點擊左側的“可視化人臉庫”,然后根據頁面提示創建組、創建用戶、并上傳用戶的人臉圖片,這里筆者只上傳了一張自拍照,經測試在正常條件下也是可以識別出本人的。

到這里百度云智能的配置就告一段落了。

樹莓派攝像頭設置及必要視覺庫的安裝

Step 1 樹莓派及攝像頭的硬件安裝及開啟

首先我們將樹莓派和攝像頭安裝好,并通過raspi-config開啟攝像頭權限,不熟悉的同學可以參考博客:樹莓派攝像頭基礎配置及測試

Step 2 安裝必要的視覺庫

安裝picamera,這是樹莓派原生的圖像和攝像頭庫。

pip install picamera

這里假設大家已經安裝好python3。

安裝opencv,筆者的程序中使用opencv庫來做的圖像采集。

sudo apt-get install -y libopencv-dev python3-opencv 

如果要使用Python來使用GPIO信號,需要使用RPi.GPIO模塊。如果你使用的是Python2版本,樹莓派默認安裝了RPi.GPIO模塊(python-rpi.gpio)。

目前大多數的人都是使用Python3了,所以我們要手動安裝Python 3版本的模塊。

GPIO在本文中暫時不需要,但是還是安裝一下,以后可以通過GPIO傳輸控制信號玩法有很多,筆者私以為樹莓派最有魅力的一個點就在與除了可以看作一臺電腦,它還帶有豐富的GPIO接口。

sudo apt-get install python3-rpi.gpio

Step 3 安裝百度云智能相關模塊

安裝百度AI模塊

sudo pip install baidu-aip

安裝SDK,將下載好的人臉識別SDK解壓并安裝:

sudo python3 setup.py install

測試

首先創建一個客戶端來訪問百度云智能,這里傳入的參數就是剛才讓大家保存的幾個字段APP_ID, API_KEY, SECRET_KEY

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

以下是核心測試函數,筆者在代碼中做了比較詳細的注釋。


def check():stranger_count = 0while True:img_np = get_image()		# opencv讀取圖像img_base64 = image_to_base64(img_np)		# 將opencv讀取到的圖像轉base64編碼result = client.search(str(img_base64), 'base64', 'admin');    #在百度云人臉庫中尋找匹配的人臉if result['error_msg'] == 'SUCCESS':   # 如果成功了,說明檢測到人,但不一定是成員name = result['result']['user_list'][0]['user_id']    # 獲取名字score = result['result']['user_list'][0]['score']     # 獲取相似度分數# print(name, score)if score > 80:    #如果相似度大于80print('檢測到成員:{}, 匹配度:{}'.format(name, score))with open('Log.txt','a') as f:f.write('Person: {},\t score: {:.4f}\t, time: {}\n'.format(name, score, get_curr_time()))time.sleep(2)else:print("檢測到非成員,")name = 'stranger'stranger_count += 1stranger_path = os.path.join(STRANGER_DIR, str(stranger_count)+'.jpg')with open('Log.txt','a') as f:f.write('Person: {},\t saved as: {},\t time: {}\n'.format(name, stranger_path, get_curr_time()))cv2.imwrite(stranger_path, img_np)time.sleep(2)elif result['error_msg'] == 'pic not has face':print('未檢測到人臉')time.sleep(2)else:print(result['error_code']+' ' + result['error_code'])time.sleep(2)

Log.txt文件的部分輸出:

Person: stranger,	 saved as: strangers/16.jpg,	 time: Thu Aug  5 19:07:31 2021
Person: stranger,	 saved as: strangers/17.jpg,	 time: Thu Aug  5 19:07:34 2021
Person: Song,	 score: 95.0842	, time: Thu Aug  5 19:07:37 2021
Person: stranger,	 saved as: strangers/18.jpg,	 time: Thu Aug  5 19:07:43 2021

stranger是筆者請師哥露臉時的輸出。Song是筆者本人露臉的識別結果及分數。識別的精度還是可以滿足一般日常場景的需要的。

除了與百度之間的接口之外就是一些簡單控制邏輯,大家也可以自行設計一些控制邏輯,根據是否檢測到人臉、檢測到的人臉能否被識別為用戶組里的人臉來配合GPIO做一些控制邏輯,比如開關門、開關燈之類等智能家居,或者人臉識別打卡等。

后續筆者可能會做一個C++語言版的分享。

源碼地址:https://github.com/Adenialzz/Rpi-BaiduSDK/tree/main

有其他報錯或者困惑的朋友歡迎留言交流,有其他有趣的樹莓派或計算機視覺想法的朋友也歡迎留言討論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532835.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532835.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532835.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php 5.6 引用傳遞,升級到5.6.x后如何在php中修復引用傳遞

我最近將fom php 5.2升級到5.6,并且有一些代碼我無法修復://Finds users with the same ip- or email-addressfunction find_related_users($user_id) {global $pdo;//print_R($pdo);//Let SQL do the magic!$sth $pdo->prepare(CALL find_related_users(?));$…

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip arc

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed finding central directory 原因分析 這個報錯是出現在PyTorch在讀入模型參數時: checkpoint torch.load(epoch_15.pth, map_locationcpu)…

xp搭建 php環境,windows xp 下 LAMP環境搭建

1. apache安裝步驟如下圖在瀏覽器中輸入:localhost,出現下面頁面說明已成功安裝apache。2. mysql安裝如下圖顯示在運行里面輸入cmd ,然后連接測試mysql ,如圖所示:3. php安裝(1)將php壓縮包解壓到安裝路徑中的php目錄…

C++中的虛函數(表)實現機制以及用C語言對其進行的模擬實現

C中的虛函數(表)實現機制以及用C語言對其進行的模擬實現 聲明:本文非博主原創,轉自https://blog.twofei.com/496/,博主讀后受益良多,特地轉載,一是希望好文能有更多人看到,二是為了日后自己查閱。 前言 …

php 前端模板 yii,php – Yii2高級模板:添加獨立網頁

我在backend / views / site下添加了help.php,并在SiteController.php下聲明了一個能夠識別鏈接的函數public function behaviors(){return [access > [class > AccessControl::className(),rules > [[actions > [login, error],allow > true,],[actions > […

C++中數組和指針的關系(區別)詳解

C中數組和指針的關系(區別)詳解 本文轉自:http://c.biancheng.net/view/1472.html 博主在閱讀后將文中幾個知識點提出來放在前面: 沒有方括號和下標的數組名稱實際上代表數組的起始地址,這意味著數組名稱實際上就是…

安裝php獨立環境,0507-php獨立環境的安裝與配置 Web程序 - 貪吃蛇學院-專業IT技術平臺...

1.在一個純英文目錄下新建三個文件夾2.安裝apache(選擇好版本)過程中該填的按格式填好,其余的只更改安裝目錄即可如果報錯1901是安裝版本的問題。檢查:安裝完成后localhost打開為It works!添加到電腦屬性環境變量:3.將php文件解壓文檔放到AMP…

linux中PATH變量-詳細介紹

轉自:https://blog.csdn.net/haozhepeng/article/details/100584451 轉載者勘誤 原文最后提到的 echo 命令對于環境變量的修改無影響。這是肯定的,echo 命令相當于只是一個打印的函數(比如 Python 中的 print)。這里要修改環境變…

php assert eval,代碼執行函數之一句話木馬

前言大家好,我是阿里斯,一名IT行業小白。非常抱歉,昨天的內容出現瑕疵比較多,今天重新整理后再次發出,修改并添加了細節,另增加了常見的命令執行函數如果哪里不足,還請各位表哥指出。eval和asse…

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理

顯卡、顯卡驅動、CUDA、CUDA Toolkit、cuDNN 梳理 轉自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型號含義 顯卡: 簡單理解這個就是我們前面說的GPU,尤其指NVIDIA公司生產的GPU系列,因為后面介紹的…

php中msubstr,PHP學習:thinkphp中字符截取函數msubstr()用法分析

《PHP學習:thinkphp中字符截取函數msubstr()用法分析》要點:本文介紹了PHP學習:thinkphp中字符截取函數msubstr()用法分析,希望對您有用。如果有疑問,可以聯系我們。本文實例講述了thinkphp中字符截取函數msubstr()用法…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解決

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解決 轉自:https://blog.csdn.net/ibless/article/details/118610776 1 問題描述 此前,本人參考網上教程在VS Code中配置了“Remote SSH”插件(比如這…

Oracle閃回報錯,oracle 閃回區滿了,ORA-19815

oracle 閃回區滿了,查看日志報錯:ORA-19815,命令行輸入:sqlplus / as sysdbastartup mount //如果你的數據庫出現了無法連接的情況時,可以加上這句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 論文簡析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 論文簡析 論文:https://arxiv.org/abs/2108.05997 代碼:https://github.com/google-research/google-research/tree/master/musiq 概述 當前SOTA的IQA(圖像質量評估&#xff0…

安裝oracle不動了,windows2008安裝ORACLE到2%不動的問題 | 信春哥,系統穩,閉眼上線不回滾!...

最近又有網友遇到在windows2008服務器上安裝ORACLE軟件時到2%就卡住不動的問題,下面是該網友的描述:oralce 11g r2 windows server 2008 R2安裝到最后一步復制數據文件時卡到2% 不走了內存一直飆升求解決這個問題前段時間也有人遇到過,但是他…

手把手教你入門Git --- Git使用指南(Linux)

手把手教你入門Git — Git使用指南(Linux) 系統:ubuntu 18.04 LTS 本文所有git命令操作實驗具有連續性,git小白完全可以從頭到尾跟著本文所有給出的命令走一遍,就會對git有一個初步的了解,應當能做到會用并…

linux修改主機名后oracle em控制臺起不來,更改計算機名后導致Oracle dbconsole無法啟動問題解決方法...

今天不知道哪根筋搭歪了,看著Oracle EM控制臺的主機名WIN-LOSGI0TCOG0亂七八糟的很不爽,就把它給改了。然后Oracle EM就上不去了,Oracledbconsole服務起不來,我嘗試把所有“WIN-LOSGI0TCOG0”替換成“ggsjy”,找了好多…

Shell腳本多行換行報錯:- unrecognized arguments- \

shell error: unrecognized arguments: \ 在使用linux長命令時,我們通常會用一個shell腳本加\分行的形式來更清晰展示參數。 這時有一個注意事項:在\后必須緊跟回車, 否則會導致后面的參數無法傳入。因為這時程序會將后面的參數算作一條新命…

shell腳本長命令帶換行 注釋方法

shell腳本長命令帶換行 注釋方法 命令行傳參 在訓練深度學習網絡時,我們每次實驗通常會有許多超參數需要設置,如batch size, epoch, gpu id, arch甚至還有一些具體的模型結構等。這事我們通常使用python模塊argparse,在命令行進行傳參。 比…

php對中英文字符串進行截取,利用php怎么對中英文混合的字符串進行截取

利用php怎么對中英文混合的字符串進行截取發布時間:2021-01-04 15:31:24來源:億速云閱讀:103作者:Leah利用php怎么對中英文混合的字符串進行截取?很多新手對此不是很清楚,為了幫助大家解決這個難題&#xf…