从3D打印到python编程 从opencv到人脸识别 从win10到树莓派ubuntu (全教程附代码)
從3D打印到python編程,從opencv到人臉識別,從win10到樹莓派ubuntu。全教程附代碼。
- 前言
- 一、材料
- 二、3D打印舵機云臺
- 三、人臉識別 結合opencv顯示
- 四、代碼
- 五、RPi.gpio權限問題
- 總結
前言
看了標題有點蒙?沒關系其實就是基于野生ubuntu20.04的樹莓派鏡像結合人臉識別庫face_recognition庫 ,opencv庫和其它庫操控SG90舵機及打印出來的舵機云臺實現的人臉識別和云臺追蹤。在過程中遇見ubuntu 引腳庫權限問題,也一并解決了。
過程不易請多多點贊啊
一、材料
樹莓派
usb攝像頭
SG90舵機兩個
杜邦線
舵機云臺(可以根據教程3d打印也可以去某寶買一個)
二、3D打印舵機云臺
這過程可謂一波三折啊,翻車不斷接下來請欣賞翻車集錦。
我的理想
現實
第一次打印成品
不能稱之為成品,根本看不出來是啥。 分析問題是切片導出時出現了問題 而且第一次的時候厚度只打了1毫米還是兩毫米。最后就是這東西。
第二次打印
看起來有點像模像樣 其實根本就不合身,把舵機放上去就像讓小孩子穿大人衣服一樣 根本不合適啊喂。
第三次成品 看起來還行 但是在長度寬度還是有1-2毫秒的偏差
這張圖可以看見舵機底部并沒有貼緊
舵機:“我被架空了”
其實這樣的建模打印我已經重復了6-7次 只是有些并沒有留下照片。
后來我換了個云臺復刻
最后成品
(攝像頭是之前使用過的 上面是熱熔膠)
事后我對這件事進行了反思 我沒有系統的學習過建模 使用的是123D來建模。而關于SG90的參數網上參差不齊,云臺并不大,1-2毫米的偏差這套材料就報廢了,所以最開始都是手動測量,本身就存在極大誤差。關于建模我肯定會進行系統的學習,如果有機會后續我也會出相關教程,請關注我的博客。
是不是好奇為什么建模技術突飛猛進?因為網上有這個舵機的3D模型我直接拿來打印了哈哈哈哈。如果有需要模型的請私信我。
三、人臉識別 結合opencv顯示
這里不得不提到這個重要的庫
face_recognition
這是它在pypi上的主頁
pypi:face_recognition
具體使用方法在主頁都有介紹
再結合opencv來調用視頻,展示視頻及結果。
這里我訓練了兩個人臉。照片是x1 y1。
然后為了對程序進行了測試
我又找來了被遮擋的人臉,戴口罩的人臉,部分人臉進行測試
發現如果對人臉有部分遮擋是無法識別的,如果是半張臉也很難識別。
四、代碼
部分代碼參考官網github的例子。
這里附上樹莓派引腳圖
代碼分為六部分
1操控舵機
2人臉訓練及識別
3人臉框選
4視頻展示
5舵機移動
6釋放資源
1 操控舵機 這里我使用的是BOARD的編碼格式 信號引腳接的12和32號引腳
2人臉訓練及識別
yuan_image = face_recognition.load_image_file("y1.jpg") yuan_face_encoding = face_recognition.face_encodings(yuan_image)[0] # 訓練promis照片 promise_image = face_recognition.load_image_file("x1.jpg") promise_face_encoding = face_recognition.face_encodings(promise_image)[0] known_face_encodings = [yuan_face_encoding,promise_face_encoding ] known_face_names = ["yuan","promise" ]這里訓練了兩個人臉并起名一個是yuan 一個是promise。
3框選人臉并顯示識別的人名
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)4視頻展示 這需要調用opencv
ret, frame = video_capture.read()ret=video_capture.set(3,640)ret=video_capture.set(4,480)這是部分代碼我把視頻規定了大小。
5關于舵機運動規劃
我這里選取中間部分并取了5%的緩沖部分 每次發現偏差移動一個角度。
6最后一定一定不要忘了關閉窗口釋放資源。
if cv2.waitKey(1) & 0xFF == ord('q'):break video_capture.release() cv2.destroyAllWindows()需要完整代碼請私聊我或者對我上傳的資源進行下載。
五、RPi.gpio權限問題
如果你也是用的野生ubuntu鏡像 可能會出現運行人臉識別及操控舵機文件時
如果用
則報錯 RPi.GPIO無權限
如果用
python3 filename則出現找不到視頻流的問題
這里我已經解決問題 請參考我的博客
樹莓派ubuntuRPi.GPIO庫權限問題
總結
部分圖片來源于網絡
csdn無法上傳視頻 但是本人以及驗證過 雖然在運動控制中并不是特別完美,但用來練手也是很有成就感的,如果在過程中出現問題歡迎留言或者私信我。
總結
以上是生活随笔為你收集整理的从3D打印到python编程 从opencv到人脸识别 从win10到树莓派ubuntu (全教程附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DIY NAS服务器之OMV 5.6入坑
- 下一篇: 电动汽车的数据记录 BMS