[PATCH v1 2/3] libcamera: Add face detection controls
Harvey Yang
chenghaoyang at chromium.org
Fri Aug 23 15:07:34 CEST 2024
From: Yudhistira Erlandinata <yerlandinata at chromium.org>
Add FaceDetectMode, FaceDetectFaceRectangles, FaceDetectFaceScores,
and FaceDetectFaceLandmark. Also add ControlTypePoint for supporting
FaceDetectFaceLandmark.
BUG=b:308713855
TEST=emerge-geralt libcamera-mtkisp7
Signed-off-by: Yudhistira Erlandinata <yerlandinata at chromium.org>
Co-developed-by: becker hsieh <beckerh at chromium.org>
Co-developed-by: Harvey Yang <chenghaoyang at chromium.org>
---
include/libcamera/controls.h | 6 +++++
src/libcamera/control_ids_core.yaml | 42 +++++++++++++++++++++++++++++
src/libcamera/controls.cpp | 6 +++++
3 files changed, 54 insertions(+)
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 7c2bb2872..bf1b8609c 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -34,6 +34,7 @@ enum ControlType {
ControlTypeString,
ControlTypeRectangle,
ControlTypeSize,
+ ControlTypePoint,
};
namespace details {
@@ -87,6 +88,11 @@ struct control_type<Size> {
static constexpr ControlType value = ControlTypeSize;
};
+template<>
+struct control_type<Point> {
+ static constexpr ControlType value = ControlTypePoint;
+};
+
template<typename T, std::size_t N>
struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
};
diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml
index 6381970b4..5ff46c71e 100644
--- a/src/libcamera/control_ids_core.yaml
+++ b/src/libcamera/control_ids_core.yaml
@@ -860,6 +860,48 @@ controls:
No further state changes or lens movements will occur until the
AfPauseResume control is sent.
+ - FaceDetectMode:
+ type: uint8_t
+ description: |
+ Reporting mode of face detection.
+
+ enum:
+ - name: FaceDetectModeOff
+ value: 0
+ description: |
+ Pipeline should not report face detection result.
+ - name: FaceDetectModeSimple
+ value: 1
+ description: |
+ Pipeline should at least report faces boundary rectangles and
+ confidence score for each of them.
+
+ - FaceDetectFaceRectangles:
+ type: Rectangle
+ description: |
+ Boundary rectangle of the detected faces.
+
+ size: [n]
+
+ - FaceDetectFaceScores:
+ type: uint8_t
+ description: |
+ Confidence score of each of the detected faces by face detector.
+ The range of score is [0, 100], but usually those with low confidence
+ scores will not be included.
+ Currently identical to ANDROID_STATISTICS_FACE_SCORES.
+
+ size: [n]
+
+ - FaceDetectFaceLandmark:
+ type: Point
+ description: |
+ Array of human face landmark coordinates in format:
+ [..., left_eye_i, right_eye_i, mouth_i, left_eye_i+1, ...],
+ with i = index of face.
+
+ size: [n]
+
- HdrMode:
type: int32_t
description: |
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 11d35321c..ce73ae9d7 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -61,6 +61,7 @@ static constexpr size_t ControlValueSize[] = {
[ControlTypeString] = sizeof(char),
[ControlTypeRectangle] = sizeof(Rectangle),
[ControlTypeSize] = sizeof(Size),
+ [ControlTypePoint] = sizeof(Point),
};
} /* namespace */
@@ -255,6 +256,11 @@ std::string ControlValue::toString() const
str += value->toString();
break;
}
+ case ControlTypePoint: {
+ const Point *value = reinterpret_cast<const Point *>(data);
+ str += value->toString();
+ break;
+ }
case ControlTypeNone:
case ControlTypeString:
break;
--
2.46.0.295.g3b9ea8a38a-goog
More information about the libcamera-devel
mailing list