diff --git a/libs/dngwriter/CMakeLists.txt b/libs/dngwriter/CMakeLists.txt index 880084044f..9d4ffbf796 100644 --- a/libs/dngwriter/CMakeLists.txt +++ b/libs/dngwriter/CMakeLists.txt @@ -1,188 +1,188 @@ # -# Copyright (c) 2010-2016, Gilles Caulier, +# Copyright (c) 2010-2017, Gilles Caulier, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if (POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif (POLICY CMP0063) include_directories( $ $ ) # DNG SDK and XMP SDK use C++ exceptions kde_enable_exceptions() #------------------------------------------------------------------------------------ set(libmd5_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/extra/md5/MD5.cpp) # Adjust flag for static lib and 64 bits computers using -fPIC for GCC compiler (bug: #269903) foreach(_currentfile ${libmd5_SRCS}) if(NOT MSVC) set_source_files_properties(${_currentfile} PROPERTIES COMPILE_FLAGS "-fPIC") endif() endforeach() add_library(libmd5 STATIC ${libmd5_SRCS}) #------------------------------------------------------------------------------------ set(libxmp_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/common/XML_Node.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/common/UnicodeConversions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPCore_Impl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/WXMPIterator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/WXMPMeta.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/WXMPUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPIterator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPMeta-GetSet.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPMeta-Parse.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPMeta-Serialize.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPMeta.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPUtils-FileInfo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/XMPUtils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/ExpatAdapter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore/ParseRDF.cpp ) # Disable warnings: we will never touch this code. # Adjust flag for static lib and 64 bits computers using -fPIC for GCC compiler (bug: #269903) foreach(_currentfile ${libxmp_SRCS}) if(MSVC) set_source_files_properties(${_currentfile} PROPERTIES COMPILE_FLAGS "-w") else() set_source_files_properties(${_currentfile} PROPERTIES COMPILE_FLAGS "-w -fPIC") endif() endforeach() add_library(libxmp STATIC ${libxmp_SRCS}) target_link_libraries(libxmp PRIVATE libmd5 ${EXPAT_LIBRARY} ) target_include_directories(libxmp PRIVATE ${EXPAT_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/extra/md5 ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/common ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/include ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/include/client-glue ) #------------------------------------------------------------------------------------ set(libdng_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_1d_function.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_date_time.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_ifd.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_memory.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_point.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_simple_image.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_utils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_1d_table.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_exceptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_image.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_memory_stream.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_rational.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_spline.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_xmp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_abort_sniffer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_exif.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_image_writer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_preview.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_misc_opcodes.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_mosaic_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_read_image.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_stream.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_xmp_sdk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_area_task.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_file_stream.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_mutex.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_rect.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_string.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_xy_coord.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_bottlenecks.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_bad_pixels.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_filter_task.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_iptc.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_negative.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_reference.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_string_list.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_camera_profile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_fingerprint.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_lens_correction.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_linearization_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_opcode_list.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_opcodes.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_orientation.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_render.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_tag_types.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_color_space.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_globals.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_gain_map.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_lossless_jpeg.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_parse_utils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_resample.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_temperature.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_color_spec.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_host.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_matrix.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_pixel_buffer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_shared.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_tile_iterator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_tone_curve.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_hue_sat_map.cpp ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk/dng_pthread.cpp ) # Disable warnings: we will never touch this code. # Adjust flag for static lib and 64 bits computers using -fPIC for GCC compiler (bug: #269903) foreach(_currentfile ${libdng_SRCS}) if(MSVC) set_source_files_properties(${_currentfile} PROPERTIES COMPILE_FLAGS "-w") else() set_source_files_properties(${_currentfile} PROPERTIES COMPILE_FLAGS "-w -fPIC") endif() endforeach() add_library(libdng STATIC ${libdng_SRCS}) target_link_libraries(libdng PRIVATE libxmp ${CMAKE_THREAD_LIBS_INIT} ) target_include_directories(libdng PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/ ${CMAKE_CURRENT_SOURCE_DIR}/extra/md5 ${CMAKE_CURRENT_SOURCE_DIR}/extra/dng_sdk ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/XMPCore ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/common ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/include ${CMAKE_CURRENT_SOURCE_DIR}/extra/xmp_sdk/include/client-glue ) #------------------------------------------------------------------------------------ set(libdngwriter_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/dngwriter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/dngwriter_p.cpp ${CMAKE_CURRENT_SOURCE_DIR}/dngwriterhost.cpp ${CMAKE_CURRENT_SOURCE_DIR}/dngsettings.cpp ) add_library(dngwriter_src OBJECT ${libdngwriter_SRCS}) diff --git a/libs/facesengine/CMakeLists.txt b/libs/facesengine/CMakeLists.txt index dd430adccf..c72c3ddf71 100644 --- a/libs/facesengine/CMakeLists.txt +++ b/libs/facesengine/CMakeLists.txt @@ -1,84 +1,84 @@ # -# Copyright (c) 2010-2016, Gilles Caulier, +# Copyright (c) 2010-2017, Gilles Caulier, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if (POLICY CMP0063) cmake_policy(SET CMP0063 NEW) endif (POLICY CMP0063) kde_enable_exceptions() include_directories($ $ $ $ $ $ $ $ ) include_directories(${CMAKE_CURRENT_BINARY_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR}/facedb ${CMAKE_CURRENT_SOURCE_DIR}/detection ${CMAKE_CURRENT_SOURCE_DIR}/recognition-opencv-lbph ${CMAKE_CURRENT_SOURCE_DIR}/alignment-congealing ${CMAKE_CURRENT_SOURCE_DIR}/shape-predictor # ${CMAKE_CURRENT_SOURCE_DIR}/alignment-flandmark # ${CMAKE_CURRENT_SOURCE_DIR}/preprocessing-tantriggs ) if(ENABLE_OPENCV3) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/opencv3-face) set(opencv3face_LIB_SRCS opencv3-face/facerec.cpp opencv3-face/lbph_faces.cpp opencv3-face/eigen_faces.cpp opencv3-face/fisher_faces.cpp opencv3-face/predict_collector.cpp ) endif() set(facesengine_LIB_SRCS detection/opencvfacedetector.cpp shape-predictor/fullobjectdetection.cpp shape-predictor/qdatastreamoverloads.cpp facedetector.cpp identity.cpp dataproviders.cpp # alignment-flandmark/flandmarkaligner.cpp # preprocessing-tantriggs/tantriggspreprocessor.cpp ) set(facesengine_database_LIB_SRCS recognitiondatabase.cpp recognition-opencv-lbph/lbphfacemodel.cpp recognition-opencv-lbph/opencvlbphfacerecognizer.cpp recognition-opencv-lbph/opencvmatdata.cpp recognition-opencv-lbph/facerec_borrowed.cpp alignment-congealing/funnelreal.cpp facedb/facedbaccess.cpp facedb/facedbbackend.cpp facedb/facedboperationgroup.cpp facedb/facedbschemaupdater.cpp facedb/facedb.cpp ) add_library(digikamfacesengine_src OBJECT ${opencv3face_LIB_SRCS} # Empty with OpenCV2 ${facesengine_LIB_SRCS} ) add_library(digikamfacesengine STATIC $) add_library(digikamfacesenginedatabase_src OBJECT ${facesengine_database_LIB_SRCS} ) add_library(digikamfacesenginedatabase STATIC $) diff --git a/libs/facesengine/shape-predictor/pointtransformaffine.h b/libs/facesengine/shape-predictor/pointtransformaffine.h index 03cd8ab23d..221ec52ba5 100644 --- a/libs/facesengine/shape-predictor/pointtransformaffine.h +++ b/libs/facesengine/shape-predictor/pointtransformaffine.h @@ -1,213 +1,216 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 16/08/2016 * Description : point transform class and its utilities that models * affine transformations between two sets of 2d-points. * * Copyright (C) 2016 by Omar Amin * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #ifndef POINT_TRANSFORM_AFFINE_H #define POINT_TRANSFORM_AFFINE_H // C++ includes #include #include // Local includes #include "matrixoperations.h" #include "vectoroperations.h" using namespace std; namespace Digikam { class PointTransformAffine { public: PointTransformAffine() { m = std::vector >(2, std::vector(2, 0)); m[0][0] = 1.0; m[1][1] = 1.0; b = std::vector(2, 0); } - PointTransformAffine(const std::vector > & m_, + PointTransformAffine(const std::vector >& m_, const std::vector& b_) : m(m_), b(b_) { } PointTransformAffine(const std::vector >& m_) { m = std::vector >(2, std::vector(2, 0)); b = std::vector(2, 0); for (unsigned int i = 0 ; i < m_.size() ; i++) { - for (unsigned int j =0 ; j < m_[0].size() ; j++) + for (unsigned int j = 0 ; j < m_[0].size() ; j++) { if (j == 2) { b[i] = m_[i][2]; } else { m[i][j] = m_[i][j]; } } } } const std::vector operator() (const std::vector& p) const { return m*p + b; } const std::vector >& get_m() const { return m; } const std::vector& get_b() const { return b; } private: + std::vector > m; std::vector b; }; // ---------------------------------------------------------------------------------------- inline PointTransformAffine operator* (const PointTransformAffine& lhs, const PointTransformAffine& rhs) { return PointTransformAffine(lhs.get_m() * rhs.get_m(), lhs.get_m() * rhs.get_b() + lhs.get_b()); } // ---------------------------------------------------------------------------------------- inline PointTransformAffine inv (const PointTransformAffine& trans) { std::vector > im = inv2(trans.get_m()); return PointTransformAffine(im, -(im * trans.get_b())); } // ---------------------------------------------------------------------------------------- template PointTransformAffine find_affine_transform(const std::vector >& from_points, const std::vector >& to_points) { std::vector > P(3, std::vector(from_points.size())); std::vector > Q(2, std::vector(from_points.size())); for (unsigned long i = 0 ; i < from_points.size() ; ++i) { P[0][i] = from_points[i][0]; P[1][i] = from_points[i][1]; P[2][i] = 1; Q[0][i] = to_points[i][0]; Q[1][i] = to_points[i][1]; } const std::vector > m = Q * pinv(P); return PointTransformAffine(m); } // ---------------------------------------------------------------------------------------- PointTransformAffine find_similarity_transform(const std::vector >& from_points, const std::vector >& to_points) { // We use the formulas from the paper: Least-squares estimation of transformation // parameters between two point patterns by Umeyama. They are equations 34 through // 43. std::vector mean_from(2, 0), mean_to(2, 0); float sigma_from = 0; float sigma_to = 0; std::vector > cov(2, std::vector(2, 0)); for (unsigned long i = 0 ; i < from_points.size() ; ++i) { mean_from = mean_from + from_points[i]; mean_to = mean_to + to_points[i]; } mean_from = mean_from / from_points.size(); mean_to = mean_to / from_points.size(); for (unsigned long i = 0 ; i < from_points.size() ; ++i) { sigma_from = sigma_from + length_squared(from_points[i] - mean_from); sigma_to = sigma_to + length_squared(to_points[i] - mean_to); cov = cov + (to_points[i] - mean_to)*(from_points[i] - mean_from); } sigma_from = sigma_from / from_points.size(); sigma_to = sigma_to / from_points.size(); cov = cov / from_points.size(); std::vector > u(2,std::vector(2)); std::vector > v(2,std::vector(2)); std::vector > vt(2,std::vector(2)); std::vector > d(2,std::vector(2)); std::vector > s(2,std::vector(2,0)); svd(cov, u,d,vt); s[0][0] = 1; s[1][1] = 1; if (determinant(cov) < 0 || (determinant(cov) == 0 && determinant(u) * determinant(v) < 0)) { if (d[1][1] < d[0][0]) s[1][1] = -1; else s[0][0] = -1; } transpose(vt,v); std::vector > r = u * s * v; float c = 1; if (sigma_from != 0) + { c = 1.0 / sigma_from * trace(d * s); + } std::vector t = mean_to - r * mean_from * c; return PointTransformAffine(r * c, t); } } // namespace Digikam #endif // POINT_TRANSFORM_AFFINE_H