国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        一文了解如何使用Opencv簡化面部地標檢測

        介紹今天我們將使用 OpenCV 和 MediaPipe 來檢測圖像中的468 個面部地標。

        OpenCV 是用于計算機視覺、機器學習和圖像處理的跨平臺開源庫,我們可以使用它來開發(fā)實時計算機視覺應用程序。它主要用于圖像或視頻處理以及分析,包括對象檢測、面部檢測等。

        面部地標用于定位和表示面部的重要區(qū)域,例如:嘴巴眼睛眉毛鼻子下頜線等應用面部地標有許多應用,例如:換臉如果我們在兩張不同的臉上估計了面部地標特征點,我們可以將一張臉與另一張臉對齊,然后我們可以將一張臉克隆到另一張臉上。

        面部變形面部地標可用于通過對齊可變形的面部來生成中間圖像。

        頭部姿勢估計一旦我們知道了一些面部地標點,那么我們也可以估計頭部的姿勢。

        MediaPipe Face Mesh即使在移動設備上,MediaPipe Face Mesh 也可以實時估計 468 個 3D 面部地標。通過應用機器學習 (ML) 來推斷 3D 表面幾何形狀,它只需要單個相機輸入,而無需專用的深度傳感器。它提供了更好的實時性能。面部地標模型3D 面部地標模型使用遷移學習,并在具有不同目標的網(wǎng)絡上進行訓練:該網(wǎng)絡預測合成渲染數(shù)據(jù)上的 3D 地標坐標。由此產(chǎn)生的網(wǎng)絡在現(xiàn)實世界的數(shù)據(jù)上表現(xiàn)得相當好。3D 地標網(wǎng)絡將輸入作為裁剪的視頻幀,而無需額外的深度輸入。

        該模型輸出 3D 點的位置,在輸入中合理對齊。幾何管線幾何管線是一個關鍵組件,它估計 3D Metric 空間內(nèi)的幾何對象。在每一幀上,分別執(zhí)行以下步驟:得到Metric 3D空間坐標,即將面部地標屏幕坐標轉(zhuǎn)換為Metric 3D空間坐標。面部姿態(tài)變換矩陣被估計為來自標準面部度量界標的剛性線性映射,然后將其發(fā)送到運行時面部度量界標中,以最小化兩者之間的差異。運行時面部度量地標創(chuàng)建一個面部網(wǎng)格。讓我們來實現(xiàn)它首先,讓我們檢查我們的網(wǎng)絡攝像頭 ID 是否工作正常,并在輸出屏幕上打印每秒幀數(shù) (fps)。import cv2
        import time
        cap = cv2.VideoCapture(0)
        pTime = 0
        while True:
        success, img = cap.read()
        imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        cTime = time.time()
        fps = 1/(cTime-pTime)
        pTime = cTime
        cv2.putText(img, f'FPS:{int(fps)}', (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("Test", img)
        cv2.waitKey(1)
        如果你有網(wǎng)絡攝像頭,它應該會打開一個窗口,否則你可以在“VideoCapture”功能中指定視頻路徑而不是零。在左上角,你可以看到 FPS(變化),如下所示。

        現(xiàn)在讓我們創(chuàng)建一個新的 python 文件并開始創(chuàng)建我們的面部地標檢測模塊。安裝所需的模塊。pip install opencv-python
        pip install mediapipe
        import cv2
        import mediapipe as mp
        import time
        cap = cv2.VideoCapture(0)
        pTime = 0
        NUM_FACE = 2
        mpDraw = mp.solutions.drawing_utils
        mpFaceMesh = mp.solutions.face_mesh
        faceMesh = mpFaceMesh.FaceMesh(max_num_faces=NUM_FACE)
        drawSpec = mpDraw.DrawingSpec(thickness=1, circle_radius=1)
        在上面的代碼中,我們從網(wǎng)絡攝像頭獲取輸入,變量“NUM_FACE”表示有多少面部要從幀中檢測和定位面部地標。要繪制面部點,我們使用 'mpDraw' 變量。我們將使用“mp.solutions.face_mesh”來創(chuàng)建面部網(wǎng)格。為了控制連接線和點的粗細,我們將使用“drawSpec”。while True:
           success, img = cap.read()
           imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
           results = faceMesh.process(imgRGB)
           if results.multi_face_landmarks:
               for faceLms in results.multi_face_landmarks:
                   mpDraw.draw_landmarks(img, faceLms,mpFaceMesh.FACE_CONNECTIONS, drawSpec, drawSpec)
        for id,lm in enumerate(faceLms.landmark):
        print(lm)
        ih, iw, ic = img.shape
        x,y = int(lm.x*iw), int(lm.y*ih)
        # uncomment the below line to see the 468 facial landmark
        # cv2.putText(img, str(id), (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0, 255, 0), 1)
        print(id, x,y)
        cTime = time.time()
        fps = 1/(cTime-pTime)
        pTime = cTime
        cv2.putText(img, f'FPS:{int(fps)}', (20,70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
        cv2.imshow("Test", img)
        cv2.waitKey(1)
        然后在 while 循環(huán)中讀取幀并將幀轉(zhuǎn)換為 RGB,將該圖像傳遞給“ *faceMesh.process()”,*然后在面部繪制檢測到的地標。為了看到468 個面部地標,取消對for loop 中的“cv2.putText()”函數(shù)的注釋。語句 ' print (id, x, y)'將打印出 id 和坐標。然后輸出如下。

        現(xiàn)在為了創(chuàng)建一個模塊,以便我們可以在不同的項目中使用它,首先我們需要創(chuàng)建一個包含函數(shù)的類。import cv2
        import mediapipe as mp
        import time
        NUM_FACE = 2
        class FaceLandMarks():
           def __init__(self, staticMode=False,maxFace=NUM_FACE, minDetectionCon=0.5, minTrackCon=0.5):
               self.staticMode = staticMode
               self.maxFace =  maxFace
               self.minDetectionCon = minDetectionCon
               self.minTrackCon = minTrackCon
               self.mpDraw = mp.solutions.drawing_utils
               self.mpFaceMesh = mp.solutions.face_mesh
               self.faceMesh = self.mpFaceMesh.FaceMesh(self.staticMode, self.maxFace, self.minDetectionCon, self.minTrackCon)
               self.drawSpec = self.mpDraw.DrawingSpec(thickness=1, circle_radius=1)
           def findFaceLandmark(self, img, draw=True):
               self.imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
               self.results = self.faceMesh.process(self.imgRGB)
               faces = []
               if self.results.multi_face_landmarks:
                   for faceLms in self.results.multi_face_landmarks:
                       if draw:
                           self.mpDraw.draw_landmarks(img, faceLms, self.mpFaceMesh.FACE_CONNECTIONS, self.drawSpec, self.drawSpec)
                       face = []
                       for id, lm in enumerate(faceLms.landmark):
                           # print(lm)
                           ih, iw, ic = img.shape
                           x, y = int(lm.x * iw), int(lm.y * ih)
                           #cv2.putText(img, str(id), (x,y), cv2.FONT_HERSHEY_SIMPLEX, 0.3, (0,255,0), 1)
                           #print(id, x, y)
                           face.a(chǎn)ppend([x,y])
                       faces.a(chǎn)ppend(face)
               return img, faces
        def main():
           cap = cv2.VideoCapture(0)
           pTime = 0
           detector = FaceLandMarks()
           while True:
               success, img = cap.read()
               img, faces = detector.findFaceLandmark(img)
               if len(faces)!=0:
                   print(len(faces))
               cTime = time.time()
               fps = 1 / (cTime - pTime)
               pTime = cTime
               cv2.putText(img, f'FPS:{int(fps)}', (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
               cv2.imshow("Test", img)
               cv2.waitKey(1)
        if __name__ == "__main__":
           main()

        結(jié)論

        在上面的代碼中,函數(shù)名稱是*“findFaceLandmarks”,它檢測面部地標并執(zhí)行與上述相同的功能。類“FaceLandMarks()”* 取靜態(tài)模式中,面部的最大數(shù)量和最小檢測置信度和最小的跟蹤置信度。然后創(chuàng)建 main 函數(shù)來運行代碼。

        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權(quán)或其他問題,請聯(lián)系舉報。

        發(fā)表評論

        0條評論,0人參與

        請輸入評論內(nèi)容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

        暫無評論

        暫無評論

          掃碼關注公眾號
          OFweek人工智能網(wǎng)
          獲取更多精彩內(nèi)容
          文章糾錯
          x
          *文字標題:
          *糾錯內(nèi)容:
          聯(lián)系郵箱:
          *驗 證 碼:

          粵公網(wǎng)安備 44030502002758號

          主站蜘蛛池模板: 成人福利午夜A片| 长寿区| 欧美顶级metart祼体全部自慰| 亚洲五月婷婷| 国产视频拍拍拍| 夜夜躁狠狠躁日日躁av| 麻豆熟妇乱妇熟色A片在线看| 午夜黄色| 在线熟女| 无遮挡网站| 老司机在线精品| 泗阳县| 邹城市| 无码午夜| 云梦县| 国产无码免费| 国产精品一二| 91露脸熟女对白不带套| 国产精品被狂躁到高潮| 固始县| 亚洲成人在线网站| 国产无码免费| 亚洲一区二区av| 襄樊市| 1024精品| 日韩AV免费在线观看| 欧美啊v| 丰满少妇大力进入| 普兰县| www.久草| 亚洲自拍电影| 上海集散中心旅游官网订票| 在线亚洲国模九九| 日韩无毛| 000000亚洲| 91精品福利| 精品九九视频| 99中文在线精品 | 粉嫩av懂色av蜜臀av熟妇| 欧美《熟妇做爰》HD| www.99|