nareshmlx/opencv-pr huggingface dataset:
**File:** modules/dnn/src/caffe/caffe_importer.cpp
**Change Type:** modified
**Context:** PR #26208: Modified Caffe parser to support the new dnn engine

**Code Changes:**
```diff
@@ -40,6 +40,7 @@
 //M*/
 
 #include "../precomp.hpp"
+#include "../net_impl.hpp"
 
 #ifdef HAVE_PROTOBUF
 #include <iostream>
@@ -53,8 +54,10 @@
 #include "caffe_io.hpp"
```

Review comment:
``` if(!newEngine) { addedBlobs.clear(); addedBlobs.reserve(layersSize + 1); } ```
**File:** modules/dnn/src/caffe/caffe_importer.cpp
**Change Type:** modified
**Context:** PR #26208: Modified Caffe parser to support the new dnn engine
**Review Line:** 758

**Code Changes:**
```diff
+        engine = engine_forced;
+
     CaffeImporter caffeImporter(prototxt.c_str(), caffeModel.c_str());
     Net net;
-    caffeImporter.populateNet(net);
+    caffeImporter.populateNet(net, engine == ENGINE_NEW || engine == ENGINE_AUTO);
     return net;
 }
 
 Net readNetFromCaffe(const char *bufferProto, size_t lenProto,
-                     const char *bufferModel, size_t lenModel)
```

Review comment:
What about fallback, if the new engine cannot handle the model?
**File:** modules/dnn/src/caffe/caffe_importer.cpp
**Change Type:** modified
**Context:** PR #26208: Modified Caffe parser to support the new dnn engine
**Review Line:** 758

**Code Changes:**
```diff
+        engine = engine_forced;
+
     CaffeImporter caffeImporter(prototxt.c_str(), caffeModel.c_str());
     Net net;
-    caffeImporter.populateNet(net);
+    caffeImporter.populateNet(net, engine == ENGINE_NEW || engine == ENGINE_AUTO);
     return net;
 }
 
 Net readNetFromCaffe(const char *bufferProto, size_t lenProto,
-                     const char *bufferModel, size_t lenModel)
```

Review comment:
Look like it is unnecessary. The parser doesn't fall in tests
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -70,6 +70,13 @@
     @{
         @defgroup features2d_hal_interface Interface
     @}
+
+    @defgroup features2d_annoy Approximate Nearest Neighbors Search in Multi-Dimensional Spaces
+
+    This section documents OpenCV's interface to the Annoy. Annoy (Approximate Nearest Neighbors Oh Yeah)
+    is a library to search for points in space that are close to a given query point. It also creates
+    large read-only file-based data structures that are mmapped into memory so that many processes may
```

Review comment:
ANNOY_DIST is inside AnnoyIndex, don't duplicate prefix => ANNIndex::DIST_EUCLIDEAN.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -70,6 +70,13 @@
     @{
         @defgroup features2d_hal_interface Interface
     @}
+
+    @defgroup features2d_annoy Approximate Nearest Neighbors Search in Multi-Dimensional Spaces
+
+    This section documents OpenCV's interface to the Annoy. Annoy (Approximate Nearest Neighbors Oh Yeah)
+    is a library to search for points in space that are close to a given query point. It also creates
+    large read-only file-based data structures that are mmapped into memory so that many processes may
```

