3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.1 (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
9 // http://floralicense.org/license
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.
18 #include "FeatureSetGenerator.h"
21 #include <FSysSystemTime.h>
23 FeatureSetGenThread::FeatureSetGenThread(void)
25 , __pImageFeatureManager(0)
26 , __isGenerating(false)
30 FeatureSetGenThread::~FeatureSetGenThread(void)
35 FeatureSetGenThread::Construct(void)
37 return Thread::Construct();
41 FeatureSetGenThread::Run(void)
43 __resultInfo.appendTime = 0;
44 __resultInfo.totalObjectsNumber = 0;
45 __resultInfo.appendedObjectsNumber = 0;
46 __resultInfo.rejectedObjectsNumber = 0;
48 __isGenerating = true;
50 Generate(__imagePath, __resultInfo);
52 __isGenerating = false;
56 __pListener->OnFinish();
63 FeatureSetGenThread::SetListener(IFeatureSetGeneratorListener* pListener)
65 if (__pListener == pListener)
69 __pListener = pListener;
73 FeatureSetGenThread::Generate(Tizen::Base::String imPath, ResultInfo& resInfo)
78 if (!__pImageFeatureManager)
83 Tizen::Base::TimeSpan start(0, 0, 1), finish(0, 0, 1);
84 Tizen::System::SystemTime::GetUptime(start);
85 Tizen::Io::Directory dir;
87 result r = dir.Construct(imPath);
91 Tizen::Base::String folder(imPath);
92 if (folder[folder.GetLength() - 1] != '/')
97 Tizen::Io::DirEnumerator* pDirEnum = dir.ReadN();
103 while(pDirEnum->MoveNext() == E_SUCCESS)
105 Tizen::Io::DirEntry dirEntry = pDirEnum->GetCurrentDirEntry();
106 if (!dirEntry.IsDirectory())
108 if (Tizen::Io::File::IsFileExist(imPath + "/" + dirEntry.GetName()))
110 __files.Add(imPath + "/" + dirEntry.GetName());
121 if (CheckExt(imPath) && Tizen::Io::File::IsFileExist(imPath))
131 StrComparer* pStrComparer = new StrComparer();
132 __files.Sort(*pStrComparer);
135 // Uses an enumerator to access elements in the list
136 Tizen::Base::Collection::IEnumeratorT<Tizen::Base::String>* pEnum = __files.GetEnumeratorN();
137 Tizen::Base::String name;
139 while (pEnum->MoveNext() == E_SUCCESS)
141 pEnum->GetCurrent(name);
146 __pListener->OnImageProcessed(currObject, __files.GetCount());
151 ++resInfo.rejectedObjectsNumber;
155 if ( __pImageFeatureManager->AddFeature(name) >= 0)
157 ++resInfo.appendedObjectsNumber;
161 ++resInfo.rejectedObjectsNumber;
167 Tizen::System::SystemTime::GetUptime(finish);
168 resInfo.appendTime = 60000 * (finish - start).GetMinutes() + 1000 * (finish - start).GetSeconds()
169 + (finish - start).GetMilliseconds();
171 resInfo.totalObjectsNumber = __pImageFeatureManager->GetTotalNumberOfFeatures();
177 FeatureSetGenThread::SetImagePath(const Tizen::Base::String& imPath)
179 __imagePath = imPath;
183 FeatureSetGenThread::GetResults(ResultInfo& resInfo)
185 resInfo = __resultInfo;
189 FeatureSetGenThread::CheckExt(Tizen::Base::String fileName)
192 const Tizen::Base::String period_symbol = ".";
193 if (E_SUCCESS != fileName.LastIndexOf(period_symbol, fileName.GetLength()-1, period))
197 Tizen::Base::String extension;
198 if (E_SUCCESS != fileName.SubString(period + 1, extension))
203 return ( (extension.Equals(L"jpg", false)) ||
204 (extension.Equals(L"bmp", false)) ||
205 (extension.Equals(L"png", false)) ||
206 (extension.Equals(L"jpeg", false)));
210 FeatureSetGenThread::SetFeatureManager(Tizen::Uix::Vision::ImageFeatureManager* pImageFeatureManager)
212 __pImageFeatureManager = pImageFeatureManager;