Я изменил размер кадра в видеоряде с коэффициентом 10, и он отлично работает. Также для ускорения процесса используйте Детектор лиц в каждом x
кадре, а затем используйте Отслеживание лиц вместо этого в x-1
кадрах между ними (Чтобы избежать дрейфа).
проверить эту ссылку: Отслеживание и обнаружение
А также, возможно, кому-то поможет пример кода (это простое обнаружение, не отслеживание или распознавание):
ЭТО ПРИМЕР ДЛЯ ANDROID, но он очень похож на opencv для других платформ и языков.
mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
int resizeFactor=10;//or any other number based on your input resolution
Imgproc.resize(mGray,mGray,newSize(mGray.width()/resizeFactor,mGray.height()/resizeFactor));
mRgba = proc(mRgba, mGray,resizeFactor);
И функция proc примерно такая - я нашел и обновил это из примера обнаружения лиц OpenCV4Android:
public Mat proc(Mat mRgba, Mat mGray, int resizeFactor) {
MatOfRect faces = new MatOfRect();
if (mJavaDetector != null)
mJavaDetector.detectMultiScale(mGray, faces, 1.1, 2, 2, new Size(0,0), new Size());//change this according to your usage-> Size(0, 0)
Rect[] facesArray = faces.toArray();
for (Rect rect : facesArray) {
Point t1 = rect.tl();
t1.x *= resizeFactor;
t1.y *= resizeFactor;
Point br = rect.br();
br.x *= resizeFactor;
br.y *= resizeFactor;
Imgproc.rectangle(mRgba, t1, br, FACE_RECT_COLOR, 3);
}
return mRgba;
}
Процессор, который я использовал: Snapdragon 720G
Также на соответствующем форуме я обнаружил, что LBP намного быстрее, чем HAAR. Я не уверен в этом, а также в производительности и качестве, но я подумал, что было бы неплохо упомянуть и этот момент.
person
Shamshirsaz.Navid
schedule
19.03.2021