diff --git a/.github/workflows/linux-arm.yml b/.github/workflows/linux-arm.yml index b1f8bd3cda..7e3cf87f83 100644 --- a/.github/workflows/linux-arm.yml +++ b/.github/workflows/linux-arm.yml @@ -1,4 +1,4 @@ -name: Linux ARM +name: Linux ARM on: pull_request: @@ -19,7 +19,7 @@ jobs: steps: - uses: actions/checkout@v6 with: - path: opencvsharp + submodules: true - name: Install dependencies run: | @@ -52,69 +52,21 @@ jobs: id: opencv-cache uses: actions/cache/restore@v5 with: - path: ${{ github.workspace }}/opencv_artifacts/ + path: | + ${{ github.workspace }}/opencv_artifacts/include + ${{ github.workspace }}/opencv_artifacts/lib key: opencv-arm-${{ env.OPENCV_VERSION }}-${{ hashFiles('.github/workflows/linux-arm.yml') }} restore-keys: | opencv-arm-${{ env.OPENCV_VERSION }}- - - name: Checkout OpenCV - if: steps.opencv-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v6 - with: - repository: opencv/opencv - path: opencv - ref: ${{ env.OPENCV_VERSION }} - - name: Checkout OpenCV Contrib - if: steps.opencv-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v6 - with: - repository: opencv/opencv_contrib - path: opencv_contrib - ref: ${{ env.OPENCV_VERSION }} - - name: Build OpenCV if: steps.opencv-cache.outputs.cache-hit != 'true' run: | cmake \ + -C cmake/opencv_build_options.cmake \ -S opencv \ -B opencv/build \ - -D CMAKE_BUILD_TYPE=Release \ -D OPENCV_EXTRA_MODULES_PATH=${GITHUB_WORKSPACE}/opencv_contrib/modules \ - -D BUILD_SHARED_LIBS=OFF \ - -D ENABLE_CXX11=ON \ - -D BUILD_EXAMPLES=OFF \ - -D BUILD_DOCS=OFF \ - -D BUILD_PERF_TESTS=OFF \ - -D BUILD_TESTS=OFF \ - -D BUILD_JAVA=OFF \ - -D BUILD_opencv_apps=OFF \ - -D BUILD_opencv_barcode=OFF \ - -D BUILD_opencv_java_bindings_generator=OFF \ - -D BUILD_opencv_python_bindings_generator=OFF \ - -D BUILD_opencv_python_tests=OFF \ - -D BUILD_opencv_ts=OFF \ - -D BUILD_opencv_js=OFF \ - -D BUILD_opencv_js_bindings_generator=OFF \ - -D BUILD_opencv_bioinspired=OFF \ - -D BUILD_opencv_ccalib=OFF \ - -D BUILD_opencv_datasets=OFF \ - -D BUILD_opencv_dnn_objdetect=OFF \ - -D BUILD_opencv_dpm=OFF \ - -D BUILD_opencv_fuzzy=OFF \ - -D BUILD_opencv_gapi=ON \ - -D BUILD_opencv_intensity_transform=OFF \ - -D BUILD_opencv_mcc=OFF \ - -D BUILD_opencv_objc_bindings_generator=OFF \ - -D BUILD_opencv_rapid=OFF \ - -D BUILD_opencv_reg=OFF \ - -D BUILD_opencv_stereo=OFF \ - -D BUILD_opencv_structured_light=OFF \ - -D BUILD_opencv_surface_matching=OFF \ - -D BUILD_opencv_wechat_qrcode=ON \ - -D BUILD_opencv_videostab=OFF \ - -D WITH_GSTREAMER=OFF \ - -D WITH_ADE=OFF \ - -D OPENCV_ENABLE_NONFREE=ON \ -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts cmake --build opencv/build -j 3 cmake --install opencv/build @@ -125,23 +77,25 @@ jobs: if: steps.opencv-cache.outputs.cache-hit != 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' uses: actions/cache/save@v5 with: - path: ${{ github.workspace }}/opencv_artifacts/ + path: | + ${{ github.workspace }}/opencv_artifacts/include + ${{ github.workspace }}/opencv_artifacts/lib key: opencv-arm-${{ env.OPENCV_VERSION }} - name: Build OpenCvSharpExtern run: | cmake \ - -S opencvsharp/src \ - -B opencvsharp/src/build \ + -S src \ + -B src/build \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts - cmake --build opencvsharp/src/build -j - ls opencvsharp/src/build/OpenCvSharpExtern - cp opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cmake --build src/build -j + ls src/build/OpenCvSharpExtern + cp src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/ - name: Check OpenCvSharpExtern run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cd ${GITHUB_WORKSPACE}/nuget/ ldd libOpenCvSharpExtern.so nm libOpenCvSharpExtern.so echo -ne "#include \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c @@ -162,7 +116,7 @@ jobs: version="${OPENCV_VERSION}.${yyyymmdd}${BETA}" echo "Package version: $version" - cd ${GITHUB_WORKSPACE}/opencvsharp + cd ${GITHUB_WORKSPACE} dotnet pack nuget/OpenCvSharp4.runtime.linux-arm.csproj -o ${GITHUB_WORKSPACE}/artifacts_arm -p:Version=$version ls ${GITHUB_WORKSPACE}/artifacts_arm @@ -174,9 +128,9 @@ jobs: - name: Test run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests + cd ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests dotnet build -c Release -f net8.0 - cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/ - cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/ - sudo cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so /usr/lib/ + cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net8.0/ + cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/ + sudo cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so /usr/lib/ LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime linux-arm64 --logger "trx;LogFileName=test-results.trx" < /dev/null diff --git a/.github/workflows/ubuntu-slim.yml b/.github/workflows/ubuntu-slim.yml index f9be6795e6..08d25335f0 100644 --- a/.github/workflows/ubuntu-slim.yml +++ b/.github/workflows/ubuntu-slim.yml @@ -1,4 +1,4 @@ -name: Ubuntu Slim +name: Ubuntu Slim on: pull_request: @@ -25,7 +25,7 @@ jobs: steps: - uses: actions/checkout@v6 with: - path: opencvsharp + submodules: true - name: Install dependencies run: | @@ -54,39 +54,15 @@ jobs: ${{ github.workspace }}/opencv_artifacts_slim/lib key: opencv-${{ env.OPENCV_VERSION }}-ubuntu-${{ matrix.ubuntu }}-slim - - name: Checkout OpenCV - if: steps.opencv-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v6 - with: - repository: opencv/opencv - path: opencv - ref: ${{ env.OPENCV_VERSION }} - - name: Build OpenCV (slim) if: steps.opencv-cache.outputs.cache-hit != 'true' run: | # Keep a practical subset (e.g., features2d/objdetect) while avoiding heavy runtime deps # from UI/video stacks and contrib modules. cmake \ + -C cmake/opencv_build_options_slim.cmake \ -S opencv \ -B opencv/build \ - -D CMAKE_BUILD_TYPE=Release \ - -D BUILD_SHARED_LIBS=OFF \ - -D ENABLE_CXX11=ON \ - -D BUILD_LIST=core,imgproc,imgcodecs,calib3d,features2d,flann,objdetect,photo \ - -D BUILD_PROTOBUF=OFF \ - -D BUILD_opencv_dnn=OFF \ - -D BUILD_EXAMPLES=OFF \ - -D BUILD_DOCS=OFF \ - -D BUILD_PERF_TESTS=OFF \ - -D BUILD_TESTS=OFF \ - -D BUILD_JAVA=OFF \ - -D BUILD_opencv_apps=OFF \ - -D WITH_GSTREAMER=OFF \ - -D WITH_FFMPEG=OFF \ - -D WITH_GTK=OFF \ - -D WITH_PROTOBUF=OFF \ - -D WITH_ADE=OFF \ -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts_slim cmake --build opencv/build -j 3 cmake --install opencv/build @@ -141,8 +117,8 @@ jobs: run: | # Match OpenCV subset above: keep common CV modules, disable wrappers for disabled modules. cmake \ - -S opencvsharp/src \ - -B opencvsharp/src/build-slim \ + -S src \ + -B src/build-slim \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts_slim \ -D NO_CONTRIB=ON \ @@ -153,18 +129,18 @@ jobs: -D NO_DNN=ON \ -D NO_ML=ON \ -D NO_BARCODE=ON - cmake --build opencvsharp/src/build-slim -j - cp opencvsharp/src/build-slim/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cmake --build src/build-slim -j + cp src/build-slim/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/ - name: Check OpenCvSharpExtern dependencies (slim) run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cd ${GITHUB_WORKSPACE}/nuget/ ldd -r libOpenCvSharpExtern.so ! ldd libOpenCvSharpExtern.so | grep -q "not found" - name: Smoke test OpenCvSharpExtern (slim) run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cd ${GITHUB_WORKSPACE}/nuget/ echo -ne "#include \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern LD_LIBRARY_PATH=. ./test @@ -182,7 +158,7 @@ jobs: version="${OPENCV_VERSION}.${yyyymmdd}${BETA}" echo "Package version: $version" - cd ${GITHUB_WORKSPACE}/opencvsharp + cd ${GITHUB_WORKSPACE} package_project="OpenCvSharp4.official.runtime.ubuntu.${{ matrix.ubuntu }}-x64.slim.csproj" dotnet pack "nuget/${package_project}" -o ${GITHUB_WORKSPACE}/artifacts -p:Version=$version @@ -195,7 +171,7 @@ jobs: version="${OPENCV_VERSION}.${yyyymmdd}${BETA}" echo "Package version: $version" - cd ${GITHUB_WORKSPACE}/opencvsharp + cd ${GITHUB_WORKSPACE} dotnet pack "nuget/OpenCvSharp4.official.runtime.linux-x64.slim.csproj" -o ${GITHUB_WORKSPACE}/artifacts -p:Version=$version - uses: actions/upload-artifact@v6 diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index f405ed7fa9..e43eda6954 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -1,4 +1,4 @@ -name: Ubuntu +name: Ubuntu on: pull_request: @@ -27,7 +27,7 @@ jobs: steps: - uses: actions/checkout@v6 with: - path: opencvsharp + submodules: true - name: Install dependencies run: | @@ -65,64 +65,14 @@ jobs: ${{ github.workspace }}/opencv_artifacts/lib key: opencv-${{ env.OPENCV_VERSION }}-ubuntu-${{ matrix.ubuntu }} - - name: Checkout OpenCV - if: steps.opencv-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v6 - with: - repository: opencv/opencv - path: opencv - ref: ${{ env.OPENCV_VERSION }} - - name: Checkout OpenCV Contrib - if: steps.opencv-cache.outputs.cache-hit != 'true' - uses: actions/checkout@v6 - with: - repository: opencv/opencv_contrib - path: opencv_contrib - ref: ${{ env.OPENCV_VERSION }} - - name: Build OpenCV if: steps.opencv-cache.outputs.cache-hit != 'true' run: | cmake \ + -C cmake/opencv_build_options.cmake \ -S opencv \ -B opencv/build \ - -D CMAKE_BUILD_TYPE=Release \ -D OPENCV_EXTRA_MODULES_PATH=${GITHUB_WORKSPACE}/opencv_contrib/modules \ - -D BUILD_SHARED_LIBS=OFF \ - -D ENABLE_CXX11=ON \ - -D BUILD_EXAMPLES=OFF \ - -D BUILD_DOCS=OFF \ - -D BUILD_PERF_TESTS=OFF \ - -D BUILD_TESTS=OFF \ - -D BUILD_JAVA=OFF \ - -D BUILD_opencv_apps=OFF \ - -D BUILD_opencv_barcode=OFF \ - -D BUILD_opencv_java_bindings_generator=OFF \ - -D BUILD_opencv_python_bindings_generator=OFF \ - -D BUILD_opencv_python_tests=OFF \ - -D BUILD_opencv_ts=OFF \ - -D BUILD_opencv_js=OFF \ - -D BUILD_opencv_js_bindings_generator=OFF \ - -D BUILD_opencv_bioinspired=OFF \ - -D BUILD_opencv_ccalib=OFF \ - -D BUILD_opencv_datasets=OFF \ - -D BUILD_opencv_dnn_objdetect=OFF \ - -D BUILD_opencv_dpm=OFF \ - -D BUILD_opencv_fuzzy=OFF \ - -D BUILD_opencv_gapi=ON \ - -D BUILD_opencv_intensity_transform=OFF \ - -D BUILD_opencv_mcc=OFF \ - -D BUILD_opencv_objc_bindings_generator=OFF \ - -D BUILD_opencv_rapid=OFF \ - -D BUILD_opencv_reg=OFF \ - -D BUILD_opencv_stereo=OFF \ - -D BUILD_opencv_structured_light=OFF \ - -D BUILD_opencv_surface_matching=OFF \ - -D BUILD_opencv_wechat_qrcode=ON \ - -D BUILD_opencv_videostab=OFF \ - -D WITH_GSTREAMER=OFF \ - -D WITH_ADE=OFF \ - -D OPENCV_ENABLE_NONFREE=ON \ -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts cmake --build opencv/build -j 3 cmake --install opencv/build @@ -141,17 +91,17 @@ jobs: - name: Build OpenCvSharpExtern run: | cmake \ - -S opencvsharp/src \ - -B opencvsharp/src/build \ + -S src \ + -B src/build \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts - cmake --build opencvsharp/src/build -j - ls opencvsharp/src/build/OpenCvSharpExtern - cp opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cmake --build src/build -j + ls src/build/OpenCvSharpExtern + cp src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/ - name: Check OpenCvSharpExtern run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/ + cd ${GITHUB_WORKSPACE}/nuget/ ldd libOpenCvSharpExtern.so nm libOpenCvSharpExtern.so echo -ne "#include \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c @@ -165,11 +115,11 @@ jobs: - name: Test run: | - cd ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests + cd ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests dotnet build -c Release -f net8.0 - cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/ - cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/ - sudo cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so /usr/lib/ + cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net8.0/ + cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/ + sudo cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so /usr/lib/ LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime linux-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null - name: Create NuGet package @@ -181,7 +131,7 @@ jobs: version="${OPENCV_VERSION}.${yyyymmdd}${BETA}" echo "Package version: $version" - cd ${GITHUB_WORKSPACE}/opencvsharp + cd ${GITHUB_WORKSPACE} package_project="OpenCvSharp4.official.runtime.ubuntu.${{ matrix.ubuntu }}-x64.csproj" dotnet pack "nuget/${package_project}" -o ${GITHUB_WORKSPACE}/artifacts -p:Version=$version @@ -196,7 +146,7 @@ jobs: version="${OPENCV_VERSION}.${yyyymmdd}${BETA}" echo "Package version: $version" - cd ${GITHUB_WORKSPACE}/opencvsharp + cd ${GITHUB_WORKSPACE} dotnet pack "nuget/OpenCvSharp4.official.runtime.linux-x64.csproj" -o ${GITHUB_WORKSPACE}/artifacts -p:Version=$version ls ${GITHUB_WORKSPACE}/artifacts diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c8f3a104b1..d37e378071 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -9,8 +9,6 @@ on: env: OPENCV_VERSION: "4.13.0" - OPENCV_FILES_TAG: "4.13.0.20260207" - TESSERACT_RELEASE_VERSION: "2024.08.19" jobs: build: @@ -21,6 +19,7 @@ jobs: - name: Checkout uses: actions/checkout@v6 with: + submodules: true fetch-depth: 1 - name: Install .NET @@ -29,32 +28,63 @@ jobs: dotnet-version: | 8.0.x - - name: Download OpenCV binaries - shell: powershell - env: - GH_TOKEN: ${{ github.token }} + - name: Restore vcpkg packages cache + id: vcpkg-cache + uses: actions/cache/restore@v5 + with: + path: ${{ github.workspace }}/vcpkg_installed + key: vcpkg-${{ hashFiles('vcpkg.json', 'cmake/triplets/*.cmake') }}-x64-windows-static + + - name: Update vcpkg to match builtin-baseline + if: steps.vcpkg-cache.outputs.cache-hit != 'true' run: | - gh release download --repo shimat/opencv_files ${env:OPENCV_FILES_TAG} --pattern "opencv_win_x64.zip" - Expand-Archive -Path opencv_win_x64.zip -DestinationPath opencv_files/opencv_win_x64 -Force -ErrorAction Stop - ls opencv_files/opencv_win_x64 + $baseline = (Get-Content vcpkg.json | ConvertFrom-Json).'builtin-baseline' + git -C $env:VCPKG_INSTALLATION_ROOT fetch --depth=1 origin $baseline + git -C $env:VCPKG_INSTALLATION_ROOT checkout $baseline - - name: Download Tesseract binaries + - name: Install vcpkg dependencies + if: steps.vcpkg-cache.outputs.cache-hit != 'true' + run: vcpkg install --triplet x64-windows-static --overlay-triplets=${{ github.workspace }}/cmake/triplets --x-install-root=${{ github.workspace }}/vcpkg_installed + + - name: Save vcpkg packages cache + if: steps.vcpkg-cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v5 + with: + path: ${{ github.workspace }}/vcpkg_installed + key: vcpkg-${{ hashFiles('vcpkg.json', 'cmake/triplets/*.cmake') }}-x64-windows-static + + - name: Restore OpenCV cache + id: opencv-cache + uses: actions/cache/restore@v5 + with: + path: ${{ github.workspace }}/opencv_artifacts + key: opencv-${{ env.OPENCV_VERSION }}-windows-x64-${{ hashFiles('cmake/opencv_build_options.cmake') }} + + - name: Build OpenCV + if: steps.opencv-cache.outputs.cache-hit != 'true' shell: powershell - env: - GH_TOKEN: ${{ github.token }} run: | - gh release download --repo shimat/tesseract_vcpkg ${TESSERACT_RELEASE_VERSION} --pattern "*.zip" --output tesseract.zip - Expand-Archive -Path tesseract.zip -DestinationPath tesseract_files -Force -ErrorAction Stop - ls tesseract_files - Move-Item tesseract_files/tesseract_vcpkg.0.0.9-beta tesseract_files/tesseract_vcpkg - ls tesseract_files/tesseract_vcpkg - New-Item tesseract_files/tesseract_vcpkg -ItemType Directory -Force - Move-Item tesseract_files/tesseract_vcpkg/installed/* tesseract_files/tesseract_vcpkg/ - ls tesseract_files/tesseract_vcpkg - - - name: NuGet restore - shell: cmd - run: nuget restore + cmake ` + -C cmake/opencv_build_options.cmake ` + -S opencv ` + -B opencv/build ` + -G "Visual Studio 17 2022" -A x64 ` + -D CMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" ` + -D VCPKG_TARGET_TRIPLET=x64-windows-static ` + -D VCPKG_MANIFEST_INSTALL=OFF ` + -D "VCPKG_INSTALLED_DIR=$env:GITHUB_WORKSPACE/vcpkg_installed" ` + -D "VCPKG_OVERLAY_TRIPLETS=$env:GITHUB_WORKSPACE/cmake/triplets" ` + -D OPENCV_EXTRA_MODULES_PATH="$env:GITHUB_WORKSPACE/opencv_contrib/modules" ` + -D CMAKE_INSTALL_PREFIX="$env:GITHUB_WORKSPACE/opencv_artifacts" + cmake --build opencv/build --config Release -j 4 + cmake --install opencv/build --config Release + + - name: Save OpenCV cache + if: steps.opencv-cache.outputs.cache-hit != 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main' + uses: actions/cache/save@v5 + with: + path: ${{ github.workspace }}/opencv_artifacts + key: opencv-${{ env.OPENCV_VERSION }}-windows-x64-${{ hashFiles('cmake/opencv_build_options.cmake') }} # Commented out: FFmpeg backend is included in opencv_videoio_ffmpeg DLLs # If video tests fail, uncomment this step @@ -63,43 +93,46 @@ jobs: # run: | # Install-WindowsFeature Server-Media-Foundation - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v2 - - - name: Build x64 - shell: cmd - run: msbuild OpenCvSharp.sln /t:build /p:configuration=Release /p:platform=x64 -maxcpucount - - - name: Build slim native runtime + - name: Build OpenCvSharpExtern (full) shell: powershell run: | $ErrorActionPreference = "Stop" - - # Compile OpenCvSharpExtern in "slim" mode by disabling selected wrapper modules. - # These NO_* macros are consumed by OpenCvSharpExtern headers. - $slimDefines = "/DNO_CONTRIB /DNO_STITCHING /DNO_VIDEO /DNO_VIDEOIO /DNO_HIGHGUI /DNO_DNN /DNO_ML /DNO_BARCODE" - $env:CL = "$slimDefines $env:CL" - - # Keep slim outputs/intermediates separate from the full Release build artifacts. - $slimOut = Join-Path $env:GITHUB_WORKSPACE "src/ReleaseSlim/x64/" - $slimInt = Join-Path $env:GITHUB_WORKSPACE "src/ReleaseSlim/obj/x64/" - New-Item -Path $slimOut -ItemType Directory -Force | Out-Null - New-Item -Path $slimInt -ItemType Directory -Force | Out-Null - - msbuild src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj ` - /t:Rebuild ` - /p:Configuration=Release ` - /p:Platform=x64 ` - /p:SolutionDir="${env:GITHUB_WORKSPACE}\\" ` - /p:OutDir="$slimOut" ` - /p:IntDir="$slimInt" ` - /p:PostBuildEventUseInBuild=false ` - /p:RunPostBuildEvent=Never ` - -maxcpucount - - $slimDll = Get-ChildItem "$slimOut" -Recurse -Filter OpenCvSharpExtern.dll | Select-Object -First 1 - if (-not $slimDll) { throw "Failed to locate slim OpenCvSharpExtern.dll" } - Copy-Item $slimDll.FullName "src/Release/x64/OpenCvSharpExtern.Slim.dll" -Force + cmake ` + -S src ` + -B src/build ` + -G "Visual Studio 17 2022" -A x64 ` + -D CMAKE_PREFIX_PATH="$env:GITHUB_WORKSPACE/opencv_artifacts" ` + -D CMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" ` + -D VCPKG_TARGET_TRIPLET=x64-windows-static ` + -D VCPKG_MANIFEST_INSTALL=OFF ` + -D "VCPKG_INSTALLED_DIR=$env:GITHUB_WORKSPACE/vcpkg_installed" ` + -D "VCPKG_OVERLAY_TRIPLETS=$env:GITHUB_WORKSPACE/cmake/triplets" + cmake --build src/build --config Release -j 4 + + - name: Build OpenCvSharpExtern (slim) + shell: powershell + run: | + $ErrorActionPreference = "Stop" + cmake ` + -S src ` + -B src/build_slim ` + -G "Visual Studio 17 2022" -A x64 ` + -D CMAKE_PREFIX_PATH="$env:GITHUB_WORKSPACE/opencv_artifacts" ` + -D CMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" ` + -D VCPKG_TARGET_TRIPLET=x64-windows-static ` + -D VCPKG_MANIFEST_INSTALL=OFF ` + -D "VCPKG_INSTALLED_DIR=$env:GITHUB_WORKSPACE/vcpkg_installed" ` + -D "VCPKG_OVERLAY_TRIPLETS=$env:GITHUB_WORKSPACE/cmake/triplets" ` + -D NO_CONTRIB=ON ` + -D NO_STITCHING=ON ` + -D NO_VIDEO=ON ` + -D NO_VIDEOIO=ON ` + -D NO_HIGHGUI=ON ` + -D NO_DNN=ON ` + -D NO_ML=ON ` + -D NO_BARCODE=ON ` + -D NO_INSTALL_TO_TEST=ON + cmake --build src/build_slim --config Release -j 4 - name: Test shell: cmd diff --git a/.gitignore b/.gitignore index 2f2c3c11dd..b914252294 100644 --- a/.gitignore +++ b/.gitignore @@ -118,6 +118,13 @@ UpgradeLog*.XML /nuget/*.nupkg /Help /myresults.xml + +# Local OpenCV / Tesseract build outputs (generated by build_opencv_windows.ps1) +/opencv/build*/ +/opencv_artifacts/ +/tesseract_artifacts/ +/vcpkg_installed/ +/src/build/ /opencv_files /test/OpenCvSharp.Tests/dll/x64/*.dll /test/OpenCvSharp.Tests/dll/x86/*.dll diff --git a/.gitmodules b/.gitmodules index e69de29bb2..afeb2e601b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "opencv"] + path = opencv + url = https://github.com/opencv/opencv.git +[submodule "opencv_contrib"] + path = opencv_contrib + url = https://github.com/opencv/opencv_contrib.git diff --git a/OpenCvSharp.sln b/OpenCvSharp.sln index 92066a74bc..92e0ccda4d 100644 --- a/OpenCvSharp.sln +++ b/OpenCvSharp.sln @@ -18,8 +18,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.Extensions", "s EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenCvSharpExtern", "src\OpenCvSharpExtern\OpenCvSharpExtern.vcxproj", "{8E7279F8-F801-4672-B42F-1ED2C68B16A4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenCvSharp.DebuggerVisualizers", "src\OpenCvSharp.DebuggerVisualizers\OpenCvSharp.DebuggerVisualizers.csproj", "{4232CB4A-DFE3-46CA-9503-C5F1798BAED3}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.NupkgBetaRemover", "src\tools\OpenCvSharp.NupkgBetaRemover\OpenCvSharp.NupkgBetaRemover.csproj", "{CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.WpfExtensions", "src\OpenCvSharp.WpfExtensions\OpenCvSharp.WpfExtensions.csproj", "{01FD66CE-F81A-4641-BE30-3CF9DE84D6D5}" @@ -31,8 +29,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenCvSharp.DebuggerVisualizers.Tester", "test\OpenCvSharp.DebuggerVisualizers.Tester\OpenCvSharp.DebuggerVisualizers.Tester.csproj", "{FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.Tests.Windows", "test\OpenCvSharp.Tests.Windows\OpenCvSharp.Tests.Windows.csproj", "{36F6A125-3633-441E-9794-97EB91E50F20}" EndProject Global @@ -95,35 +91,17 @@ Global {B4B78BB2-1B7C-4CF2-BC72-43789EEDCE00}.Release|x64.Build.0 = Release|Any CPU {B4B78BB2-1B7C-4CF2-BC72-43789EEDCE00}.Release|x86.ActiveCfg = Release|Any CPU {B4B78BB2-1B7C-4CF2-BC72-43789EEDCE00}.Release|x86.Build.0 = Release|Any CPU - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|ARM.ActiveCfg = Debug|Win32 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x64.ActiveCfg = Release|x64 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x64.Build.0 = Release|x64 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x86.ActiveCfg = Release|Win32 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x86.Build.0 = Release|Win32 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|ARM.ActiveCfg = Debug|x64 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x64.ActiveCfg = Debug|x64 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x64.Build.0 = Debug|x64 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Debug|x86.ActiveCfg = Debug|x64 {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|Any CPU.ActiveCfg = Release|x64 {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|Any CPU.Build.0 = Release|x64 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|ARM.ActiveCfg = Release|Win32 + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|ARM.ActiveCfg = Release|x64 {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|x64.ActiveCfg = Release|x64 {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|x64.Build.0 = Release|x64 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|x86.ActiveCfg = Release|Win32 - {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|x86.Build.0 = Release|Win32 - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|ARM.ActiveCfg = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|ARM.Build.0 = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|x64.ActiveCfg = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|x64.Build.0 = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|x86.ActiveCfg = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Debug|x86.Build.0 = Debug|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|Any CPU.Build.0 = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|ARM.ActiveCfg = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|ARM.Build.0 = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|x64.ActiveCfg = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|x64.Build.0 = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|x86.ActiveCfg = Release|Any CPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3}.Release|x86.Build.0 = Release|Any CPU + {8E7279F8-F801-4672-B42F-1ED2C68B16A4}.Release|x86.ActiveCfg = Release|x64 {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Debug|Any CPU.Build.0 = Debug|Any CPU {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -172,22 +150,6 @@ Global {1C399497-5240-439A-879A-4ACB34C409AE}.Release|x64.Build.0 = Release|Any CPU {1C399497-5240-439A-879A-4ACB34C409AE}.Release|x86.ActiveCfg = Release|Any CPU {1C399497-5240-439A-879A-4ACB34C409AE}.Release|x86.Build.0 = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|ARM.Build.0 = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|x64.Build.0 = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Debug|x86.Build.0 = Debug|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|Any CPU.Build.0 = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|ARM.ActiveCfg = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|ARM.Build.0 = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|x64.ActiveCfg = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|x64.Build.0 = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|x86.ActiveCfg = Release|Any CPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}.Release|x86.Build.0 = Release|Any CPU {36F6A125-3633-441E-9794-97EB91E50F20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {36F6A125-3633-441E-9794-97EB91E50F20}.Debug|Any CPU.Build.0 = Debug|Any CPU {36F6A125-3633-441E-9794-97EB91E50F20}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -213,11 +175,9 @@ Global {FFBBCF99-97F0-4F81-AAF6-8D851A8E1D2E} = {1F113DD0-E292-47A5-8EFF-3FB5D0869BF3} {B4B78BB2-1B7C-4CF2-BC72-43789EEDCE00} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {8E7279F8-F801-4672-B42F-1ED2C68B16A4} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {01FD66CE-F81A-4641-BE30-3CF9DE84D6D5} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {1C399497-5240-439A-879A-4ACB34C409AE} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC} = {1F113DD0-E292-47A5-8EFF-3FB5D0869BF3} {36F6A125-3633-441E-9794-97EB91E50F20} = {1F113DD0-E292-47A5-8EFF-3FB5D0869BF3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/README.md b/README.md index 94174bc783..0792f1906e 100644 --- a/README.md +++ b/README.md @@ -195,28 +195,66 @@ https://github.com/shimat?tab=packages ## OpenCvSharp Build Instructions ### Windows -- Install Visual Studio 2022 or later - - VC++ features are required. -- Run `download_opencv_windows.ps1` to download OpenCV libs and headers from https://github.com/shimat/opencv_files. Those lib files are precompiled by the owner of OpenCvSharp using GitHub Actions. -``` -.\download_opencv_windows.ps1 -``` -- Build OpenCvSharp - - Open `OpenCvSharp.sln` and build - -#### How to customize OpenCV binaries yourself -If you want to use OpenCV features that are not included by default in OpenCvSharp (e.g., GPU support), you will need to build OpenCV yourself. The binary files of OpenCV for OpenCvSharp for Windows are created in the [opencv_files](https://github.com/shimat/opencv_files) repository. See the README for details. -- `git clone --recursive https://github.com/shimat/opencv_files` -- Edit `build_windows.ps1` or `build_uwp.ps1` to customize the CMake parameters -- Run the PowerShell script +#### Prerequisites +- Visual Studio 2022 / 2026, or the corresponding Build Tools, with the **Desktop development with C++** workload +- CMake 3.20+ in PATH (`winget install Kitware.CMake`) +- Git in PATH +- [vcpkg](https://github.com/microsoft/vcpkg) in PATH or `VCPKG_INSTALLATION_ROOT` set + ```powershell + git clone https://github.com/microsoft/vcpkg C:\vcpkg + C:\vcpkg\bootstrap-vcpkg.bat + # Add C:\vcpkg to PATH, or set $env:VCPKG_INSTALLATION_ROOT = 'C:\vcpkg' + ``` + +#### Steps +1. Clone the repository with submodules (opencv + opencv_contrib are included as submodules): + ```powershell + git clone --recursive https://github.com/shimat/opencvsharp.git + cd opencvsharp + ``` + If you already cloned without submodules: + ```powershell + git submodule update --init --recursive + ``` + +2. Build OpenCV from source (Tesseract and other native dependencies are automatically installed via vcpkg): + ```powershell + # Install vcpkg dependencies (only needed once, or after vcpkg.json changes) + C:\vcpkg\vcpkg.exe install --triplet x64-windows-static --overlay-triplets cmake\triplets --x-install-root vcpkg_installed + ``` + ```powershell + .\build_opencv_windows.ps1 + # Use -Jobs N to control parallel build (default: 4) + .\build_opencv_windows.ps1 -Jobs 8 + ``` + Output is installed to `opencv_artifacts/`. + +3. Build the native wrapper `OpenCvSharpExtern`: + ```powershell + cmake -S src -B src\build -G "Visual Studio 17 2022" -A x64 ` + -D "CMAKE_PREFIX_PATH=$PWD\opencv_artifacts" ` + -D CMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" ` + -D VCPKG_TARGET_TRIPLET=x64-windows-static ` + -D "VCPKG_INSTALLED_DIR=$PWD\vcpkg_installed" ` + -D "VCPKG_OVERLAY_TRIPLETS=$PWD\cmake\triplets" + cmake --build src\build --config Release + ``` + +4. Build the managed OpenCvSharp library: + - Open `OpenCvSharp.sln` and build, or: + ```powershell + dotnet build src/OpenCvSharp/OpenCvSharp.csproj -c Release + ``` + > **Note on the native DLL:** Step 3 automatically copies `OpenCvSharpExtern.dll` into `test/OpenCvSharp.Tests/` as a post-build step, so `dotnet test` works out of the box. + > For your own application, either add `src\build\OpenCvSharpExtern\Release` to `PATH`, or copy `OpenCvSharpExtern.dll` alongside your app's output directory. ### Ubuntu - Build OpenCV with opencv_contrib: https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html - Install .NET Core SDK: https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu - Get OpenCvSharp source files ```bash -git clone https://github.com/shimat/opencvsharp.git +git clone --recursive https://github.com/shimat/opencvsharp.git cd opencvsharp git fetch --all --tags --prune && git checkout ${OPENCVSHARP_VERSION} ``` @@ -224,15 +262,14 @@ git fetch --all --tags --prune && git checkout ${OPENCVSHARP_VERSION} - Build native wrapper `OpenCvSharpExtern` ```bash cd opencvsharp/src -mkdir build -cd build +mkdir build && cd build cmake -D CMAKE_INSTALL_PREFIX=${YOUR_OPENCV_INSTALL_PATH} .. -make -j +make -j make install ``` -You should add a reference to `opencvsharp/src/build/OpenCvSharpExtern/libOpenCvSharpExtern.so` +Add a reference to the built shared library: ```bash -export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/shimat/opencvsharp/src/build/OpenCvSharpExtern" +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/path/to/opencvsharp/src/build/OpenCvSharpExtern" ``` - Build the managed OpenCvSharp library diff --git a/build_opencv_windows.ps1 b/build_opencv_windows.ps1 new file mode 100644 index 0000000000..7aead65af4 --- /dev/null +++ b/build_opencv_windows.ps1 @@ -0,0 +1,141 @@ +# Build OpenCV from source for Windows x64 development. +# Output: opencv_artifacts/ (include/ + lib/ + bin/) +# +# Prerequisites: +# - Visual Studio 2022 or 2026 Build Tools (with "Desktop development with C++" workload; VS 2019 is not supported) +# - CMake 3.20+ (available in PATH) +# - Git (available in PATH, with submodules initialized) +# - vcpkg (available in PATH or VCPKG_INSTALLATION_ROOT set) +# +# Usage: +# .\build_opencv_windows.ps1 +# .\build_opencv_windows.ps1 -Jobs 8 +# +# Before first run, initialize submodules if not already done: +# git submodule update --init --recursive + +param( + [int]$Jobs = 4 +) + +$ErrorActionPreference = "Stop" +$RepoRoot = $PSScriptRoot + +function Require-Command($name) { + if (-not (Get-Command $name -ErrorAction SilentlyContinue)) { + throw "Required command '$name' not found in PATH." + } +} + +if (-not (Get-Command cmake -ErrorAction SilentlyContinue)) { + Write-Error @" +cmake was not found in PATH. + +To fix this, choose one of the following: + 1. Install CMake via winget: + winget install Kitware.CMake + Then reopen this terminal so PATH is updated. + 2. Install CMake 3.20+ from https://cmake.org/download/ and add it to PATH. + 3. Launch this script from a developer shell that includes cmake in PATH. +"@ + exit 1 +} +Require-Command git + +# --------------------------------------------------------------------------- +# Verify submodules are present +# --------------------------------------------------------------------------- +if (-not (Test-Path "$RepoRoot/opencv/CMakeLists.txt")) { + throw "opencv submodule not found. Run: git submodule update --init --recursive" +} +if (-not (Test-Path "$RepoRoot/opencv_contrib/modules")) { + throw "opencv_contrib submodule not found. Run: git submodule update --init --recursive" +} + +$OpenCvVersion = (git -C "$RepoRoot/opencv" describe --tags --exact-match 2>$null) +if (-not $OpenCvVersion) { $OpenCvVersion = (git -C "$RepoRoot/opencv" rev-parse --short HEAD) } +Write-Host "OpenCV version: $OpenCvVersion" + +# --------------------------------------------------------------------------- +# Detect Visual Studio generator via vswhere +# --------------------------------------------------------------------------- +$vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" +if (-not (Test-Path $vswhere)) { + throw "vswhere.exe not found at '$vswhere'. Install Visual Studio or Build Tools first." +} +$vsInfo = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -format json 2>$null | ConvertFrom-Json +if (-not $vsInfo) { + throw "No Visual Studio installation with C++ tools found. Install 'Desktop development with C++' workload." +} +$vsMajor = [int]($vsInfo.installationVersion.Split('.')[0]) +$generatorMap = @{ + 17 = "Visual Studio 17 2022" + 18 = "Visual Studio 18 2026" +} +$vsGenerator = $generatorMap[$vsMajor] +if (-not $vsGenerator) { + throw "Unsupported Visual Studio major version: $vsMajor (from '$($vsInfo.installationVersion)'). Visual Studio 2022 or 2026 is required." +} +Write-Host "Using generator: $vsGenerator ($($vsInfo.displayName))" + +# --------------------------------------------------------------------------- +# Configure +# --------------------------------------------------------------------------- +$buildDir = "$RepoRoot/opencv/build-vs$vsMajor" +$installDir = "$RepoRoot/opencv_artifacts" + +# --------------------------------------------------------------------------- +# Resolve Tesseract prefix via vcpkg +# --------------------------------------------------------------------------- +$vcpkgRoot = $env:VCPKG_INSTALLATION_ROOT +if (-not $vcpkgRoot) { + $vcpkgCmd = Get-Command vcpkg -ErrorAction SilentlyContinue + if ($vcpkgCmd) { $vcpkgRoot = Split-Path $vcpkgCmd.Source } +} +if (-not $vcpkgRoot) { + Write-Error @" +vcpkg was not found. + +Install vcpkg and add it to PATH: + git clone https://github.com/microsoft/vcpkg C:\vcpkg + C:\vcpkg\bootstrap-vcpkg.bat + # Then add C:\vcpkg to PATH, or set: + # `$env:VCPKG_INSTALLATION_ROOT = 'C:\vcpkg' +"@ + exit 1 +} +$vcpkgToolchain = "$vcpkgRoot/scripts/buildsystems/vcpkg.cmake" +$vcpkgInstalledDir = "$RepoRoot/vcpkg_installed" +Write-Host "Using vcpkg toolchain: $vcpkgToolchain" + +Write-Host "Configuring OpenCV $OpenCvVersion ..." +cmake ` + -C "$RepoRoot/cmake/opencv_build_options.cmake" ` + -S "$RepoRoot/opencv" ` + -B "$buildDir" ` + -G "$vsGenerator" -A x64 ` + -D "CMAKE_TOOLCHAIN_FILE=$vcpkgToolchain" ` + -D "VCPKG_TARGET_TRIPLET=x64-windows-static" ` + -D "VCPKG_INSTALLED_DIR=$vcpkgInstalledDir" ` + -D "VCPKG_OVERLAY_TRIPLETS=$RepoRoot/cmake/triplets" ` + -D "OPENCV_EXTRA_MODULES_PATH=$RepoRoot/opencv_contrib/modules" ` + -D "CMAKE_INSTALL_PREFIX=$installDir" + +# --------------------------------------------------------------------------- +# Build + Install +# --------------------------------------------------------------------------- +Write-Host "Building OpenCV (this takes 30-60 minutes on first run) ..." +cmake --build "$buildDir" --config Release -j $Jobs +cmake --install "$buildDir" --config Release + +Write-Host "" +Write-Host "Done. OpenCV installed to: $installDir" +Write-Host "" +Write-Host "Next step — configure and build OpenCvSharpExtern:" +Write-Host " cmake -S src -B src\build -G `"$vsGenerator`" -A x64 ``" +Write-Host " -D `"CMAKE_PREFIX_PATH=`$PWD\opencv_artifacts`" ``" +Write-Host " -D CMAKE_TOOLCHAIN_FILE=`"$vcpkgToolchain`" ``" +Write-Host " -D VCPKG_TARGET_TRIPLET=x64-windows-static ``" +Write-Host " -D `"VCPKG_INSTALLED_DIR=`$PWD\vcpkg_installed`" ``" +Write-Host " -D `"VCPKG_OVERLAY_TRIPLETS=`$PWD\cmake\triplets`"" +Write-Host " cmake --build src\build --config Release" diff --git a/cmake/opencv_build_options.cmake b/cmake/opencv_build_options.cmake new file mode 100644 index 0000000000..ecc5d4887d --- /dev/null +++ b/cmake/opencv_build_options.cmake @@ -0,0 +1,58 @@ +# CMake initial cache for OpenCV full build. +# Used via: cmake -C cmake/opencv_build_options.cmake -S opencv ... +# Platform-specific settings (CMAKE_INSTALL_PREFIX, OPENCV_EXTRA_MODULES_PATH, +# CMAKE_PREFIX_PATH, generator) are passed directly by each build script/workflow. + +set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(ENABLE_CXX11 ON CACHE BOOL "" FORCE) +set(OPENCV_ENABLE_NONFREE ON CACHE BOOL "" FORCE) + +# Disable build outputs we don't need +set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(BUILD_DOCS OFF CACHE BOOL "" FORCE) +set(BUILD_PERF_TESTS OFF CACHE BOOL "" FORCE) +set(BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(BUILD_JAVA OFF CACHE BOOL "" FORCE) + +# Disable heavy/unused contrib and core modules +set(BUILD_opencv_apps OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_java_bindings_generator OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_python_bindings_generator OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_python_tests OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_ts OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_js OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_js_bindings_generator OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_bioinspired OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_ccalib OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_datasets OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_dnn_objdetect OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_dpm OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_fuzzy OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_gapi ON CACHE BOOL "" FORCE) +set(BUILD_opencv_intensity_transform OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_mcc OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_objc_bindings_generator OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_rapid OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_reg OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_stereo OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_structured_light OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_surface_matching OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_videostab OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_wechat_qrcode ON CACHE BOOL "" FORCE) + +# Disable unused 3rd-party integrations +set(WITH_GSTREAMER OFF CACHE BOOL "" FORCE) +set(WITH_ADE OFF CACHE BOOL "" FORCE) + +# On Windows, disable bundled 3rd-party lib builds so OpenCV uses the vcpkg-provided +# versions instead. This ensures OpenCVModules.cmake references paths in +# vcpkg_installed/ (which exist) rather than uninstalled paths in opencv_artifacts/. +# These packages are guaranteed to be present via vcpkg.json dependencies. +if(WIN32) + set(BUILD_ZLIB OFF CACHE BOOL "" FORCE) + set(BUILD_TIFF OFF CACHE BOOL "" FORCE) + set(BUILD_JPEG OFF CACHE BOOL "" FORCE) + set(BUILD_PNG OFF CACHE BOOL "" FORCE) + set(BUILD_WEBP OFF CACHE BOOL "" FORCE) +endif() \ No newline at end of file diff --git a/cmake/opencv_build_options_slim.cmake b/cmake/opencv_build_options_slim.cmake new file mode 100644 index 0000000000..9c266c5a60 --- /dev/null +++ b/cmake/opencv_build_options_slim.cmake @@ -0,0 +1,27 @@ +# CMake initial cache for OpenCV slim build (Ubuntu only). +# Used via: cmake -C cmake/opencv_build_options_slim.cmake -S opencv ... +# Platform-specific settings (CMAKE_INSTALL_PREFIX) are passed directly by the workflow. + +set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE) +set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) +set(ENABLE_CXX11 ON CACHE BOOL "" FORCE) + +# Restrict to a minimal module subset +set(BUILD_LIST "core,imgproc,imgcodecs,calib3d,features2d,flann,objdetect,photo" CACHE STRING "" FORCE) + +# Disable DNN and Protobuf (not needed in slim profile) +set(BUILD_opencv_dnn OFF CACHE BOOL "" FORCE) +set(BUILD_PROTOBUF OFF CACHE BOOL "" FORCE) +set(WITH_PROTOBUF OFF CACHE BOOL "" FORCE) + +set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +set(BUILD_DOCS OFF CACHE BOOL "" FORCE) +set(BUILD_PERF_TESTS OFF CACHE BOOL "" FORCE) +set(BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(BUILD_JAVA OFF CACHE BOOL "" FORCE) +set(BUILD_opencv_apps OFF CACHE BOOL "" FORCE) + +set(WITH_GSTREAMER OFF CACHE BOOL "" FORCE) +set(WITH_FFMPEG OFF CACHE BOOL "" FORCE) +set(WITH_GTK OFF CACHE BOOL "" FORCE) +set(WITH_ADE OFF CACHE BOOL "" FORCE) \ No newline at end of file diff --git a/cmake/triplets/x64-windows-static.cmake b/cmake/triplets/x64-windows-static.cmake new file mode 100644 index 0000000000..4cd9d5761e --- /dev/null +++ b/cmake/triplets/x64-windows-static.cmake @@ -0,0 +1,6 @@ +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE static) +set(VCPKG_LIBRARY_LINKAGE static) + +# Release-only build: skip debug libraries to reduce build time and artifact size. +set(VCPKG_BUILD_TYPE release) diff --git a/docfx/docfx.json b/docfx/docfx.json deleted file mode 100644 index 6cca82aaef..0000000000 --- a/docfx/docfx.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "metadata": [ - { - "src": [ - { - "files": ["OpenCvSharp/OpenCvSharp.csproj"], - "src": "../src" - } - ], - "dest": "api", - "disableGitFeatures": false, - "disableDefaultFilter": false, - "properties": { - "TargetFramework": "net8" - } - } - ], - "build": { - "content": [ - { - "files": [ - "api/**.yml", - "api/index.md" - ] - }, - { - "files": [ - "articles/**.md", - "articles/**/toc.yml", - "toc.yml", - "*.md", - "../*.md" - ] - } - ], - "resource": [ - { - "files": [ - "images/**", - "../docs/img/**" - ] - } - ], - "dest": "_site", - "globalMetadata": { - "_appName": "OpenCvSharp", - "_appTitle": "OpenCvSharp Documentation", - "_appFooter": "OpenCvSharp - .NET wrapper for OpenCV", - "_enableSearch": true, - "_enableNewTab": true, - "_disableContribution": false, - "_gitContribute": { - "repo": "https://github.com/shimat/opencvsharp", - "branch": "main" - }, - "_gitUrlPattern": "github", - "pdf": false - }, - "globalMetadataFiles": [], - "fileMetadataFiles": [], - "template": [ - "default", - "modern", - "templates/material" - ], - "postProcessors": [], - "markdownEngineName": "markdig", - "noLangKeyword": false, - "keepFileLink": false, - "cleanupCacheHistory": false, - "disableGitFeatures": false, - "xref": [ - "https://xref.docs.microsoft.com/query?uid={uid}" - ] - } -} \ No newline at end of file diff --git a/download_opencv_windows.ps1 b/download_opencv_windows.ps1 deleted file mode 100644 index 95f8040719..0000000000 --- a/download_opencv_windows.ps1 +++ /dev/null @@ -1,27 +0,0 @@ -$tag = "4.13.0.20260207" -$uriArray = @( - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv_win_x64.zip" - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv_win_x86.zip" -) - -function Download($uri, $outFile) { - Write-Host "Downloading ${uri}" - if (!(Test-Path $outFile)) { - Invoke-WebRequest -Uri $uri -OutFile $outFile -ErrorAction Stop - } -} - -New-Item opencv_files -Type directory -Force -ErrorAction Stop | Out-Null -cd opencv_files - -[Net.ServicePointManager]::SecurityProtocol = @([Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12) - -foreach ($uri in $uriArray) { - $outFile = [System.IO.Path]::GetFileName($uri) - $outFileWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($uri) - Download $uri $outFile - Expand-Archive -Path $outFile -DestinationPath $outFileWithoutExtension -Force -ErrorAction Stop - Remove-Item -Path $outFile -ErrorAction Stop -} - -cd .. diff --git a/download_tesseract_windows.ps1 b/download_tesseract_windows.ps1 deleted file mode 100644 index 515a685a10..0000000000 --- a/download_tesseract_windows.ps1 +++ /dev/null @@ -1,26 +0,0 @@ -$uriArray = @( - "https://github.com/shimat/tesseract_vcpkg/releases/download/2023.07.06/tesseract_vcpkg.0.0.8-beta.nupkg" -) - -function Download($uri, $outFile) { - Write-Host "Downloading ${uri}" - if (!(Test-Path $outFile)) { - Invoke-WebRequest -Uri $uri -OutFile $outFile -ErrorAction Stop - } -} - -mkdir tesseract_files -Force -ErrorAction Stop | Out-Null -cd tesseract_files - -[Net.ServicePointManager]::SecurityProtocol = @([Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12) - -foreach ($uri in $uriArray) { - $outFile = "tesseract_vcpkg.zip" - $outFileWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($outFile) - Download $uri $outFile - Expand-Archive -Path $outFile -DestinationPath $outFileWithoutExtension -Force -ErrorAction Stop - Move-Item $outFileWithoutExtension\*\* $outFileWithoutExtension - Remove-Item -Path $outFile -ErrorAction Stop -} - -cd .. diff --git a/nuget/OpenCvSharp4.runtime.win.csproj b/nuget/OpenCvSharp4.runtime.win.csproj index 69224bd04c..e383ddcbe2 100644 --- a/nuget/OpenCvSharp4.runtime.win.csproj +++ b/nuget/OpenCvSharp4.runtime.win.csproj @@ -22,8 +22,8 @@ - - + + diff --git a/nuget/OpenCvSharp4.runtime.win.slim.csproj b/nuget/OpenCvSharp4.runtime.win.slim.csproj index 1da08045f0..eb58ed5bfd 100644 --- a/nuget/OpenCvSharp4.runtime.win.slim.csproj +++ b/nuget/OpenCvSharp4.runtime.win.slim.csproj @@ -21,7 +21,7 @@ - + diff --git a/opencv b/opencv new file mode 160000 index 0000000000..fe38fc608f --- /dev/null +++ b/opencv @@ -0,0 +1 @@ +Subproject commit fe38fc608f6acb8b68953438a62305d8318f4fcd diff --git a/opencv_contrib b/opencv_contrib new file mode 160000 index 0000000000..d99ad2a188 --- /dev/null +++ b/opencv_contrib @@ -0,0 +1 @@ +Subproject commit d99ad2a188210cc35067c2e60076eed7c2442bc3 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 21aac6abb3..bd25332b5b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,6 +23,7 @@ option(NO_PHOTO "Disable photo bindings" OFF) option(NO_BARCODE "Disable barcode bindings" OFF) option(NO_HIGHGUI "Disable highgui bindings" OFF) option(NO_VIDEOIO "Disable videoio bindings" OFF) +option(NO_INSTALL_TO_TEST "Skip copying built DLL to the test project directory (Windows only)" OFF) # Convert options to compile definitions so C++ preprocessor can see them if(NO_CONTRIB) diff --git a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs deleted file mode 100644 index 4f7833ffd3..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Drawing; -using System.Windows.Forms; - -namespace OpenCvSharp.DebuggerVisualizers -{ - public partial class ImageViewer : Form - { - private readonly Bitmap bitmap; - - public ImageViewer() - { - InitializeComponent(); - } - - public ImageViewer(MatProxy proxy) - : this() - { - bitmap = proxy.CreateBitmap(); - } - - /// - /// 仅仅用于开发目的。 - /// - /// - /// デバッグのみを目的としています。 - /// - /// - public ImageViewer(string imgFile) - : this() - { - bitmap = new Bitmap(imgFile); - } - - private void DisposeBitmap() - { - bitmap?.Dispose(); - } - - protected override void OnLoad(EventArgs e) - { - base.OnLoad(e); - - var ratio = SetClientSize(new System.Drawing.Size(bitmap.Width, bitmap.Height)); - DisplayRatio(ratio); - - pictureBox.Image = bitmap; - } - - /// - /// ClientSizeを画面からはみ出ない大きさに調整して設定する. - /// - /// - private double SetClientSize(System.Drawing.Size size) - { - var screenSize = Screen.PrimaryScreen.Bounds.Size; - var ratioX = (double)screenSize.Width / size.Width; - var ratioY = (double)screenSize.Height / size.Height; - var ratio = Math.Max(ratioX, ratioY); - ratio = ReformRatio(ratio); - size.Width = Convert.ToInt32(size.Width * ratio); - size.Height = Convert.ToInt32(size.Height * ratio); - ClientSize = size; - pictureBox.Size = size; - return ratio; - } - - private double ReformRatio(double ratio) - { - var v1 = ratio; - var lg2 = Math.Log(v1, 2); - var lgz = Math.Floor(lg2); - var pw = lgz == lg2 ? lgz - 1 : lgz; - var r = Math.Pow(2, pw); - return r; - } - - private void DisplayRatio(double ratio) - { - Text = $@"ImageViewer Zoom: {ratio:P1}"; - } - } -} diff --git a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs deleted file mode 100644 index 331890f0df..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs +++ /dev/null @@ -1,67 +0,0 @@ -namespace OpenCvSharp.DebuggerVisualizers -{ - partial class ImageViewer - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) - { - components?.Dispose(); - DisposeBitmap(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.pictureBox = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); - this.SuspendLayout(); - // - // pictureBox - // - this.pictureBox.BackColor = System.Drawing.Color.Black; - this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.pictureBox.Location = new System.Drawing.Point(0, 0); - this.pictureBox.Name = "pictureBox"; - this.pictureBox.Size = new System.Drawing.Size(384, 263); - this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBox.TabIndex = 0; - this.pictureBox.TabStop = false; - // - // ImageViewer - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.AutoScroll = true; - this.ClientSize = new System.Drawing.Size(384, 263); - this.Controls.Add(this.pictureBox); - this.Name = "ImageViewer"; - this.Text = "ImageViewer"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.PictureBox pictureBox; - - - } -} diff --git a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.resx b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.resx deleted file mode 100644 index 1af7de150c..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs b/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs deleted file mode 100644 index 26833207de..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using Microsoft.VisualStudio.DebuggerVisualizers; - -namespace OpenCvSharp.DebuggerVisualizers -{ - /// - /// ビジュアライザでの視覚化処理 - /// - public class MatDebuggerVisualizer : DialogDebuggerVisualizer - { - protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) - { - // MatProxyが送られてくるはず - var proxy = objectProvider.GetObject() as MatProxy; - if (proxy is null) - { - throw new ArgumentException(); - } - - // Formに表示 - using (var form = new ImageViewer(proxy)) - { - windowService.ShowDialog(form); - } - } - } -} diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs b/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs deleted file mode 100644 index 160921786a..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.IO; -using System.Runtime.Serialization.Formatters.Binary; -using Microsoft.VisualStudio.DebuggerVisualizers; - -namespace OpenCvSharp.DebuggerVisualizers -{ - /// - /// シリアライズ処理 - /// - public class MatObjectSource : VisualizerObjectSource - { - public override void GetData(object target, Stream outgoingData) - { - var bf = new BinaryFormatter(); - bf.Serialize(outgoingData, new MatProxy((Mat)target)); - } - } -} diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs b/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs deleted file mode 100644 index c4109308f0..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Drawing; -using System.IO; - -namespace OpenCvSharp.DebuggerVisualizers -{ - /// - /// シリアライズ不可能なクラスをやり取りするために使うプロキシ。 - /// 送る際に、このProxyに表示に必要なシリアライズ可能なデータを詰めて送り、受信側で復元する。 - /// - [Serializable] - public class MatProxy - { - public byte[] ImageData { get; private set; } - - public MatProxy(Mat image) - { - ImageData = image.ToBytes(); - } - - public Bitmap CreateBitmap() - { - if (ImageData is null) - throw new Exception("ImageData is null"); - - using (var stream = new MemoryStream(ImageData)) - { - return new Bitmap(stream); - } - } - } -} diff --git a/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.DebuggerVisualizers.csproj b/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.DebuggerVisualizers.csproj deleted file mode 100644 index f632b1b3c7..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.DebuggerVisualizers.csproj +++ /dev/null @@ -1,89 +0,0 @@ - - - - - Debug - AnyCPU - {4232CB4A-DFE3-46CA-9503-C5F1798BAED3} - Library - Properties - OpenCvSharp.DebuggerVisualizers - OpenCvSharp.DebuggerVisualizers - v4.8 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - ..\..\packages\VSSDK.DebuggerVisualizers.12.0.4\lib\net20\Microsoft.VisualStudio.DebuggerVisualizers.dll - False - - - False - .\OpenCvSharp.dll - - - - - - - - - - - - - - - Form - - - ImageViewer.cs - - - - - - - - - - - - .editorconfig - - - - - - ImageViewer.cs - - - - - \ No newline at end of file diff --git a/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.dll b/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.dll deleted file mode 100644 index bd7b397fea..0000000000 Binary files a/src/OpenCvSharp.DebuggerVisualizers/OpenCvSharp.dll and /dev/null differ diff --git a/src/OpenCvSharp.DebuggerVisualizers/Properties/AssemblyInfo.cs b/src/OpenCvSharp.DebuggerVisualizers/Properties/AssemblyInfo.cs deleted file mode 100644 index e305adc6e9..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Diagnostics; -using System.Reflection; -using System.Runtime.InteropServices; - -// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 -// アセンブリに関連付けられている情報を変更するには、 -// これらの属性値を変更してください。 -[assembly: AssemblyTitle("OpenCvSharp.DebuggerVisualizers")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("OpenCvSharp.DebuggerVisualizers")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから -// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 -// その型の ComVisible 属性を true に設定してください。 -[assembly: ComVisible(false)] - -// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります -[assembly: Guid("4232cb4a-dfe3-46ca-9503-c5f1798baed3")] - -// アセンブリのバージョン情報は次の 4 つの値で構成されています: -// -// メジャー バージョン -// マイナー バージョン -// ビルド番号 -// Revision -// -// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を -// 既定値にすることができます: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - -// OpenCvSharp objects' debugger visualizer -[assembly: DebuggerVisualizer( - typeof(OpenCvSharp.DebuggerVisualizers.MatDebuggerVisualizer), - typeof(OpenCvSharp.DebuggerVisualizers.MatObjectSource), - Target = typeof(OpenCvSharp.Mat), - Description = "Mat Visualizer" -)] \ No newline at end of file diff --git a/src/OpenCvSharp.DebuggerVisualizers/packages.config b/src/OpenCvSharp.DebuggerVisualizers/packages.config deleted file mode 100644 index 4b96a87b7d..0000000000 --- a/src/OpenCvSharp.DebuggerVisualizers/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/OpenCvSharp/Modules/core/Mat/Mat.cs b/src/OpenCvSharp/Modules/core/Mat/Mat.cs index cd0e3f1ced..96801916e8 100644 --- a/src/OpenCvSharp/Modules/core/Mat/Mat.cs +++ b/src/OpenCvSharp/Modules/core/Mat/Mat.cs @@ -300,7 +300,7 @@ public static Mat FromPixelData(int rows, int cols, MatType type, IntPtr data, l /// /// Constructor for matrix headers pointing to user-allocated data. - /// **Do not use this constructor directly.** Please use instead. + /// **Do not use this constructor directly.** Please use instead. /// This constructor was removed from the public API because the introduction of nint in .NET caused overload resolution confusion. /// /// Number of rows in a 2D array. diff --git a/src/OpenCvSharpExtern/CMakeLists.txt b/src/OpenCvSharpExtern/CMakeLists.txt index 182eb7599c..17c3da8bca 100644 --- a/src/OpenCvSharpExtern/CMakeLists.txt +++ b/src/OpenCvSharpExtern/CMakeLists.txt @@ -16,14 +16,26 @@ if(APPLE) find_package(Protobuf REQUIRED) endif() +# On Windows, OpenCV is built as a static library; tell the Windows Pack config to look for static libs. +# Also force /MT (static CRT) to match OpenCV's build configuration, and enable /MP for parallel compilation. +# Add the vcpkg lib dir to the linker search path so that plain-name lib references in +# OpenCVModules.cmake (e.g. tesseract55.lib) are resolved even on multi-config generators +# where cmake may not emit the full path for release-only vcpkg builds. +if(WIN32) + set(OpenCV_STATIC ON) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + add_compile_options($<$:/MP>) + if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_TARGET_TRIPLET) + link_directories("${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib") + endif() +endif() + find_package(OpenCV REQUIRED) # iconv support isn't automatic on some systems find_package(Iconv QUIET) -if(Iconv_FOUND) - ocv_target_link_libraries(${the_module} Iconv::Iconv) -else() - ocv_target_compile_definitions(${the_module} PRIVATE "NO_ICONV=1") +if(NOT Iconv_FOUND) + add_compile_definitions(NO_ICONV=1) endif() if(OpenCV_FOUND) @@ -31,9 +43,6 @@ if(OpenCV_FOUND) #set(LIBS ${LIBS} ${OpenCV_LIBRARIES}) if(CMAKE_GENERATOR MATCHES "Visual Studio") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib") endif() @@ -45,9 +54,52 @@ if(OpenCV_FOUND) target_link_libraries(OpenCvSharpExtern ${OpenCV_LIBRARIES}) endif() + if(Iconv_FOUND) + target_link_libraries(OpenCvSharpExtern Iconv::Iconv) + endif() + + # Link Tesseract on Windows (using vcpkg-style prefix via CMAKE_PREFIX_PATH) + if(WIN32 AND NOT EMSCRIPTEN) + find_package(Tesseract QUIET) + if(Tesseract_FOUND) + # vcpkg installs only the release variant of Tesseract (no debug libs). + # Map Debug configuration to Release so the linker does not look for tesseract*d.lib. + set_target_properties(Tesseract::libtesseract PROPERTIES + MAP_IMPORTED_CONFIG_DEBUG Release) + target_link_libraries(OpenCvSharpExtern Tesseract::libtesseract) + endif() + endif() + install(TARGETS OpenCvSharpExtern RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static ) + + # On Windows: copy DLL and the OpenCV FFmpeg plugin DLL to the test project directory. + # Disabled for slim builds (NO_INSTALL_TO_TEST=ON) to avoid overwriting the full DLL. + if(WIN32 AND NOT EMSCRIPTEN AND NOT NO_INSTALL_TO_TEST) + set(TEST_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/../test/OpenCvSharp.Tests") + + add_custom_command(TARGET OpenCvSharpExtern POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + $ + "${TEST_OUTPUT_DIR}/OpenCvSharpExtern.dll" + COMMENT "Copying OpenCvSharpExtern.dll to test project" + ) + + # Derive the OpenCV install root from the cmake config path (lib/cmake/opencv4 → root) + get_filename_component(OPENCV_INSTALL_PREFIX "${OpenCV_DIR}/../../.." ABSOLUTE) + set(OPENCV_VER_STR "${OpenCV_VERSION_MAJOR}${OpenCV_VERSION_MINOR}${OpenCV_VERSION_PATCH}") + set(OPENCV_FFMPEG_DLL "${OPENCV_INSTALL_PREFIX}/bin/opencv_videoio_ffmpeg${OPENCV_VER_STR}_64.dll") + + if(EXISTS "${OPENCV_FFMPEG_DLL}") + add_custom_command(TARGET OpenCvSharpExtern POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${OPENCV_FFMPEG_DLL}" + "${TEST_OUTPUT_DIR}/opencv_videoio_ffmpeg${OPENCV_VER_STR}_64.dll" + COMMENT "Copying opencv_videoio_ffmpeg DLL to test project" + ) + endif() + endif() endif(OpenCV_FOUND) diff --git a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj index 25433e7a09..6bf28d1c85 100644 --- a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj +++ b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj @@ -1,18 +1,10 @@  - - Debug - Win32 - Debug x64 - - Release - Win32 - Release x64 @@ -20,212 +12,44 @@ {8E7279F8-F801-4672-B42F-1ED2C68B16A4} + MakeFileProj OpenCvSharpExtern - Win32Proj - x86-windows-static - x64-windows-static 10.0 - - DynamicLibrary - MultiByte - true - v143 - - - DynamicLibrary - MultiByte + + Makefile v143 - DynamicLibrary - Unicode - true - v143 - - - DynamicLibrary - Unicode + Makefile v143 - - - - - - + + - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)src\$(Configuration)\$(PlatformName)\ - src\$(Platform)\$(Configuration)\ - true - $(SolutionDir)src\$(Configuration)\$(PlatformName)\ - src\$(Platform)\$(Configuration)\ - true - $(SolutionDir)src\$(Configuration)\$(PlatformName)\ - src\$(Configuration)\ - false - $(SolutionDir)src\$(Configuration)\$(PlatformName)\ - src\$(Platform)\$(Configuration)\ - false - $(SolutionDir)\opencv_files\opencv_win_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv_win_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv_win_x64\x64\vc16\staticlib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv_win_x64\x64\vc17\staticlib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\x64-windows-static\lib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv_win_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv_win_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv_win_x86\x86\vc17\staticlib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\x86-windows-static\lib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv_win_x86\x86\vc16\staticlib;$(LibraryPath) + + cmake --build "$(SolutionDir)src\build" --config Debug + cmake --build "$(SolutionDir)src\build" --config Debug --clean-first + cmake --build "$(SolutionDir)src\build" --config Debug --target clean + $(SolutionDir)src\build\OpenCvSharpExtern\Debug\OpenCvSharpExtern.dll + $(SolutionDir)opencv_artifacts\include;$(SolutionDir)vcpkg_installed\x64-windows-static\include;$(NMakeIncludeSearchPath) + WIN32;_DEBUG;_WINDOWS;_USRDLL;%(NMakePreprocessorDefinitions) + + + cmake --build "$(SolutionDir)src\build" --config Release + cmake --build "$(SolutionDir)src\build" --config Release --clean-first + cmake --build "$(SolutionDir)src\build" --config Release --target clean + $(SolutionDir)src\build\OpenCvSharpExtern\Release\OpenCvSharpExtern.dll + $(SolutionDir)opencv_artifacts\include;$(SolutionDir)vcpkg_installed\x64-windows-static\include;$(NMakeIncludeSearchPath) + WIN32;NDEBUG;_WINDOWS;_USRDLL;CVAPI_EXPORTS;%(NMakePreprocessorDefinitions) - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Async - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - EditAndContinue - - - ;%(AdditionalDependencies) - true - Windows - MachineX86 - - - - - - - - - X64 - - - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Async - EnableFastChecks - MultiThreadedDebug - true - - - Level3 - ProgramDatabase - - - ;%(AdditionalDependencies) - true - Windows - MachineX64 - - - - - - - - - MaxSpeed - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;CVAPI_EXPORTS;%(PreprocessorDefinitions) - false - Sync - Default - MultiThreaded - true - - - Level3 - ProgramDatabase - false - AnySuitable - true - true - true - 4251;4275;4819;%(DisableSpecificWarnings) - true - - - IlmImf.lib;ipphal.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libjpeg-turbo.lib;libopenjp2.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco4130.lib;opencv_bgsegm4130.lib;opencv_bioinspired4130.lib;opencv_calib3d4130.lib;opencv_ccalib4130.lib;opencv_core4130.lib;opencv_dnn4130.lib;opencv_dnn_objdetect4130.lib;opencv_dnn_superres4130.lib;opencv_dpm4130.lib;opencv_face4130.lib;opencv_features2d4130.lib;opencv_flann4130.lib;opencv_fuzzy4130.lib;opencv_hfs4130.lib;opencv_highgui4130.lib;opencv_imgcodecs4130.lib;opencv_imgproc4130.lib;opencv_img_hash4130.lib;opencv_intensity_transform4130.lib;opencv_line_descriptor4130.lib;opencv_mcc4130.lib;opencv_ml4130.lib;opencv_objdetect4130.lib;opencv_optflow4130.lib;opencv_phase_unwrapping4130.lib;opencv_photo4130.lib;opencv_plot4130.lib;opencv_quality4130.lib;opencv_rapid4130.lib;opencv_reg4130.lib;opencv_rgbd4130.lib;opencv_saliency4130.lib;opencv_shape4130.lib;opencv_stereo4130.lib;opencv_stitching4130.lib;opencv_structured_light4130.lib;opencv_superres4130.lib;opencv_surface_matching4130.lib;opencv_text4130.lib;opencv_tracking4130.lib;opencv_video4130.lib;opencv_videoio4130.lib;opencv_videostab4130.lib;opencv_wechat_qrcode4130.lib;opencv_xfeatures2d4130.lib;opencv_ximgproc4130.lib;opencv_xobjdetect4130.lib;opencv_xphoto4130.lib;zlib.lib;ws2_32.lib;tesseract53.lib;leptonica-1.83.1.lib;archive.lib;bz2.lib;charset.lib;gif.lib;iconv.lib;libcrypto.lib;libcurl.lib;libsharpyuv.lib;libssl.lib;libxml2.lib;lz4.lib;lzma.lib;zstd.lib;crypt32.lib;%(AdditionalDependencies) - %(IgnoreSpecificDefaultLibraries) - true - NotSet - true - true - false - - - MachineX86 - /IGNORE:4099 %(AdditionalOptions) - - - copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x86\$(TargetFileName)" -copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\$(TargetFileName)" -copy "$(SolutionDir)opencv_files\opencv_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg4130.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x86\opencv_videoio_ffmpeg4130.dll" -copy "$(SolutionDir)opencv_files\opencv_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg4130.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg4130.dll" - - - - - - X64 - - - MaxSpeed - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;CVAPI_EXPORTS;%(PreprocessorDefinitions) - false - Sync - Default - MultiThreaded - true - - - Level3 - ProgramDatabase - false - true - 4251;4275;4819;%(DisableSpecificWarnings) - true - - - IlmImf.lib;ipphal.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libopenjp2.lib;libjpeg-turbo.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco4130.lib;opencv_bgsegm4130.lib;opencv_bioinspired4130.lib;opencv_calib3d4130.lib;opencv_ccalib4130.lib;opencv_core4130.lib;opencv_dnn4130.lib;opencv_dnn_objdetect4130.lib;opencv_dnn_superres4130.lib;opencv_dpm4130.lib;opencv_face4130.lib;opencv_features2d4130.lib;opencv_flann4130.lib;opencv_fuzzy4130.lib;opencv_hfs4130.lib;opencv_highgui4130.lib;opencv_imgcodecs4130.lib;opencv_imgproc4130.lib;opencv_img_hash4130.lib;opencv_intensity_transform4130.lib;opencv_line_descriptor4130.lib;opencv_mcc4130.lib;opencv_ml4130.lib;opencv_objdetect4130.lib;opencv_optflow4130.lib;opencv_phase_unwrapping4130.lib;opencv_photo4130.lib;opencv_plot4130.lib;opencv_quality4130.lib;opencv_rapid4130.lib;opencv_reg4130.lib;opencv_rgbd4130.lib;opencv_saliency4130.lib;opencv_shape4130.lib;opencv_stereo4130.lib;opencv_stitching4130.lib;opencv_structured_light4130.lib;opencv_superres4130.lib;opencv_surface_matching4130.lib;opencv_text4130.lib;opencv_tracking4130.lib;opencv_video4130.lib;opencv_videoio4130.lib;opencv_videostab4130.lib;opencv_wechat_qrcode4130.lib;opencv_xfeatures2d4130.lib;opencv_ximgproc4130.lib;opencv_xobjdetect4130.lib;opencv_xphoto4130.lib;zlib.lib;ws2_32.lib;tesseract53.lib;leptonica-1.83.1.lib;archive.lib;bz2.lib;charset.lib;gif.lib;iconv.lib;libcrypto.lib;libcurl.lib;libsharpyuv.lib;libssl.lib;libxml2.lib;lz4.lib;lzma.lib;zstd.lib;crypt32.lib;%(AdditionalDependencies) - %(IgnoreSpecificDefaultLibraries) - true - NotSet - true - true - false - - - MachineX64 - /IGNORE:4099 %(AdditionalOptions) - - - copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x64\$(TargetFileName)" -copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\$(TargetFileName)" -copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg4130_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg4130_64.dll" -copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg4130_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x64\opencv_videoio_ffmpeg4130_64.dll" - - @@ -236,21 +60,21 @@ copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmp + + + - - - @@ -270,7 +94,9 @@ copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmp + + @@ -278,74 +104,73 @@ copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmp + + + - - + - - - - + + + + + - + - + + - - - - + - - - - + + + + + + + + + - - - - - - - - - + + diff --git a/src/tools/OpenCvSharp.ReleaseMaker/Packer.cs b/src/tools/OpenCvSharp.ReleaseMaker/Packer.cs index 81555cc72f..d0cfcc59b2 100644 --- a/src/tools/OpenCvSharp.ReleaseMaker/Packer.cs +++ b/src/tools/OpenCvSharp.ReleaseMaker/Packer.cs @@ -38,8 +38,6 @@ public static class Packer ], }; - private const string DebuggerVisualizerPath = @"OpenCvSharp.DebuggerVisualizers\bin\Release\OpenCvSharp.DebuggerVisualizers.dll"; - private static readonly string[] xmlFiles = [ @"OpenCvSharp.WpfExtensions\OpenCvSharp.WpfExtensions.xml", ]; @@ -143,18 +141,27 @@ private static void MakeBinaryPackage(string dir, string dirDst, string opencvVe { foreach (var arch in p.Value) { - var externDir = Path.Combine(dirSrc, "Release"); + string externDir; if (p.Key == "uwp") - externDir = Path.Combine(externDir, "uwpOpenCvSharpExtern"); - var pfExtern = (arch == "x86") ? "Win32" : "x64"; - externDir = Path.Combine(externDir, pfExtern); + { + var pfExtern = (arch == "x86") ? "Win32" : "x64"; + externDir = Path.Combine(dirSrc, "Release", "uwpOpenCvSharpExtern", pfExtern); + } + else + { + // cmake VS generator outputs to src/build/OpenCvSharpExtern/Release/ + externDir = Path.Combine(dirSrc, "build", "OpenCvSharpExtern", "Release"); + } foreach (var ext in new[] { "dll", "pdb" }) { var dstDirectory = Path.Combine("NativeLib", p.Key, arch); + var srcFile = Path.Combine(externDir, $"OpenCvSharpExtern.{ext}"); + if (!File.Exists(srcFile)) + continue; zipArchive.CreateEntryFromFile( - Path.Combine(externDir, $"OpenCvSharpExtern.{ext}"), + srcFile, Path.Combine(dstDirectory, $"OpenCvSharpExtern.{ext}")); } @@ -175,16 +182,6 @@ private static void MakeBinaryPackage(string dir, string dirDst, string opencvVe } } - // Debugger Visualizerを選択 - { - var dllFileName = Path.Combine(dirSrc, DebuggerVisualizerPath); - var zipFileName = Path.Combine( - "DebuggerVisualizers", Path.GetFileName(DebuggerVisualizerPath)); - zipArchive.CreateEntryFromFile( - dllFileName, - zipFileName); - } - // テキストを選択 { zipArchive.CreateEntryFromFile( @@ -230,8 +227,7 @@ private static void CopyDirectory( // コピー元のディレクトリにあるファイルをコピー var files = Directory.EnumerateFiles(sourceDirName) - .Where(f => !ignoredExt.Contains(Path.GetExtension(f)?.ToLower())) - .Where(f => Path.GetFileName(f) != "OpenCvSharp.DebuggerVisualizers.dll"); + .Where(f => !ignoredExt.Contains(Path.GetExtension(f)?.ToLower())); foreach (var file in files) { File.Copy(file, destDirName + Path.GetFileName(file), true); diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/App.config b/test/OpenCvSharp.DebuggerVisualizers.Tester/App.config deleted file mode 100644 index 4bfa005618..0000000000 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/OpenCvSharp.DebuggerVisualizers.Tester.csproj b/test/OpenCvSharp.DebuggerVisualizers.Tester/OpenCvSharp.DebuggerVisualizers.Tester.csproj deleted file mode 100644 index a7655560a6..0000000000 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/OpenCvSharp.DebuggerVisualizers.Tester.csproj +++ /dev/null @@ -1,68 +0,0 @@ - - - - - Debug - AnyCPU - {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC} - WinExe - OpenCvSharp.DebuggerVisualizers.Tester - OpenCvSharp.DebuggerVisualizers.Tester - v4.8 - 512 - true - true - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - {4232cb4a-dfe3-46ca-9503-c5f1798baed3} - OpenCvSharp.DebuggerVisualizers - - - - - PreserveNewest - - - - \ No newline at end of file diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs b/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs deleted file mode 100644 index af27f1029e..0000000000 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Windows.Forms; - -namespace OpenCvSharp.DebuggerVisualizers.Tester -{ - static class Program - { - /// - /// 应用程序的主入口点。 - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - - var img = @"_data\image\calibration\00.jpg"; - var mainForm = new ImageViewer(img); - Application.Run(mainForm); - } - } -} diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs b/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs deleted file mode 100644 index 9f1d777cc2..0000000000 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// 有关程序集的一般信息由以下 -// 控制。更改这些特性值可修改 -// 与程序集关联的信息。 -[assembly: AssemblyTitle("OpenCvSharp.DebuggerVisualizers.Tester")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("OpenCvSharp.DebuggerVisualizers.Tester")] -[assembly: AssemblyCopyright("Copyright © 2021")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// 将 ComVisible 设置为 false 会使此程序集中的类型 -//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 -//请将此类型的 ComVisible 特性设置为 true。 -[assembly: ComVisible(false)] - -// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID -[assembly: Guid("ffd602aa-0a08-40dd-8acd-7f5a3ba51dec")] - -// 程序集的版本信息由下列四个值组成: -// -// 主版本 -// 次版本 -// 生成号 -// 修订号 -// -//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 -//通过使用 "*",如下所示: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/_data/image/calibration/00.jpg b/test/OpenCvSharp.DebuggerVisualizers.Tester/_data/image/calibration/00.jpg deleted file mode 100644 index 995d0a8d1e..0000000000 Binary files a/test/OpenCvSharp.DebuggerVisualizers.Tester/_data/image/calibration/00.jpg and /dev/null differ diff --git a/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs b/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs index 4081d3d9f7..07b715ed81 100644 --- a/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs +++ b/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs @@ -8,6 +8,10 @@ public class WindowsLibraryLoaderTest [Fact] public void IsDotNetCore() { +#if NET Assert.True(WindowsLibraryLoader.IsDotNetCore()); +#else + Assert.False(WindowsLibraryLoader.IsDotNetCore()); +#endif } } diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000000..40e255d9e9 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,11 @@ +{ + "dependencies": [ + {"name": "tesseract", "platform": "windows"}, + {"name": "zlib", "platform": "windows"}, + {"name": "libpng", "platform": "windows"}, + {"name": "libjpeg-turbo", "platform": "windows"}, + {"name": "tiff", "platform": "windows"}, + {"name": "libwebp", "platform": "windows"} + ], + "builtin-baseline": "1e199d32ad53aab1defda61ce41c380302e3f95c" +}