Review comment:
use 'Approximate Nearest Neighbor Search' instead of 'Annoy' here
**File:** modules/features2d/test/test_nearestneighbors.cpp
**Change Type:** modified
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -330,4 +330,55 @@ TEST(Features2d_FLANN_Saved, regression) { CV_FlannSavedIndexTest test; test.saf
 
 #endif
 
+class CV_AnnoyTest : public NearestNeighborTest
+{
+public:
+    CV_AnnoyTest() : NearestNeighborTest(), index(NULL) {}
+
+protected:
```

Review comment:
The function should return void, if you want to use EXPECT_ macro. https://google.github.io/googletest/advanced.html#using-assertions-in-sub-routines
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
Let's use seed from OpenCV RNG.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
It's not safe solution. errorMsg is empty and msg will be nullptr or the allocated buffer size is unpredictable. In case of error it leads to extra memory corruption.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
The same issue with memory corruption.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
The same error.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
Why do you introduce seed range limitation?
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -0,0 +1,264 @@
+// This file is part of OpenCV project.
+// It is subject to the license terms in the LICENSE file found in the top-level directory
+// of this distribution and at http://opencv.org/license.html
+
+#include "precomp.hpp"
+#include "../3rdparty/annoy/annoylib.h"
+#include <opencv2/core/utils/logger.hpp>
+
+
```

Review comment:
you can easily get rid of memcpy if create `std::vector` from `indices.ptr<int>(i)` and `dists.ptr<DataType>(i)`.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN
**Review Line:** 54

**Code Changes:**
```diff
+    ANNIndexImpl(int dimension) : dim(dimension)
+    {
+        index = makePtr<::cvannoy::AnnoyIndex<int, DataType, DistanceType, Random, ::cvannoy::AnnoyIndexSingleThreadedBuildPolicy>>(dimension);
+    }
+
+    void addItems(InputArray _dataset) CV_OVERRIDE
+    {
+        CV_Assert(!_dataset.empty());
+
+        Mat features = _dataset.getMat();
+        CV_Assert(features.cols == dim);
```

Review comment:
I propose to return bool and print error to log, but not throw exception, if `addItems` was not successful.
**File:** modules/features2d/include/opencv2/features2d.hpp
**Change Type:** modified
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN

**Code Changes:**
```diff
@@ -70,6 +70,13 @@
     @{
         @defgroup features2d_hal_interface Interface
     @}
+
+    @defgroup features2d_annoy Approximate Nearest Neighbors Search in Multi-Dimensional Spaces
+
+    This section documents OpenCV's interface to the Annoy. Annoy (Approximate Nearest Neighbors Oh Yeah)
+    is a library to search for points in space that are close to a given query point. It also creates
+    large read-only file-based data structures that are mmapped into memory so that many processes may
```

Review comment:
The description does not match implementation. 1. The both outputs are optional. 2. The output is re-created, if it has unexpected size or type.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN
**Review Line:** 54

**Code Changes:**
```diff
+    ANNIndexImpl(int dimension) : dim(dimension)
+    {
+        index = makePtr<::cvannoy::AnnoyIndex<int, DataType, DistanceType, Random, ::cvannoy::AnnoyIndexSingleThreadedBuildPolicy>>(dimension);
+    }
+
+    void addItems(InputArray _dataset) CV_OVERRIDE
+    {
+        CV_Assert(!_dataset.empty());
+
+        Mat features = _dataset.getMat();
+        CV_Assert(features.cols == dim);
```

Review comment:
> I propose to return bool and print error to log, but not throw exception, if `addItems` was not successful. Ok. And do you think it's better to return bool and print error too for `build` and `knnSearch`? My thought to throw exception was that there might be possible users who do not check the flags and just do addItems->build->knnSearch in a row which might cause crash.
**File:** modules/features2d/src/annoy.cpp
**Change Type:** added
**Context:** PR #25708: Add interface to Annoy which will replace the FLANN
**Review Line:** 54

**Code Changes:**
```diff
+    ANNIndexImpl(int dimension) : dim(dimension)
+    {
+        index = makePtr<::cvannoy::AnnoyIndex<int, DataType, DistanceType, Random, ::cvannoy::AnnoyIndexSingleThreadedBuildPolicy>>(dimension);
+    }
+
+    void addItems(InputArray _dataset) CV_OVERRIDE
+    {
+        CV_Assert(!_dataset.empty());
+
+        Mat features = _dataset.getMat();
+        CV_Assert(features.cols == dim);
```

Review comment:
add_item returns false in a single case: if the state is loaded from file. So ignore my proposal, it's not relevant.
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 33

**Code Changes:**
```diff
+        {
+            auto a = __riscv_vle8_v_u8m1(src0 + i, vl);
+            __riscv_vsse8_v_u8m1(dst + i*cn, sizeof(uchar)*2, a, vl);
+        }
+        #if defined(__clang__)
+        #pragma clang loop vectorize(disable)
+        #endif
+        for( ; i < len; i++)
+            dst[i*cn] = src0[i];
+    }
+    else if( k == 2 )
```

Review comment:
Why do yoiu disable vectorization? Was it causing slowdown?
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 27

**Code Changes:**
```diff
+    int i = 0, j;
+    int vl = __riscv_vsetvlmax_e8m1();
+    if( k == 1 )
+    {
+        const uchar* src0 = src[0];
+        for( ; i <= len - vl; i += vl)
+        {
+            auto a = __riscv_vle8_v_u8m1(src0 + i, vl);
+            __riscv_vsse8_v_u8m1(dst + i*cn, sizeof(uchar)*2, a, vl);
+        }
+        #if defined(__clang__)
```

Review comment:
Did you try scalable vector length in the loop to avoid separate tail processing? Did it perform worse?
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 27

**Code Changes:**
```diff
+    int i = 0, j;
+    int vl = __riscv_vsetvlmax_e8m1();
+    if( k == 1 )
+    {
+        const uchar* src0 = src[0];
+        for( ; i <= len - vl; i += vl)
+        {
+            auto a = __riscv_vle8_v_u8m1(src0 + i, vl);
+            __riscv_vsse8_v_u8m1(dst + i*cn, sizeof(uchar)*2, a, vl);
+        }
+        #if defined(__clang__)
```

Review comment:
Yes, the scalable vector length loop is worse and I guess the reason is due to the `setvl` instruction inside the loop body.
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 33

**Code Changes:**
```diff
+        {
+            auto a = __riscv_vle8_v_u8m1(src0 + i, vl);
+            __riscv_vsse8_v_u8m1(dst + i*cn, sizeof(uchar)*2, a, vl);
+        }
+        #if defined(__clang__)
+        #pragma clang loop vectorize(disable)
+        #endif
+        for( ; i < len; i++)
+            dst[i*cn] = src0[i];
+    }
+    else if( k == 2 )
```

Review comment:
Yes, since it's actually quite short, vectorizing this loop will cause performance degradation. This is actually a ”tail“, but the static analysis of compiler does not know that it is the "tail".
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 1

**Code Changes:**
```diff
@@ -0,0 +1,363 @@
+#ifndef OPENCV_HAL_RVV_MERGE_HPP_INCLUDED
+#define OPENCV_HAL_RVV_MERGE_HPP_INCLUDED
+
+#include <riscv_vector.h>
+
+namespace cv { namespace cv_hal_rvv {
```

Review comment:
Need to add OpenCV license header
**File:** 3rdparty/hal_rvv/hal_rvv_1p0/merge.hpp
**Change Type:** added
**Context:** PR #26216: Add the HAL implementation for the merge function on RISC-V Vector.
**Review Line:** 1

**Code Changes:**
```diff
@@ -0,0 +1,363 @@
+#ifndef OPENCV_HAL_RVV_MERGE_HPP_INCLUDED
+#define OPENCV_HAL_RVV_MERGE_HPP_INCLUDED
+
+#include <riscv_vector.h>
+
+namespace cv { namespace cv_hal_rvv {
```

Review comment:
Do you mean the shorter version below, or another longer version? ``` // This file is part of OpenCV project. // It is subject to the license terms in the LICENSE file found in the top-level directory // of this distribution and at http://opencv.org/license.html. ```
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 53

**Code Changes:**
```diff
+    const _TpVec16F _vexp_p0_f16 = v_setall_<_TpVec16F>(1.9875691500E-4f);
+    const _TpVec16F _vexp_p1_f16 = v_setall_<_TpVec16F>(1.3981999507E-3f);
+    const _TpVec16F _vexp_p2_f16 = v_setall_<_TpVec16F>(8.3334519073E-3f);
+    const _TpVec16F _vexp_p3_f16 = v_setall_<_TpVec16F>(4.1665795894E-2f);
+    const _TpVec16F _vexp_p4_f16 = v_setall_<_TpVec16F>(1.6666665459E-1f);
+    const _TpVec16F _vexp_p5_f16 = v_setall_<_TpVec16F>(5.0000001201E-1f);
+
+    _TpVec16F _vexp_, _vexp_x, _vexp_y, _vexp_xx;
+    _TpVec16S _vexp_mm;
+    const _TpVec16S _vexp_bias_s16 = v_setall_<_TpVec16S>((short)0xf);
+
```

Review comment:
use `hfloat(xxxx.f)` to replace the input number `v_setall_<_TpVec16F>(hfloat(-6.93359375E-1f));`
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 207

**Code Changes:**
```diff
+    const _TpVec16F _vlog_p3_fp16 = v_setall_<_TpVec16F>(-1.2420140846E-1f);
+    const _TpVec16F _vlog_p4_fp16 = v_setall_<_TpVec16F>(1.4249322787E-1f);
+    const _TpVec16F _vlog_p5_fp16 = v_setall_<_TpVec16F>(-1.6668057665E-1f);
+    const _TpVec16F _vlog_p6_fp16 = v_setall_<_TpVec16F>(2.0000714765E-1f);
+    const _TpVec16F _vlog_p7_fp16 = v_setall_<_TpVec16F>(-2.4999993993E-1f);
+    const _TpVec16F _vlog_p8_fp16 = v_setall_<_TpVec16F>(3.3333331174E-1f);
+
+    _TpVec16F _vlog_x, _vlog_e, _vlog_y, _vlog_z, _vlog_tmp;
+    _TpVec16S _vlog_ux, _vlog_emm0;
+    const _TpVec16S _vlog_inv_mant_mask_s16 = v_setall_<_TpVec16S>((short)~0x7c00);
+
```

Review comment:
The same as above
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 246

**Code Changes:**
```diff
+    _vlog_y = v_mul(_vlog_y, _vlog_x);
+    _vlog_y = v_mul(_vlog_y, _vlog_z);
+
+    _vlog_y = v_fma(_vlog_e, _vlog_q1_fp16, _vlog_y);
+
+    _vlog_y = v_sub(_vlog_y, v_mul(_vlog_z, v_setall_<_TpVec16F>(0.5f)));
+
+    _vlog_x = v_add(_vlog_x, _vlog_y);
+    _vlog_x = v_fma(_vlog_e, _vlog_q2_fp16, _vlog_x);
+    // log(0) -> -INF
+    _TpVec16F mask_zero = v_eq(x, v_setzero_<_TpVec16F>());
```

Review comment:
The same as above
**File:** modules/core/include/opencv2/core/hal/intrin_math.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 217

**Code Changes:**
```diff
+
+    _vlog_ux = v_reinterpret_as_s16(x);
+    _vlog_emm0 = v_shr(_vlog_ux, 10);
+
+    _vlog_ux = v_and(_vlog_ux, _vlog_inv_mant_mask_s16);
+    _vlog_ux = v_or(_vlog_ux, v_reinterpret_as_s16(v_setall_<_TpVec16F>(0.5f)));
+    _vlog_x = v_reinterpret_as_f16(_vlog_ux);
+
+    _vlog_emm0 = v_sub(_vlog_emm0, v_setall_<_TpVec16S>((short)0xf));
+    _vlog_e = v_cvt_f16(_vlog_emm0);
+
```

Review comment:
The same as above
**File:** modules/core/include/opencv2/core/hal/intrin_neon.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 440

**Code Changes:**
```diff
 inline v_int8x16 v_reinterpret_as_s8(const v_##_Tpv& v) { return v_int8x16(vreinterpretq_s8_##suffix(v.val)); } \
@@ -435,6 +437,7 @@ OPENCV_HAL_IMPL_NEON_INIT(uint64x2, uint64, uint64, u64)
 OPENCV_HAL_IMPL_NEON_INIT(int64x2, int64, int64, s64)
 #if CV_SIMD128_FP16
 OPENCV_HAL_IMPL_NEON_INIT(float16x8, hfloat, __fp16,  f16);
+template <> inline v_float16x8 v_setall_(float v) { return v_setall_f16((hfloat)v); }
 #define OPENCV_HAL_IMPL_NEON_INIT_FP16(_Tpv, suffix) \
 inline v_float16x8 v_reinterpret_as_f16(const v_##_Tpv& v) { return v_float16x8(vreinterpretq_f16_##suffix(v.val)); }
 OPENCV_HAL_IMPL_NEON_INIT_FP16(uint8x16, u8)
@@ -3030,6 +3033,28 @@ inline void v_pack_store(hfloat* ptr, const v_float32x4& v)
 
```

Review comment:
Should be removed
**File:** modules/core/test/test_intrin_utils.hpp
**Change Type:** modified
**Context:** PR #26358: 5.x merge 4.x - No changes in opencv_contrib and opencv_extra. Manual changes: - Fixed f16 in universal intrinsics for ARM, e.g. `template ...
**Review Line:** 2171

**Code Changes:**
```diff
+    TheTest &test_sincos_fp16() {
+#if 0 // CV_SIMD_FP16
+        hfloat flt16_min;
+        uint16_t flt16_min_hex = 0x0400;
+        std::memcpy(&flt16_min, &flt16_min_hex, sizeof(hfloat));
+        __test_sincos((hfloat) 1e-3, flt16_min);
+#endif
+        return *this;
+    }
+
+    TheTest &test_sincos_fp32() {
```

Review comment:
release the threshold from `1e-3` to `1e-2`
**File:** doc/tutorials/introduction/linux_eclipse/linux_eclipse.markdown
**Change Type:** modified
**Context:** PR #26405: Rename features2d - This PR renames the module _features2d_ to _features_ as one of the Big OpenCV Cleanup #25007. Related PR: opencv/openc...

**Code Changes:**
```diff
@@ -111,7 +111,7 @@ Making a project
             on the list below are enough (for simple applications) . In my case, I am putting all of them
             since I plan to use the whole bunch:
 
-            opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui opencv_ml opencv_videoio opencv_video opencv_features2d
+            opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui opencv_videoio opencv_video opencv_features
             opencv_3d opencv_objdetect opencv_flann
 
             ![](images/a10.png)
@@ -123,7 +123,7 @@ Making a project
```

Review comment:
-lopencv_ml is not there any more. calib3d also split on 3d, calib and stereo.
**File:** platforms/js/opencv_js.config.py
**Change Type:** modified
**Context:** PR #26405: Rename features2d - This PR renames the module _features2d_ to _features_ as one of the Big OpenCV Cleanup #25007. Related PR: opencv/openc...

**Code Changes:**
```diff
@@ -151,7 +151,7 @@
        '': ['readNetFromCaffe', 'readNetFromTensorflow', 'readNetFromDarknet',
             'readNetFromONNX', 'readNetFromTFLite', 'readNet', 'blobFromImage']}
 
-features2d = {'Feature2D': ['detect', 'compute', 'detectAndCompute', 'descriptorSize', 'descriptorType', 'defaultNorm', 'empty', 'getDefaultName'],
+features = {'Feature2D': ['detect', 'compute', 'detectAndCompute', 'descriptorSize', 'descriptorType', 'defaultNorm', 'empty', 'getDefaultName'],
               'ORB': ['create', 'setMaxFeatures', 'setScaleFactor', 'setNLevels', 'setEdgeThreshold', 'setFastThreshold', 'setFirstLevel', 'setWTA_K', 'setScoreType', 'setPatchSize', 'getFastThreshold', 'getDefaultName'],
               'MSER': ['create', 'detectRegions', 'setDelta', 'getDelta', 'setMinArea', 'getMinArea', 'setMaxArea', 'getMaxArea', 'setPass2Only', 'getPass2Only', 'getDefaultName'],
               'FastFeatureDetector': ['create', 'setThreshold', 'getThreshold', 'setNonmaxSuppression', 'getNonmaxSuppression', 'setType', 'getType', 'getDefaultName'],
@@ -210,7 +210,7 @@
```

Review comment:
`Feature2D` is class name, but not module name. SHould be reverted.
**File:** samples/java/sbt/src/main/scala/ScalaCorrespondenceMatchingDemo.scala
**Change Type:** modified
**Context:** PR #26405: Rename features2d - This PR renames the module _features2d_ to _features_ as one of the Big OpenCV Cleanup #25007. Related PR: opencv/openc...
**Review Line:** 3

**Code Changes:**
```diff
@@ -1,10 +1,10 @@
 import org.opencv.imgcodecs.Imgcodecs
-import org.opencv.features2d.DescriptorExtractor
-import org.opencv.features2d.Features2d
+import org.opencv.features.DescriptorExtractor
+import org.opencv.features.Features
 import org.opencv.core.MatOfKeyPoint
 import org.opencv.core.Mat
-import org.opencv.features2d.FeatureDetector
-import org.opencv.features2d.DescriptorMatcher
+import org.opencv.features.FeatureDetector
```

Review comment:
Features2d is class name, should be reverted.
**File:** samples/python/plane_tracker.py
**Change Type:** modified
**Context:** PR #26405: Rename features2d - This PR renames the module _features2d_ to _features_ as one of the Big OpenCV Cleanup #25007. Related PR: opencv/openc...

**Code Changes:**
```diff
@@ -4,7 +4,7 @@
 Multitarget planar tracking
 ==================
 
-Example of using features2d framework for interactive video homography matching.
+Example of using "features" framework for interactive video homography matching.
 ORB features and FLANN matcher are used. This sample provides PlaneTracker class
 and an example of its usage.
 
```

Review comment:
I propose to use quotes "features" module.