From 25d8fb983b3ca139cb52ef8c25f513635855419c Mon Sep 17 00:00:00 2001 From: Kang Lin Date: Wed, 21 Feb 2024 11:58:28 +0800 Subject: [PATCH] CI: modify ci --- .github/workflows/android.yml | 110 +++++++++++-------- .github/workflows/macos.yml | 44 ++++---- .github/workflows/mingw.yml | 3 +- .github/workflows/msvc.yml | 41 ++++--- .github/workflows/ubuntu.yml | 31 ++++-- App/CMakeLists.txt | 5 +- CMakeLists.txt | 18 +-- ChangeLog.md | 6 +- ChangeLog_zh_CN.md | 5 +- README.md | 2 +- appveyor.yml | 200 +++++++++++++++++----------------- ci/build.sh | 6 +- debian/changelog | 2 +- deploy.sh | 2 +- vcpkg.json | 46 ++++++++ 15 files changed, 307 insertions(+), 214 deletions(-) create mode 100644 vcpkg.json diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index cf4c2d7..6b72aa6 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -14,19 +14,21 @@ jobs: matrix: BUILD_TYPE: [Release] qt_arch: [android_arm64_v8a, android_armv7, android_x86_64] - qt_version: [6.6.1] + qt_version: [6.6.2] include: - BUILD_TYPE: Release qt_arch: android_arm64_v8a VCPKG_TARGET_TRIPLET: arm-android + ENABLE_DOWNLOAD: ON - BUILD_TYPE: Release qt_arch: android_armv7 VCPKG_TARGET_TRIPLET: arm-android - BUILD_TYPE: Release - qt_arch: android_x86_64 + qt_arch: android_x86_64 VCPKG_TARGET_TRIPLET: x64-android + ENABLE_DOWNLOAD: ON runs-on: ubuntu-latest @@ -39,7 +41,7 @@ jobs: VCPKGGITCOMMITID: eb33d2f7583405fca184bcdf7fdd5828ec88ac05 ANDROID_PLATFORM: android-23 ANDROID_NATIVE_API_LEVEL: 23 - qt_modules: 'qtimageformats qtmultimedia qtscxml' + qt_modules: 'qtwebchannel qtwebsockets qtwebview qtimageformats qtmultimedia qtscxml qt5compat' # Map the job outputs to step outputs outputs: @@ -59,21 +61,61 @@ jobs: cmake -E make_directory ${{github.workspace}}/build - name: Cache installed - #if: false uses: actions/cache@v2 id: cache-installed with: path: | ${{env.INSTALL_DIR}} - key: cache-installed-android-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}} + key: install_android_qt${{matrix.qt_version}}_${{matrix.qt_arch}}_${{matrix.BUILD_TYPE}} - - name: Cache Qt - #if: false - id: cache-qt - uses: actions/cache@v1 # not v2! + - name: run-vcpkg + uses: lukka/run-vcpkg@v11 with: - path: ${{env.TOOSL_DIR}}/qt - key: qt${{matrix.qt_version}}_${{matrix.qt_arch}} + # Indicates whether to only setup vcpkg (i.e. installing it and setting the environment variables VCPKG_ROOT, RUNVCPK_VCPKG_ROOT), without installing any port. + #setupOnly: # optional + #vcpkgGitURL: https://github.com/KangLin/vcpkg.git + vcpkgGitCommitId: ${{env.VCPKGGITCOMMITID}} + vcpkgDirectory: ${{ runner.workspace }}/vcpkg/ + + - name: build SeetaFace2 + working-directory: ${{env.SOURCE_DIR}} + run: | + if [ ! -f ${{env.INSTALL_DIR}}/lib/cmake/SeetaFaceDetectorConfig.cmake ]; then + git clone https://github.com/KangLin/SeetaFace2.git + cd SeetaFace2 + cmake -E make_directory build + cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ + -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ + -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake \ + -DVCPKG_CHAINLbuildOAD_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=${{matrix.ANDROID_ABI}} \ + -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} \ + -DBUILD_EXAMPLE=OFF + cmake --build . --config ${{matrix.BUILD_TYPE}} + cmake --build . --config ${{matrix.BUILD_TYPE}} --target install + fi + + - name: build libfacedetection + working-directory: ${{env.SOURCE_DIR}} + run: | + if [ ! -f ${{env.INSTALL_DIR}}/lib/cmake/facedetection/facedetectionConfig.cmake ]; then + git clone https://github.com/ShiqiYu/libfacedetection.git + cd libfacedetection + cmake -E make_directory build + cd build + cmake .. \ + -DCMAKE_BUILD_TYPE=${{ matrix.BUILD_TYPE }} \ + -DCMAKE_INSTALL_PREFIX=${{ env.INSTALL_DIR }} \ + -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake \ + -DVCPKG_CHAINLbuildOAD_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \ + -DANDROID_ABI=${{matrix.ANDROID_ABI}} \ + -DANDROID_PLATFORM=${{matrix.ANDROID_PLATFORM}} \ + -DBUILD_SHARED_LIBS=ON + cmake --build . --config ${{matrix.BUILD_TYPE}} + cmake --build . --config ${{matrix.BUILD_TYPE}} --target install + fi - name: Install Qt of gcc_64 uses: jurplel/install-qt-action@v3 @@ -84,7 +126,8 @@ jobs: target: 'desktop' arch: 'gcc_64' set-env: false - cached: '${{ steps.cache-qt.outputs.cache-hit }}' # optional, default is false + cache: true + cache-key-prefix: cached_qt - name: Install Qt of android uses: jurplel/install-qt-action@v3 @@ -101,33 +144,8 @@ jobs: arch: '${{matrix.qt_arch}}' # optional # Additional Qt modules to install modules: '${{env.qt_modules}}' # optional. See: https://ddalcino.github.io/aqt-list-server/ - cached: '${{ steps.cache-qt.outputs.cache-hit }}' # optional, default is false - -# - name: run-vcpkg -# uses: lukka/run-vcpkg@v7.4 -# with: -# # Indicates whether to only setup vcpkg (i.e. installing it and setting the environment variables VCPKG_ROOT, RUNVCPK_VCPKG_ROOT), without installing any port. -# #setupOnly: # optional -# #vcpkgGitURL: https://github.com/KangLin/vcpkg.git -# vcpkgGitCommitId: ${{env.VCPKGGITCOMMITID}} -# vcpkgDirectory: ${{ runner.workspace }}/vcpkg/ -# # Since the cache must be invalidated when content of the vcpkg.json file changes, let's -# # compute its hash and append this to the computed cache's key. -# appendedCacheKey: android_${{matrix.os}}-qt${{matrix.qt_version}}-${{matrix.VCPKG_TARGET_TRIPLET}}-${{matrix.BUILD_TYPE}}-${{env.VCPKGGITCOMMITID}} -# additionalCachedPaths: $VCPKG_ROOT/installed -# vcpkgTriplet: '${{ matrix.VCPKG_TARGET_TRIPLET }}' -# vcpkgArguments: 'openssl ffmpeg opencv opencv[contrib] dlib ncnn' - - - name: run vcpkg - working-directory: ${{env.SOURCE_DIR}} - run: | - if [ ! -d vcpkg ]; then - git clone https://github.com/microsoft/vcpkg.git - cd vcpkg - git checkout -b ${{env.VCPKGGITCOMMITID}} ${{env.VCPKGGITCOMMITID}} - ./bootstrap-vcpkg.sh - ./vcpkg install --triplet=${{matrix.VCPKG_TARGET_TRIPLET}} openssl libyuv ffmpeg opencv[contrib] - fi + cache: true + cache-key-prefix: cached_qt - name: git clone RabbitCommon working-directory: ${{env.SOURCE_DIR}} @@ -144,7 +162,7 @@ jobs: QT_ANDROID_KEYSTORE_STORE_PASS: ${{secrets.STOREPASS}} run: | sudo chmod 777 ${Qt6_DIR}/bin/qt-cmake - ${Qt6_DIR}/bin/qt-cmake .. \ + cmake .. \ -DCMARK_SHARED=OFF \ -DCMARK_TESTS=OFF \ -DCMARK_STATIC=ON \ @@ -157,10 +175,14 @@ jobs: -DQt6LinguistTools_DIR=${Qt6_DIR}/../gcc_64/lib/cmake/Qt6LinguistTools \ -DVCPKG_VERBOSE=ON \ -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON \ - -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}\scripts\buildsystems\vcpkg.cmake" \ - -DCMAKE_INSTALL_PREFIX=`pwd`/install - cmake --build . --config ${{matrix.BUILD_TYPE}} --target all - cmake --build . --config ${{matrix.BUILD_TYPE}} --target install + -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake" \ + -DVCPKG_CHAINLbuildOAD_TOOLCHAIN_FILE=${Qt6_DIR}/lib/cmake/Qt6/qt.toolchain.cmake \ + -DCMAKE_INSTALL_PREFIX=`pwd`/install \ + -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON \ + -DVCPKG_APPLOCAL_DEPS=ON \ + -DINSTALL_QT=ON + cmake --build . --config ${{matrix.BUILD_TYPE}} --target all + cmake --build . --config ${{matrix.BUILD_TYPE}} --target install APK_FILE=`find . -name "android-*.apk"` cp $APK_FILE FaceRecognizer_${{env.FaceRecognizer_VERSION}}_${{matrix.qt_arch}}_qt${{matrix.qt_version}}_${{matrix.BUILD_TYPE}}.apk 7z a FaceRecognizer_${{env.FaceRecognizer_VERSION}}_${{matrix.qt_arch}}_qt${{matrix.qt_version}}_${{matrix.BUILD_TYPE}}.zip install/* diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 9fdb315..361ad15 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -16,16 +16,15 @@ jobs: matrix: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) BUILD_TYPE: [Release, Debug] - qt_version: [6.5.1, 5.15.2, 5.12.12] + qt_version: [6.6.2, 5.15.2, 5.12.12] include: - - qt_version: 6.5.1 - qt_modules: qtscxml qtpositioning qt5compat qtwebchannel qtwebsockets + - qt_version: 6.6.2 + qt_modules: qtscxml qtpositioning qt5compat qtwebchannel qtwebsockets qtmultimedia + ENABLE_DOWNLOAD: ON - qt_version: 5.15.2 - qt_modules: "" - qt_version: 5.12.12 - qt_modules: "" runs-on: macos-latest @@ -34,7 +33,7 @@ jobs: SOURCE_DIR: ${{github.workspace}}/.cache/source TOOSL_DIR: ${{github.workspace}}/.cache/tools INSTALL_DIR: ${{github.workspace}}/.cache/install_macos - qt_modules: ${{matrix.qt_modules}} + qt_modules: qtwebengine ${{matrix.qt_modules}} FaceRecognizer_VERSION: v0.0.4 artifact_name: build_macos VCPKGGITCOMMITID: eb33d2f7583405fca184bcdf7fdd5828ec88ac05 @@ -62,23 +61,22 @@ jobs: with: path: | ${{env.INSTALL_DIR}} - key: Cache-macos-installed-qt${{matrix.qt_version}}-${{matrix.BUILD_TYPE}} + key: install_macos_qt${{matrix.qt_version}}_${{matrix.qt_arch}}_${{matrix.BUILD_TYPE}} - name: Install application run: | brew install nasm - name: run-vcpkg - uses: lukka/run-vcpkg@v7.4 + uses: lukka/run-vcpkg@v11 with: vcpkgGitCommitId: ${{env.VCPKGGITCOMMITID}} vcpkgDirectory: ${{runner.workspace}}/vcpkg/ - # Since the cache must be invalidated when content of the vcpkg.json file changes, let's - # compute its hash and append this to the computed cache's key. - appendedCacheKey: vcpkg-macos-${{env.VCPKGGITCOMMITID}} - vcpkgTriplet: '${{matrix.triplet}}' - vcpkgArguments: 'openssl libyuv ffmpeg opencv opencv[contrib] dlib ncnn' - + + - name: run vcpkg + run: | + brew install nasm + - name: Cache Qt id: cache-qt uses: actions/cache@v1 # not v2! @@ -87,15 +85,14 @@ jobs: key: qt${{matrix.qt_version}}-${{matrix.qt_arch}} - name: Install Qt - # You may pin to the exact commit or the version. - # uses: jurplel/install-qt-action@a962fb91949c8e846a3e4a944d50e7ef5cc3a28a uses: jurplel/install-qt-action@v3 with: - # Directory to install Qt - dir: ${{env.TOOSL_DIR}}/qt # optional - # Version of Qt to install - version: ${{matrix.qt_version}} # optional, default is 5.15.2 - modules: ${{env.qt_modules}} # optional. See: https://ddalcino.github.io/aqt-list-server/ + dir: '${{env.TOOSL_DIR}}/qt' # optional + version: '${{matrix.qt_version}}' # optional, default is 5.15.2 + arch: '${{matrix.qt_arch}}' # optional + modules: '${{env.qt_modules}}' # optional + cache: true + cache-key-prefix: cached_qt - name: build SeetaFace2 working-directory: ${{env.SOURCE_DIR}} @@ -108,7 +105,8 @@ jobs: cmake .. \ -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" \ - -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake" + -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake" \ + -DBUILD_EXAMPLE=OFF cmake --build . --config ${{matrix.BUILD_TYPE}} cmake --build . --config ${{matrix.BUILD_TYPE}} --target install fi @@ -148,6 +146,8 @@ jobs: -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}\scripts\buildsystems\vcpkg.cmake" \ -DVCPKG_VERBOSE=ON \ -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON \ + -DVCPKG_APPLOCAL_DEPS=ON \ + -DINSTALL_QT=ON \ -DSeetaFace_DIR=${{env.INSTALL_DIR}}/lib/cmake \ -DSeetaNet_DIR=${{env.INSTALL_DIR}}/lib/cmake \ -DSeetaFaceDetector_DIR=${{env.INSTALL_DIR}}/lib/cmake \ diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index c0f5aa2..2d30d20 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -93,7 +93,8 @@ jobs: cd build cmake .. -G"MinGW Makefiles" ^ -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} ^ - -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" + -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" ^ + -DBUILD_EXAMPLE=OFF cmake --build . --config ${{matrix.BUILD_TYPE}} cmake --build . --config ${{matrix.BUILD_TYPE}} --target install ) diff --git a/.github/workflows/msvc.yml b/.github/workflows/msvc.yml index 31524f7..3218595 100644 --- a/.github/workflows/msvc.yml +++ b/.github/workflows/msvc.yml @@ -13,21 +13,15 @@ jobs: strategy: matrix: BUILD_TYPE: [Release, Debug] - qt_version: [6.6.1, 6.5.2, 5.15.2, 5.12.12] + qt_version: [6.6.2, 5.15.2, 5.12.12] include: - - qt_version: 6.6.1 - triplet: x64-windows - VCPKG_PLATFORM_TOOLSET: v142 - qt_arch: win64_msvc2019_64 - CMAKE_GENERATOR_PLATFORM: x64 - qt_modules: qtscxml qtpositioning qtwebchannel qtwebsockets qtwebview qtmultimedia qt5compat - - - qt_version: 6.5.2 + - qt_version: 6.6.2 triplet: x64-windows VCPKG_PLATFORM_TOOLSET: v142 qt_arch: win64_msvc2019_64 CMAKE_GENERATOR_PLATFORM: x64 qt_modules: qtscxml qtpositioning qtwebchannel qtwebsockets qtwebview qtmultimedia qt5compat + ENABLE_DOWNLOAD: ON - qt_version: 5.15.2 qt_arch: win64_msvc2019_64 @@ -82,18 +76,19 @@ jobs: with: path: | ${{env.INSTALL_DIR}} - key: FaceRecognizer_msvc_cache-installed-${{matrix.os}}-vc${{matrix.VCPKG_PLATFORM_TOOLSET}}-${{matrix.triplet}}-qt${{matrix.qt_version}}-${{matrix.BUILD_TYPE}}-${{env.VCPKGGITCOMMITID}}_2033_03_02 + key: install_msvc_qt${{matrix.qt_version}}_${{matrix.qt_arch}}_${{matrix.BUILD_TYPE}} - name: run-vcpkg - uses: lukka/run-vcpkg@v7.4 + uses: lukka/run-vcpkg@v11 with: vcpkgGitCommitId: ${{env.VCPKGGITCOMMITID}} vcpkgDirectory: ${{runner.workspace}}/vcpkg/ - # Since the cache must be invalidated when content of the vcpkg.json file changes, let's - # compute its hash and append this to the computed cache's key. - appendedCacheKey: cache-vcpkg-msvc-${{matrix.os}}-vc${{matrix.VCPKG_PLATFORM_TOOLSET}}-${{matrix.triplet}}-qt${{matrix.qt_version}}-${{matrix.BUILD_TYPE}}-${{env.VCPKGGITCOMMITID}} - vcpkgTriplet: '${{matrix.triplet}}' - vcpkgArguments: 'openssl libyuv ffmpeg opencv opencv[contrib] dlib ncnn' + + - name: run vcpkg + if: false + run: | + vcpkg install --VCPKG_TARGET_TRIPLET=${{matrix.VCPKG_TARGET_TRIPLET}} ^ + --x-feature=SeetaFace - name: build SeetaFace2 working-directory: ${{env.SOURCE_DIR}} @@ -108,7 +103,8 @@ jobs: -T ${{matrix.VCPKG_PLATFORM_TOOLSET}} ^ -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} ^ -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" ^ - -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}\scripts\buildsystems\vcpkg.cmake" + -DCMAKE_TOOLCHAIN_FILE="${{env.VCPKG_ROOT}}\scripts\buildsystems\vcpkg.cmake" ^ + -DBUILD_EXAMPLE=OFF cmake --build . --config ${{matrix.BUILD_TYPE}} cmake --build . --config ${{matrix.BUILD_TYPE}} --target install ) @@ -169,6 +165,8 @@ jobs: -DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake ^ -DVCPKG_VERBOSE=ON ^ -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON ^ + -DVCPKG_APPLOCAL_DEPS=ON ^ + -DINSTALL_QT=ON ^ -DSeetaFace_DIR=${{env.INSTALL_DIR}}/lib/cmake ^ -DSeetaNet_DIR=${{env.INSTALL_DIR}}/lib/cmake ^ -DSeetaFaceDetector_DIR=${{env.INSTALL_DIR}}/lib/cmake ^ @@ -192,8 +190,8 @@ jobs: makensis Install.nsi copy /Y FaceRecognizer_${{env.FaceRecognizer_VERSION}}_Setup.exe FaceRecognizer_${{env.FaceRecognizer_VERSION}}_${{matrix.qt_arch}}_qt${{matrix.qt_version}}_Setup.exe - - name: Update xml - if: ${{ matrix.BUILD_TYPE == 'Release' && matrix.qt_version == '6.6.1' }} + - name: Update configure file + if: ${{ matrix.BUILD_TYPE == 'Release' && matrix.qt_version == '6.6.2' }} working-directory: ${{github.workspace}}\build run: | ${{github.workspace}}\build\install\bin\FaceRecognizerApp.exe ^ @@ -205,13 +203,14 @@ jobs: -m "${{env.FaceRecognizer_VERSION}}" - name: Update artifact - if: ${{ matrix.BUILD_TYPE == 'Release' }} + if: ${{ matrix.BUILD_TYPE == 'Release' && matrix.qt_version == '6.6.2' }} uses: actions/upload-artifact@v3 with: name: ${{ env.artifact_name }} path: | ${{github.workspace}}\build\FaceRecognizer_${{env.FaceRecognizer_VERSION}}_${{matrix.qt_arch}}_qt${{matrix.qt_version}}_Setup.exe - ${{github.workspace}}\build\update_windows.xml + ${{github.workspace}}\build\update_windows.json + ${{github.workspace}}\build\update_windows.json.xml # - name: Upload To Github Release # if: ${{ matrix.BUILD_TYPE == 'Release' && '5.12.12' == matrix.qt_version && startsWith(github.ref, 'refs/tags/') }} diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 39f7fce..822533b 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -16,13 +16,13 @@ jobs: matrix: BUILD_TYPE: [Release, Debug] - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest env: BUILD_TYPE: ${{matrix.BUILD_TYPE}} SOURCE_DIR: ${{github.workspace}}/.cache/source TOOSL_DIR: ${{github.workspace}}/.cache/tools - INSTALL_DIR: ${{github.workspace}}/.cache/install_${{matrix.BUILD_TYPE}} + INSTALL_DIR: ${{github.workspace}}/.cache/install FaceRecognizer_VERSION: 0.0.4 artifact_name: build_ubuntu @@ -49,9 +49,9 @@ jobs: - name: Install apt packages run: | - sudo apt-get update -y \ - && sudo apt-get upgrade -y \ - && sudo apt-get install -y xvfb xpra \ + sudo apt-get update -y -q + sudo apt-get upgrade -y -q + sudo apt-get install -y -q xvfb xpra \ cmake build-essential \ debhelper fakeroot graphviz \ libglu1-mesa-dev libpulse-mainloop-glib0 \ @@ -75,7 +75,7 @@ jobs: with: path: | ${{env.INSTALL_DIR}} - key: cache-installed-ubuntu + key: install_ubuntu_${{matrix.BUILD_TYPE}} - name: build SeetaFace2 working-directory: ${{env.SOURCE_DIR}} @@ -87,7 +87,8 @@ jobs: cd build cmake .. \ -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} \ - -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" + -DCMAKE_INSTALL_PREFIX="${{ env.INSTALL_DIR }}" \ + -DBUILD_EXAMPLE=OFF cmake --build . --config ${{matrix.BUILD_TYPE}} cmake --build . --config ${{matrix.BUILD_TYPE}} --target install fi @@ -120,12 +121,13 @@ jobs: SeetaFaceTracker_DIR: ${{env.INSTALL_DIR}}/lib/cmake SeetaQualityAssessor_DIR: ${{env.INSTALL_DIR}}/lib/cmake facedetection_DIR: ${{env.INSTALL_DIR}}/lib/cmake/facedetection + ENABLE_DOWNLOAD: ON run: | export Qt6_DIR=/usr/lib/`uname -a`-linux-gnu/cmake/Qt6 ./build_debpackage.sh cp ../facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb - - name: Update xml file + - name: Update configure file working-directory: ${{github.workspace}} run: | sudo Xvfb :99 -ac & @@ -134,13 +136,24 @@ jobs: MD5=`md5sum facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb|awk '{print $1}'` echo "MD5:${MD5}" /bin/bash /opt/FaceRecognizer/bin/FaceRecognizer.sh \ - -f "${{github.workspace}}/update_linux.json" \ + -f "${{github.workspace}}/update_ubuntu.json" \ --foc 1 \ --md5 ${MD5} \ -m "${{env.FaceRecognizer_VERSION}}" \ -n "facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb" \ -u "https://github.com/KangLin/FaceRecognizer/releases/download/v${{env.FaceRecognizer_VERSION}}/facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb;https://sourceforge.net/projects/FaceRecognizer/files/v${{env.FaceRecognizer_VERSION}}/facerecognizer_${{env.FaceRecognizer_VERSION}}_amd64.deb" + - name: Update version configure file + if: ${{ matrix.BUILD_TYPE == 'Release'}} + working-directory: ${{github.workspace}} + run: | + sudo Xvfb :99 -ac & + export DISPLAY=:99.0 + /bin/bash /opt/FaceRecognizer/bin/FaceRecognizer.sh \ + -f "${{github.workspace}}/version.json" \ + --foc 0 \ + --pv ${{env.FaceRecognizer_VERSION}} + - name: Update artifact if: ${{ matrix.BUILD_TYPE == 'Release' }} uses: actions/upload-artifact@v3 diff --git a/App/CMakeLists.txt b/App/CMakeLists.txt index 76378e0..06616be 100644 --- a/App/CMakeLists.txt +++ b/App/CMakeLists.txt @@ -8,7 +8,10 @@ if(POLICY CMP0020) cmake_policy(SET CMP0020 NEW) endif() -project(FaceRecognizerApp) +project(FaceRecognizerApp + DESCRIPTION "Face recognizer" + HOMEPAGE_URL "https://github.com/KangLin/FaceRecognizer" +) set(SOURCE_FILES FrmDisplay.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cf1f77..1b6033c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,10 @@ +# Author: Kang Lin + cmake_minimum_required(VERSION 2.8) -project(FaceRecognizer) +project(FaceRecognizer + HOMEPAGE_URL "https://github.com/KangLin/FaceRecognizer" + ) SET(CMAKE_INCLUDE_CURRENT_DIR ON) SET(CMAKE_VERBOSE_MAKEFILE ON) @@ -33,18 +37,16 @@ SET(CMAKE_AUTORCC ON) if(CMAKE_VERSION VERSION_LESS "3.7.0") set(CMAKE_INCLUDE_CURRENT_DIR ON) endif() -if(NOT DEFINED QT_VERSION_MAJOR) - find_package(QT NAMES Qt6 Qt5 COMPONENTS Core) -endif() +find_package(QT NAMES Qt6 Qt5 COMPONENTS Core) SET(QT_COMPONENTS Core Gui Widgets Xml Network Multimedia Sql) -if(ANDROID AND (Qt${QT_VERSION_MAJOR}_VERSION VERSION_LESS 6.0.0)) - LIST(APPEND QT_COMPONENTS AndroidExtras) -endif() if(QT_VERSION_MAJOR GREATER_EQUAL 6) - LIST(APPEND QT_COMPONENTS MultimediaWidgets Core5Compat) set(CMAKE_CXX_STANDARD 17) + LIST(APPEND QT_COMPONENTS MultimediaWidgets Core5Compat) else() set(CMAKE_CXX_STANDARD 11) + if(ANDROID) + LIST(APPEND QT_COMPONENTS AndroidExtras) + endif() endif() find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QT_COMPONENTS}) message("QT_VERSION:${Qt${QT_VERSION_MAJOR}_VERSION}") diff --git a/ChangeLog.md b/ChangeLog.md index f80c95a..5fe99bd 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -9,8 +9,10 @@ See RabbitCommon: 7ed300a206d8a36c30003b6c19ad181682d0ff5f + FFmpeg: update API avpicture_* to av_image_* + Support Qt6 - + Replace RabbitCommon::CDir::GetOpenDirectory with QFileDialog::getExistingDirectory etc - + + Use RabbitCommon v2.0.1 + + Replace RabbitCommon::CDir::GetOpenDirectory with QFileDialog::getExistingDirectory etc + + Use json format update + - v0.0.4 + Add opencv face - Add opencv dnn face detect diff --git a/ChangeLog_zh_CN.md b/ChangeLog_zh_CN.md index 8af0023..b30b629 100644 --- a/ChangeLog_zh_CN.md +++ b/ChangeLog_zh_CN.md @@ -9,8 +9,9 @@ 详见:RabbitCommon: 7ed300a206d8a36c30003b6c19ad181682d0ff5f + FFmpeg: 兼容 API avpicture_* to av_image_* + 支持 Qt6 - + 使用 RabbitCommon v2 - + 用 QFileDialog::getExistingDirectory 替换 RabbitCommon::CDir::GetOpenDirectory + + 使用 RabbitCommon v2.0.1 + - 使用 json 格式更新 + - 用 QFileDialog::getExistingDirectory 替换 RabbitCommon::CDir::GetOpenDirectory - v0.0.4 + 增加 opencv 实现人脸接口 diff --git a/README.md b/README.md index 883414e..8f16be6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ## [人脸识别](https://github.com/KangLin/FaceRecognizer) -作者:康林(kl222@126.com) +作者:康林 [![Windows build status](https://ci.appveyor.com/api/projects/status/n50nxc7d8mm9bdpb/branch/master?svg=true)](https://ci.appveyor.com/project/KangLin/facerecognizer/branch/master) [![build](https://github.com/KangLin/FaceRecognizer/actions/workflows/build.yml/badge.svg)](https://github.com/KangLin/FaceRecognizer/actions/workflows/build.yml) diff --git a/appveyor.yml b/appveyor.yml index d7b74f4..61a669e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,101 +1,35 @@ -#TODO: Change version - -version: 'v0.0.4.{build}' +version: "v0.0.26.{build}" cache: - - model - - Package - + - ..\other_source +# Clean cached +# https://www.appveyor.com/docs/build-cache/#cleaning-up-cache + environment: + FaceRecognizerVersion: v0.0.4 STOREPASS: secure: l9BZEU39F1a4vSkhwl0CHR+yh6CD1c7byGzMv+1NUa4= QT_USER: secure: EoBPaPuJ6u9UDYpQWjKhUg== QT_PASSWORD: secure: ejAYGgB+3sBispRxUSr0xw== + APPVEYOR_RDP_PASSWORD: + secure: PUmp7039ro52579dlxAk59tjpeeyiFbdWvHfLCkjF5c= matrix: - ##### android ######## - - BUILD_TARGERT: android - GENERATORS: "MSYS Makefiles" - BUILD_ARCH: "armeabi-v7a" - ANDROID_ARM_NEON: ON - DOWNLOAD_QT: TRUE - QT_VERSION_DIR: 5.12 - QT_VERSION: 5.12.6 - ANDROID_PLATFORM: android-24 - TOOLCHAIN_VERSION: 4.9 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/android4.9_arm_v0.2.9_in_windows.zip - - - BUILD_TARGERT: android - GENERATORS: "MSYS Makefiles" - BUILD_ARCH: "arm64-v8a" - ANDROID_ARM_NEON: ON - DOWNLOAD_QT: TRUE - QT_VERSION_DIR: 5.12 - QT_VERSION: 5.12.6 - ANDROID_PLATFORM: android-24 - TOOLCHAIN_VERSION: 4.9 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/android4.9_arm64_v0.2.9_in_windows.zip - - ##### msvc 2013 ######## - #- BUILD_TARGERT: windows_msvc - # GENERATORS: "Visual Studio 12 2013" - # TOOLCHAIN_VERSION: 12 - # QT_ROOT: C:\Qt\5.6\msvc2013 - # BUILD_ARCH: x86 - - #- BUILD_TARGERT: windows_msvc - # GENERATORS: "Visual Studio 12 2013 Win64" - # TOOLCHAIN_VERSION: 12 - # QT_ROOT: C:\Qt\5.6\msvc2013_64 - # BUILD_ARCH: x64 - - ##### msvc 2017 ######## + ##### msvc 2015 ######## - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - GENERATORS: "Visual Studio 15 2017" - BUILD_TARGERT: windows_msvc - TOOLCHAIN_VERSION: 15 - QT_ROOT: C:\Qt\5.12\msvc2017 - BUILD_ARCH: x86 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/windows_msvc15_x86_v0.2.9.zip - - - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - GENERATORS: "Visual Studio 15 2017 Win64" - BUILD_TARGERT: windows_msvc - TOOLCHAIN_VERSION: 15 - QT_ROOT: C:\Qt\5.12\msvc2017_64 - BUILD_ARCH: x64 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/windows_msvc15_x64_v0.2.9.zip - - ##### msvc 2015 ######## - - BUILD_TARGERT: windows_msvc GENERATORS: "Visual Studio 14 2015" TOOLCHAIN_VERSION: 14 + VCPKG_PLATFORM_TOOLSET: v140 QT_ROOT: C:\Qt\5.6\msvc2015 BUILD_ARCH: x86 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/windows_msvc14_x86_v0.2.9.zip - - BUILD_TARGERT: windows_msvc + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 GENERATORS: "Visual Studio 14 2015 Win64" TOOLCHAIN_VERSION: 14 - QT_ROOT: C:\Qt\5.10\msvc2015_64 + QT_ROOT: C:\Qt\5.6\msvc2015_64 BUILD_ARCH: x64 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/windows_msvc14_x64_v0.2.9.zip - - ##### mingw ######## - - BUILD_TARGERT: windows_mingw - GENERATORS: "MSYS Makefiles" - TOOLCHAIN_VERSION: 492_32 - QT_ROOT: C:\Qt\5.6\mingw49_32 - BUILD_ARCH: x86 - - - BUILD_TARGERT: windows_mingw - GENERATORS: "MSYS Makefiles" - TOOLCHAIN_VERSION: 530_32 - QT_ROOT: C:\Qt\5.10\mingw53_32 - BUILD_ARCH: x86 - DOWNLOAD_THIRDLIBS_URL: https://github.com/KangLin/RabbitThirdLibrary/releases/download/v0.2.9/windows_mingw530_32_x86_v0.2.9.zip matrix: fast_finish: false @@ -109,36 +43,106 @@ init: - if NOT "%QT_ROOT%" == "NO" for /f "delims=" %%i in ('%QT_ROOT%/bin/qmake -query QT_VERSION') do (set QT_VERSION=%%i) - echo QT_ROOT=%QT_ROOT% - echo QT_VERSION=%QT_VERSION% - - del C:\msys64\usr\bin\link.exe install: - - C:\msys64\autorebase.bat - - C:\msys64\usr\bin\pacman.exe -S --noconfirm unzip - - ps: Start-FileDownload https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-windows-i386.zip - #- curl -fsSL -o cmake-3.26.4-windows-i386.zip https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-windows-i386.zip - - 7z x cmake-3.26.4-windows-i386.zip - - set PATH=%CD%\cmake-3.26.4-windows-i386\bin;%PATH% - #- if "%BUILD_TARGERT%"=="windows_mingw" set PATH=C:\Qt\Tools\mingw%TOOLCHAIN_VERSION%_32\bin;%PATH% - - if "%BUILD_TARGERT%" == "windows_mingw" set MSYSTEM=MINGW32 #设置编译系统为MINGW32 - -before_build: - - cd %APPVEYOR_BUILD_FOLDER% - git submodule update --init --recursive + - cd %APPVEYOR_BUILD_FOLDER% - git clone https://github.com/KangLin/RabbitCommon.git - set RabbitCommon_DIR=%APPVEYOR_BUILD_FOLDER%/RabbitCommon - - cd %APPVEYOR_BUILD_FOLDER% - - C:\msys64\usr\bin\bash.exe %APPVEYOR_BUILD_FOLDER%\ci\build-install-tools-windows.sh + + - set OTHER_SOURCE=%APPVEYOR_BUILD_FOLDER%\..\other_source + - set INSTALL_DIR=%OTHER_SOURCE%\install_dir + - if not exist "%OTHER_SOURCE%" ( mkdir "%OTHER_SOURCE%" ) + - if not exist "%INSTALL_DIR%" ( mkdir "%INSTALL_DIR%" ) + + - cd %OTHER_SOURCE% + - set CMAKE_VERSION=3.28.3 + - if not exist cmake-%CMAKE_VERSION%-windows-i386 (curl -fsSL -o cmake-%CMAKE_VERSION%-windows-i386.zip https://github.com/Kitware/CMake/releases/download/v%CMAKE_VERSION%/cmake-%CMAKE_VERSION%-windows-i386.zip && 7z x cmake-%CMAKE_VERSION%-windows-i386.zip) + - cd cmake-%CMAKE_VERSION%-windows-i386 + - set PATH="%CD%/bin";%PATH% + + - cd %OTHER_SOURCE% + - set VCPKG_DIR=%OTHER_SOURCE%\vcpkg + - ps: | + if( -not (Test-Path -Path ${env:VCPKG_DIR}) ) + { + git clone -q "https://github.com/microsoft/vcpkg.git" + cd ${env:VCPKG_DIR} + git checkout -q -b a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6 a1a1cbc975abf909a6c8985a6a2b8fe20bbd9bd6 + bootstrap-vcpkg.bat + } + +before_build: + - cd %OTHER_SOURCE% + - ps: | + if ( -not (Test-Path -Path ${env:INSTALL_DIR}\lib\cmake\SeetaFaceDetectorConfig.cmake) ) + { + git clone -q https://github.com/KangLin/SeetaFace2.git + cd SeetaFace2 + cmake -E make_directory build + cd build + cmake .. ` + -G"${env:GENERATORS}" ` + -DCMAKE_BUILD_TYPE=Release ` + -DCMAKE_INSTALL_PREFIX="${env:INSTALL_DIR}" ` + -DCMAKE_TOOLCHAIN_FILE="${env:VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake" ` + -DBUILD_EXAMPLE=OFF + cmake --build . --config Release + cmake --build . --config Release --target install + } + + - cd %OTHER_SOURCE% + - ps: | + if ( -not (Test-Path -Path ${env:INSTALL_DIR}\lib\cmake\facedetection\facedetectionConfig.cmake) ) + { + git clone -q https://github.com/ShiqiYu/libfacedetection.git + cd libfacedetection + cmake -E make_directory build + cd build + cmake .. ` + -G"${env:GENERATORS}" ` + -DCMAKE_BUILD_TYPE=Release ` + -DCMAKE_INSTALL_PREFIX="${env:INSTALL_DIR}" ` + -DCMAKE_TOOLCHAIN_FILE="${env:VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake" ` + -DBUILD_SHARED_LIBS=ON + cmake --build . --config Release + cmake --build . --config Release --target install + } build_script: - cd %APPVEYOR_BUILD_FOLDER% - - C:\msys64\usr\bin\bash.exe %APPVEYOR_BUILD_FOLDER%\ci\build.sh + - cmake -E make_directory build + - cd build + - cmake %APPVEYOR_BUILD_FOLDER% ^ + -G"%GENERATORS%" ^ + -DCMARK_SHARED=OFF ^ + -DCMARK_TESTS=OFF ^ + -DCMARK_STATIC=ON ^ + -DQT_DIR=%QT_ROOT%/lib/cmake/Qt5 ^ + -DQt5_DIR=%QT_ROOT%/lib/cmake/Qt5 ^ + -DINSTALL_QT=ON ^ + -DCMAKE_BUILD_TYPE=Release ^ + -DCMAKE_INSTALL_PREFIX="%cd%/install" ^ + -DCMAKE_PREFIX_PATH="%INSTALL_DIR%" ^ + -DCMAKE_TOOLCHAIN_FILE="%VCPKG_DIR%/scripts/buildsystems/vcpkg.cmake" ^ + -DX_VCPKG_APPLOCAL_DEPS_INSTALL=ON ^ + -DVCPKG_APPLOCAL_DEPS=ON ^ + -DSeetaFace_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaNet_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaFaceDetector_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaFaceLandmarker_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaFaceRecognizer_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaFaceTracker_DIR=%INSTALL_DIR%/lib/cmake ^ + -DSeetaQualityAssessor_DIR=%INSTALL_DIR%/lib/cmake ^ + -Dfacedetection_DIR=%INSTALL_DIR%/lib/cmake/facedetection ^ + -DENABLE_DOWNLOAD=ON + - cmake --build . --config Release + - cmake --build . --config Release --target install + - makensis Install.nsi + - rename FaceRecognizer_%FaceRecognizerVersion%_Setup.exe FaceRecognizer_%FaceRecognizerVersion%_windows_xp_%BUILD_ARCH%_Setup.exe artifacts: - - path: build_$(BUILD_TARGERT)\FaceRecognizer_*_Setup.exe - name: FaceRecognizer_$(BUILD_TARGERT)$(TOOLCHAIN_VERSION)_$(BUILD_ARCH)_$(QT_VERSION)_$(appveyor_build_version) - type: zip - #- path: build_$(BUILD_TARGERT)\update_windows.xml - - path: FaceRecognizer_*.apk + - path: build_$(BUILD_TARGERT)\FaceRecognizer_%FaceRecognizerVersion%_windows_xp_%BUILD_ARCH%_Setup.exe test: off diff --git a/ci/build.sh b/ci/build.sh index f5720ed..96718b0 100644 --- a/ci/build.sh +++ b/ci/build.sh @@ -348,8 +348,8 @@ if [ "${BUILD_TARGERT}" = "windows_msvc" ]; then if [ -z "${STATIC}" ]; then "/C/Program Files (x86)/NSIS/makensis.exe" "Install.nsi" MD5=`md5sum FaceRecognizer_${VERSION}_Setup.exe|awk '{print $1}'` - echo "MD5:${MD5}" - install/bin/FaceRecognizerApp.exe -f "`pwd`/update_windows.xml" --md5 ${MD5} \ - -u https://github.com/KangLin/FaceRecognizer/releases/download/${VERSION}/FaceRecognizer_${VERSION}_Setup.exe;https://sourceforge.net/projects/FaceRecognizer/files/${VERSION}/FaceRecognizer_${VERSION}_Setup.exe + #echo "MD5:${MD5}" + #install/bin/FaceRecognizerApp.exe -f "`pwd`/update_windows.json" --md5 ${MD5} \ + # -u https://github.com/KangLin/FaceRecognizer/releases/download/${VERSION}/FaceRecognizer_${VERSION}_Setup.exe;https://sourceforge.net/projects/FaceRecognizer/files/${VERSION}/FaceRecognizer_${VERSION}_Setup.exe fi fi diff --git a/debian/changelog b/debian/changelog index 4532a6e..ec34123 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -facerecognizer (0.0.4) stable; urgency=medium +facerecognizer (0.0.4) unstable; urgency=medium * Initial Release. diff --git a/deploy.sh b/deploy.sh index 8a0d621..04f97cb 100644 --- a/deploy.sh +++ b/deploy.sh @@ -32,7 +32,7 @@ sed -i "s/^\!define PRODUCT_VERSION.*/\!define PRODUCT_VERSION \"${VERSION}\"/g" sed -i "s/^\SET(BUILD_VERSION.*/\SET(BUILD_VERSION \"${VERSION}\")/g" ${SOURCE_DIR}/CMakeLists.txt sed -i "s/.*${VERSION}