update header for Doxygen
[platform/framework/native/vision.git] / inc / FUixVisionImageFeatureManager.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18
19 /**
20  * @file     FUixVisionImageFeatureManager.h
21  * @brief    This is the header file for the %ImageFeatureManager class.
22  *
23  * This header file contains the declarations of the %ImageFeatureManager class.
24  */
25
26 #ifndef _FUIX_VISION_IMAGE_FEATURE_MANAGER_H_
27 #define _FUIX_VISION_IMAGE_FEATURE_MANAGER_H_
28 #include <FBaseObject.h>
29 #include <FBase.h>
30 #include <FGrpBitmap.h>
31 #include <FUixVisionImageFeatureInfo.h>
32 #include <FMedia.h>
33
34 namespace Tizen { namespace Uix { namespace Vision
35 {
36
37 /**
38  * @class    ImageFeatureManager
39  * @brief    This class provides methods to generate individual feature data from an individual image data and collect to feature set file.
40  *
41  * @since    2.1
42  *
43  * The %ImageFeatureManager class provides methods to generate individual feature data from an individual image data. This class also provides methods to manage image feature set which is a collection of individual feature data.
44  *
45  * The following example demonstrates how to use the %ImageFeatureManager class.
46  *
47  * @code
48  * 
49  * #include <FBase.h>
50  * #include <FUix.h>
51  * #include <FGraphics.h>
52  * #include <FIo.h>
53  * #include <FMedia.h>
54  *
55  * using namespace Tizen::Base;
56  * using namespace Tizen::Media;
57  * using namespace Tizen::Graphics;
58  * using namespace Tizen::Io;
59  * using namespace Tizen::Uix::Vision;
60  *
61  * class MyClass
62  * {
63  *
64  * public:
65  *      MyClass();
66  *      ~MyClass();
67  *      result GenerateFeatureSet(void);
68  *      result AddImageFeatureSet(void);
69  * };
70  *
71  * result
72  * MyClass::GenerateFeatureSet(void)
73  * {
74  *     result r;
75  *     ImageFeatureManager imageFeatureManager;
76  *     r = imageFeatureManager.Construct();
77  *     //Creating new feature set
78  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image1.jpg");
79  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image2.jpg");
80  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image3.jpg");
81  *     r = imageFeatureManager.Flush(new String("/opt/usr/media/Images/testFeatureSet.xdb"));
82  *
83  *     return r;
84  * }
85  *
86  * result
87  * MyClass::AddImageFeatureSet()
88  * {
89  *     result r;
90  *     ImageFeatureManager imageFeatureManager;
91  *     imageFeatureManager.Construct();
92  *     imageFeatureManager.Load("/opt/usr/media/Images/testFeatureSet.xdb");
93  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image1.jpg");
94  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image2.jpg");
95  *     imageFeatureManager.AddFeature("/opt/usr/media/Images/image3.jpg");
96  *     r = imageFeatureManager.Flush();
97  *
98  *     return r;
99  * }
100  * @endcode
101  */
102 class _OSP_EXPORT_ ImageFeatureManager
103     : public Tizen::Base::Object
104 {
105 public:
106
107     /**
108      * This is the default constructor for this class. @n
109      * The object is not fully constructed after this constructor is called. @n
110      * For full construction, the Construct() method must be called right after calling this constructor.
111      *
112      * @since    2.1
113      */
114     ImageFeatureManager(void);
115
116     /**
117      * This is the destructor for this class. @n
118      * The resources are deallocated by this method.
119      * This destructor overrides Tizen::Base::Object::~Object().
120      *
121      * @since    2.1
122      */
123     ~ImageFeatureManager(void);
124
125     /**
126      * Initializes this instance of %ImageFeatureManager and create image feature set. @n
127      * Every application must call %Construct() before calling any other methods of %ImageFeatureManager.
128      *
129      * @since       2.1
130      *
131      * @feature     %http://tizen.org/feature/vision.image_recognition
132      *
133      * @return      An error code
134      *
135      * @exception   E_SUCCESS          The method is successful.
136      * @exception   E_UNSUPPORTED_OPERATION   The Emulator or target device does not support the required feature. 
137      * For more information, see <a href="../org.tizen.gettingstarted/html/tizen_overview/application_filtering.htm">Application Filtering</a>.
138      * @remarks     Before calling this method, check whether the feature is supported by 
139          *                      Tizen::System::SystemInfo::GetValue(const Tizen::Base::String&, bool&).
140      */
141     result Construct(void);
142
143     /**
144      * Loads a feature set file.
145      *
146      * @since       2.1
147      *
148      * @return      An error code
149      *
150      * @param[in]   featureSetFilePath       The feature set file path
151      *
152      * @exception   E_SUCCESS                The method is successful.
153      * @exception   E_INVALID_ARG            The specified feature set file path is invalid.
154      * @exception   E_OUT_OF_MEMORY          The memory is insufficient.
155      *
156      * @remarks     
157      *              - If a feature set file exists, it is updated.
158      *              - If a feature set file does not exist, it is newly created.
159      *              - It is not mandatory to call this method to create new feature set file, but Flush() must be called with valid feature set file path.
160      */
161     result Load(const Tizen::Base::String& featureSetFilePath);
162
163     /**
164      * Gets a list of supported image file formats for adding a feature.
165      *
166      * @since       2.1
167          *
168      * @return      A list of supported image file formats
169      */
170     static Tizen::Base::Collection::IListT<Tizen::Media::ImageFormat>* GetSupportedImageFileFormatsListN(void);
171
172     /**
173      * Adds a feature to a feature set.
174      *
175      * @since       2.1
176      *
177      * @return      A feature index of newly and successfully created feature, otherwise returns -1.
178      *
179      * @param[in]   imagePath            The input image file path
180      *
181      * @exception   E_INVALID_ARG        The specified input parameter is invalid.
182      *
183      * @remarks     
184      *              - The specific error code can be accessed using the GetLastResult() method.
185      *              - Input image file must be one of the supported image file formats.
186      *              - Calling this method actually means 'Mark As Add Feature'.
187      *              And the marked feature data will be added to a feature set file after calling Flush().
188      * @see         GetSupportedImageFileFormatsListN()
189      *              Flush(const Tizen::Base::String*)
190      */
191     int AddFeature(const Tizen::Base::String& imagePath);
192
193     /**
194      * Adds a feature to a feature set.
195      *
196      * @since       2.1
197      *
198      * @return      A feature index of newly and successfully created feature, otherwise returns -1.
199      *
200      * @param[in]   imageBuffer              The image buffer of grayscale image data of specified width and height
201      * @param[in]   width                    The width of the input image
202      * @param[in]   height                   The height of the input image
203      * @param[in]   description              The description of the feature
204      *
205      * @exception   E_INVALID_ARG            A specified input parameter is invalid.
206      *
207      * @remarks     
208      *              - The specific error code can be accessed using the GetLastResult() method.
209      *              - Calling this method actually means 'Mark As Add Feature'.
210      *              And the marked feature data will be added to a feature set file after calling Flush().
211      * @see         Flush(const Tizen::Base::String*)
212      */
213     int AddFeature(const Tizen::Base::ByteBuffer& imageBuffer, int width, int height, const Tizen::Base::String& description);
214
215     /**
216      * Gets the total number of features in a feature set.
217      *
218      * @since       2.1
219      *
220      * @return      The total number of features in a feature set
221      */
222     int GetTotalNumberOfFeatures(void);
223
224     /**
225      * Deletes a feature with a specified index in a feature set.
226      *
227      * @since       2.1
228      *
229      * @return      An error code
230      *
231      * @param[in]   featureIndex             The feature index in a feature set
232      *
233      * @exception   E_SUCCESS                The method is successful.
234      * @exception   E_INVALID_ARG            The specified input parameter is invalid.
235      * @exception   E_OUT_OF_MEMORY          The memory is insufficient.
236      *
237      * @remarks     Calling this method actually means 'Mark As Delete Feature'.
238      *              And the marked feature data is deleted after calling Flush().
239      * @see         Flush(const Tizen::Base::String*)
240      */
241     result DeleteFeature(int featureIndex);
242
243     /**
244      * Deletes all features in a feature set.
245      *
246      * @since       2.1
247      *
248      * @return      An error code
249      *
250      * @exception   E_SUCCESS          The method is successful.
251      * @exception   E_OUT_OF_MEMORY    The memory is insufficient.
252      *
253      * @remarks     Calling this method actually means 'Mark As Delete All Features'.
254      *              And all feature data is deleted after calling Flush().
255      * @see         Flush(const Tizen::Base::String*)
256      */
257     result DeleteAllFeatures(void);
258
259     /**
260      * Flushes features into a feature set file and updates all changes as marked.
261      *
262      *
263      * @since       2.1
264      *
265      * @return      An error code
266      *
267      * @param[in]   featureSetFilePath   The feature set file path
268      * @exception   E_SUCCESS            The method is successful.
269      * @exception   E_INVALID_ARG        The specified feature set path is invalid.
270      *
271      * @remarks     
272      *              - All changes in the feature set file by AddFeature() or DeleteFeature() or DeleteAllFeatures() are updated by calling this method.
273      *              - If @c featureSetFilePath is not decided or is same as the file path used in Load(), the loaded feature set file is updated.
274      *              - If @c featureSetFilePath is not same as the file path used in %Load(), the loaded feature set file remains as is and new feature set file is created.
275      *              - If @c featureSetFilePath is @c null, the feature set file loaded by %Load() is overwritten.
276      *                          - If @c featureSetFilePath is not decided or is same to file path used in %Load() and the loaded feature set file is read-only @c E_INVALID_ARG exception will be  returned.
277      *                          - If %Load() is not called to create new feature set file, this method must be called with valid @c featureSetFilePath.
278      *
279      */
280     result Flush(const Tizen::Base::String* featureSetFilePath = null);
281
282     /**
283      * Gets information of the individual feature.
284      *
285      * @since       2.1
286      *
287      * @return      A pointer to ImageFeatureInfo
288      *
289      * @param[in]   featureIndex       The feature index in a feature set
290      */
291     const Tizen::Uix::Vision::ImageFeatureInfo* GetImageFeatureInfo(int featureIndex) const;
292
293
294 private:
295     /**
296      * The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
297      */
298     ImageFeatureManager(const ImageFeatureManager&);
299
300     /**
301      * The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
302      */
303     ImageFeatureManager& operator=(const ImageFeatureManager&);
304
305 private:
306     class _ImageFeatureManagerImpl* __pImageFeatureManagerImpl;
307     friend class _ImageFeatureManagerImpl;
308   };
309
310 } } } //Tizen::Uix::Vision
311
312 #endif // _FUIX_VISION_IMAGE_FEATURE_MANAGER_H_