從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號引腳
def setServo(servo,angle):#每次傳舵機引腳和角度
print('servo is work')
print('servo:%s,oldangle%s'%(servo,angle))
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(servo,GPIO.OUT)
p=GPIO.PWM(servo,50)
p.start(0)
p.ChangeDutyCycle(2.5+angle/360*20)
time.sleep(0.2)
p.stop()
GPIO.cleanup()
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%的緩沖部分 每次發現偏差移動一個角度,
if 72<=left/4<=160 and right/4<=88<=160:
pass
else:
if left/4 <=71:
angleBOTTOM+=1
else:
angleBOTTOM-=1
setServo(12,angleBOTTOM)
if 54<=top/4<=120 and bottom/4<=66<=120:
pass
else:
if top/4<=53:
angleTOP-=1
else:
angleTOP+=1
setServo(32,angleTOP)
6最后一定一定不要忘了關閉視窗釋放資源,
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video_capture.release()
cv2.destroyAllWindows()
需要完整代碼請私聊我或者對我上傳的資源進行下載,
五、RPi.gpio權限問題
如果你也是用的野生ubuntu鏡像 可能會出現運行人臉識別及操控舵機檔案時
如果用
python3 filename
則報錯 RPi.GPIO無權限
如果用
python3 filename
則出現找不到視頻流的問題
這里我已經解決問題 請參考我的博客
樹莓派ubuntuRPi.GPIO庫權限問題
總結
部分圖片來源于網路
csdn無法上傳視頻 但是本人以及驗證過 雖然在運動控制中并不是特別完美,但用來練手也是很有成就感的,如果在程序中出現問題歡迎留言或者私信我,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295553.html
標籤:AI