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