package main
import (
"fmt"
"gocv.io/x/gocv"
)
func main() {
// 加载人脸检测器和关键点检测器
faceDetector := gocv.NewCascadeClassifier()
faceDetector.Load("haarcascade_frontalface_default.xml")
defer faceDetector.Close()
landmarkDetector := gocv.NewFacemarkLBF()
landmarkDetector.LoadModel("lbfmodel.yaml")
defer landmarkDetector.Close()
// 加载抬头检测器
headPoseEstimator := gocv.NewHeadPoseEstimator()
headPoseEstimator.Init("head_pose_estimation.yaml")
defer headPoseEstimator.Close()
// 读取图像文件
img := gocv.IMRead("test.jpg", gocv.IMReadColor)
// 转换为灰度图像
gray := gocv.NewMat()
defer gray.Close()
gocv.CvtColor(img, &gray, gocv.ColorBGRToGray)
// 在灰度图像中检测人脸
rects := faceDetector.DetectMultiScale(gray)
// 对每个检测到的人脸进行关键点和抬头检测
for _, r := range rects {
points := gocv.NewMat()
defer points.Close()
success := landmarkDetector.Fit(gray, r, &points)
if success {
// 进行抬头检测
pose := headPoseEstimator.EstimatePose(points)
fmt.Println("Yaw:", pose.Yaw)
fmt.Println("Pitch:", pose.Pitch)
fmt.Println("Roll:", pose.Roll)
}
}
}
请注意,在上面的示例中,需要将 haarcascade_frontalface_default.xml、lbfmodel.yaml 和 head_pose_estimation.yaml 文件放在与代码文件相同的目录下。你可以从 OpenCV 官网下载这些文件,或者在 GoCV 的 GitHub 仓库中找到它们。