【ROS】OpenCV+ROS 實現人臉識別(Ubantu16.04)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import rospy
import cv2
import numpy as np
from sensor_msgs.msg import Image, RegionOfInterest
from cv_bridge import CvBridge, CvBridgeError
class faceDetector:
def __init__(self):
rospy.on_shutdown(self.cleanup);
# 建立 cv_bridge
self.bridge = CvBridge()
self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
# 獲取 haar 特徵的級聯表的 XML 檔案,檔案路徑在 launch 檔案中傳入
cascade_1 = rospy.get_param("~cascade_1", "")
cascade_2 = rospy.get_param("~cascade_2", "")
# 使用級聯表初始化 haar 特徵檢測器
self.cascade_1 = cv2.CascadeClassifier(cascade_1)
self.cascade_2 = cv2.CascadeClassifier(cascade_2)
# 設定級聯表的引數,最佳化人臉識別,可以在 launch 檔案中重新配置
self.haar_scaleFactor = rospy.get_param("~haar_scaleFactor", 1.2)
self.haar_minNeighbors = rospy.get_param("~haar_minNeighbors", 2)
self.haar_minSize = rospy.get_param("~haar_minSize", 40)
self.haar_maxSize = rospy.get_param("~haar_maxSize", 60)
self.color = (50, 255, 50)
# 初始化訂閱 rgb 格式影像資料的訂閱者,此處影像 topic 的話題名可以在 launch 檔案中重對映
self.image_sub = rospy.Subscriber("input_rgb_image", Image, self.image_callback, queue_size=1)
def image_callback(self, data):
# 使用 cv_bridge 將 ROS 的影像資料轉換成 OpenCV 的影像格式
try:
cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
frame = np.array(cv_image, dtype=np.uint8)
except CvBridgeError, e:
print e
# 建立灰度影像
grey_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 建立平衡直方圖,減少光線影響
grey_image = cv2.equalizeHist(grey_image)
# 嘗試檢測人臉
faces_result = 外匯跟單gendan5.comself.detect_face(grey_image)
# 在 opencv 的視窗中框出所有人臉區域
if len(faces_result)>0:
for face in faces_result:
x, y, w, h = face
cv2.rectangle(cv_image, (x, y), (x+w, y+h), self.color, 2)
# 將識別後的影像轉換成 ROS 訊息併發布
self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
def detect_face(self, input_image):
# 首先匹配正面人臉的模型
if self.cascade_1:
faces = self.cascade_1.detectMultiScale(input_image,
self.haar_scaleFactor,
self.haar_minNeighbors,
cv2.CASCADE_SCALE_IMAGE,
(self.haar_minSize, self.haar_maxSize))
# 如果正面人臉匹配失敗,那麼就嘗試匹配側面人臉的模型
if len(faces) == 0 and self.cascade_2:
faces = self.cascade_2.detectMultiScale(input_image,
self.haar_scaleFactor,
self.haar_minNeighbors,
cv2.CASCADE_SCALE_IMAGE,
(self.haar_minSize, self.haar_maxSize))
return faces
def cleanup(self):
print "Shutting down vision node."
cv2.destroyAllWindows()
if __name__ == '__main__':
try:
# 初始化 ros 節點
rospy.init_node("face_detector")
faceDetector()
rospy.loginfo("Face detector is started..")
rospy.loginfo("Please subscribe the ROS image.")
rospy.spin()
except KeyboardInterrupt:
print "Shutting down face detector node."
cv2.destroyAllWindows()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2907015/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Linux學習】OpenCV+ROS 實現人臉識別(Ubantu16.04)LinuxOpenCVROS
- 基於Android平臺實現人臉識別Android
- 如何用Excel 9步實現CNN人臉識別ExcelCNN
- matlab實現人臉識別(數學基礎原理)Matlab
- opencv 人臉識別OpenCV
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- 手把手教你實現人臉識別,有手就行
- 64行程式碼實現簡單人臉識別行程
- 虹軟人臉識別ArcSoft3.0NodeJs 版本實現NodeJS
- 人臉檢測識別,人臉檢測,人臉識別,離線檢測,C#原始碼C#原始碼
- 【opencv3】 svm實現手寫體與人臉識別OpenCV
- 妙招:使用Python實現圖片在人臉識別並顯示Python
- 人臉識別之特徵臉方法(Eigenface)特徵
- Mars演算法實踐——人臉識別演算法
- 人臉識別檢測專案實戰
- C#人臉識別入門篇-STEP BY STEP人臉識別--入門篇C#
- 智慧人臉識別門禁系統開發,人臉識別開鎖流程
- 基於mtcnn/facenet/tensorflow實現人臉識別登入系統CNN
- 前端人臉識別--兩張臉相似度前端
- python—呼叫API人臉識別PythonAPI
- python ubuntu dlib人臉識別3-人臉對齊PythonUbuntu
- 人臉活體檢測人臉識別:眨眼+張口
- 支小蜜人臉識別消費系統助力學校食堂實現“刷臉吃飯”
- 人臉識別之Python DLib庫進行人臉關鍵點識別Python
- 如何快速實現人臉識別通道?一文了解具體技巧
- 乾貨 | AI人臉識別之人臉搜尋AI
- 人臉識別智慧考勤系統開發_人臉識別考勤管理系統開發
- 美軍開發遠端人臉識別系統,實現1公里內目標識別
- 前端如何玩轉人臉識別前端
- 人臉識別技術應用
- Python人臉識別微笑檢測Python
- 從零玩轉人臉識別
- 基於開源模型搭建實時人臉識別系統(四):人臉質量模型
- 基於開源模型搭建實時人臉識別系統(五):人臉跟蹤模型
- Python實現人臉識別功能,face_recognition的使用 | 機器學習Python機器學習
- 人臉識別之人臉檢測的重要性
- “這個裝置憑藉人臉識別或者語音播報,實現無人操作。
- 保障人臉安全!頂象釋出《人臉識別安全白皮書》