gpt4 book ai didi

ios - 通过iOS中的摄像机实时流进行运动检测

转载 作者:行者123 更新时间:2023-12-01 19:00:58 26 4
gpt4 key购买 nike

我正在制作一个应用程序,其中我必须打开摄像机并跟踪摄像机实时视频/流中的运动。然后检测当前帧中的面部数量。

我已经使用CIDetector完成了人脸检测部分,但是无法进行运动检测。
谁能指导我怎么做。

我已经使用了GPUImage,但是它不支持多人脸检测。

最佳答案

我已经开发了一个类似的应用程序。我使用OpenCV进行运动检测和面部检测。该过程将涉及将Pixel Buffer ref转换为OpenCV Mat对象,将其转换为灰度并执行absDiff()和threshold()函数以计算两个图像之间的差异(运动)。

然后,您可以再次对脸部处理同一帧。这可能不如现在可以使用GPU加速进行运动检测的GPUImage高效。

    int motionValue;

// Blur images to reduce noise and equalize
cv::Mat processedFrame = cv::Mat(originFrame.size(), CV_8UC1);
cv::blur(originFrame, processedFrame, cv::Size(2,2));

// Get absolute difference image
cv::Mat diffMat;
cv::absdiff(processedFrame, prevFrame, diffMat);

// Apply threshold to each channel and combine the results
cv::Mat treshMat;
cv::threshold(diffMat, treshMat, kCCAlgorithmMotionSensitivity, 255, CV_THRESH_TOZERO);

// Find all contours
std::vector<std::vector<cv::Point> > contours;
cv::findContours(treshMat, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

// Count all motion areas
std::vector<std::vector<cv::Point> > intruders;
for (int i = 0; i < contours.size(); i++) {
double area = cv::contourArea(contours[i]);
//NSLog(@"Area %d = %f",i, area);
if (area > kCCAlgorithmMotionMinAreaDetection){
intruders.push_back(contours[i]);
motionValue += area;
}
}

关于ios - 通过iOS中的摄像机实时流进行运动检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22991667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com