diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5434ff2..48ca699 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -54,7 +54,7 @@ body: - Web (WASM) - Linux (x86_64) - macOS (x86_64, arm64) - - Windows (x86_64) + - Windows (x86_64, arm64) - Raspberry Pi validations: required: true diff --git a/.github/workflows/c-demos.yml b/.github/workflows/c-demos.yml index 5ae45ae..36fb0f6 100644 --- a/.github/workflows/c-demos.yml +++ b/.github/workflows/c-demos.yml @@ -56,6 +56,10 @@ jobs: strategy: matrix: machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64] + make_file: ["Unix Makefiles"] + include: + - machine: pv-windows-arm64 + make_file: "MinGW Makefiles" steps: - uses: actions/checkout@v3 @@ -63,7 +67,7 @@ jobs: submodules: recursive - name: Create build directory - run: cmake -B ./build + run: cmake -G "${{ matrix.make_file }}" -B ./build - name: Build micdemo run: cmake --build ./build --target eagle_demo_mic diff --git a/.github/workflows/nodejs-demos.yml b/.github/workflows/nodejs-demos.yml index 6e55065..16c62eb 100644 --- a/.github/workflows/nodejs-demos.yml +++ b/.github/workflows/nodejs-demos.yml @@ -53,7 +53,7 @@ jobs: strategy: matrix: - machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64] + machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/nodejs-perf.yml b/.github/workflows/nodejs-perf.yml index e9111d0..5f1b040 100644 --- a/.github/workflows/nodejs-perf.yml +++ b/.github/workflows/nodejs-perf.yml @@ -104,3 +104,28 @@ jobs: - name: Machine state after working-directory: resources/.scripts run: bash machine-state.sh + + perf-windows-arm64: + runs-on: ${{ matrix.machine }} + + strategy: + fail-fast: false + matrix: + machine: [pv-windows-arm64] + include: + - machine: pv-windows-arm64 + num_test_iterations: 20 + enroll_performance_threshold_sec: 0.5 + proc_performance_threshold_sec: 0.6 + + steps: + - uses: actions/checkout@v3 + + - name: Pre-build dependencies + run: npm install --global yarn + + - name: Install dependencies + run: yarn install + + - name: Test + run: yarn test perf.test.ts --access_key=${{secrets.PV_VALID_ACCESS_KEY}} --num_test_iterations=${{matrix.num_test_iterations}} --enroll_performance_threshold_sec=${{matrix.enroll_performance_threshold_sec}} --proc_performance_threshold_sec=${{matrix.proc_performance_threshold_sec}} diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 746acbb..fdcd94d 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -53,7 +53,7 @@ jobs: strategy: matrix: - machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64] + machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/python-demos.yml b/.github/workflows/python-demos.yml index bd31b83..045c1eb 100644 --- a/.github/workflows/python-demos.yml +++ b/.github/workflows/python-demos.yml @@ -63,7 +63,7 @@ jobs: strategy: matrix: - machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64] + machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/python-perf.yml b/.github/workflows/python-perf.yml index 93ef58b..6a0cbd3 100644 --- a/.github/workflows/python-perf.yml +++ b/.github/workflows/python-perf.yml @@ -124,3 +124,32 @@ jobs: - name: Machine state after working-directory: resources/.scripts run: bash machine-state.sh + + perf-windows-arm64: + runs-on: ${{ matrix.machine }} + + strategy: + fail-fast: false + matrix: + machine: [pv-windows-arm64] + include: + - machine: pv-windows-arm64 + profiler_performance_threshold_sec: 0.5 + recognizer_performance_threshold_sec: 0.6 + + steps: + - uses: actions/checkout@v3 + + - name: Pre-build dependencies + run: python3 -m pip install --upgrade pip + + - name: Install dependencies + run: pip3 install -r requirements.txt + + - name: Test + run: > + python3 test_eagle_perf.py + --access-key ${{secrets.PV_VALID_ACCESS_KEY}} + --num-test-iterations 20 + --profiler-performance-threshold-sec ${{matrix.profiler_performance_threshold_sec}} + --recognizer-performance-threshold-sec ${{matrix.recognizer_performance_threshold_sec}} diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index a505cd5..fdd6796 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -62,7 +62,7 @@ jobs: strategy: matrix: - machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64] + machine: [rpi3-32, rpi3-64, rpi4-32, rpi4-64, rpi5-64, pv-windows-arm64] steps: - uses: actions/checkout@v3 diff --git a/README.md b/README.md index a7536ee..490a17d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: - Language-agnostic and text-independent - Optimized for real-time processing - Cross-Platform: - - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64) + - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64) - Android and iOS - Chrome, Safari, Firefox, and Edge - Raspberry Pi (3, 4, 5) diff --git a/binding/nodejs/README.md b/binding/nodejs/README.md index f034e80..35b4434 100644 --- a/binding/nodejs/README.md +++ b/binding/nodejs/README.md @@ -8,7 +8,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: - Private; All voice processing runs locally. - Cross-Platform: - - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64) + - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64) - Android and iOS - Chrome, Safari, Firefox, and Edge - Raspberry Pi (3, 4, 5) @@ -16,7 +16,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: ## Compatibility - Node.js 16+ -- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64), and Raspberry Pi (3, 4, 5). +- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64), and Raspberry Pi (3, 4, 5). ## Installation diff --git a/binding/nodejs/package.json b/binding/nodejs/package.json index 0f16e8a..f23ddd1 100644 --- a/binding/nodejs/package.json +++ b/binding/nodejs/package.json @@ -1,7 +1,7 @@ { "name": "@picovoice/eagle-node", - "version": "1.0.2", + "version": "1.0.3", "description": "Picovoice Eagle Node.js binding", "main": "dist/index.js", "types": "dist/types/index.d.ts", diff --git a/binding/nodejs/src/platforms.ts b/binding/nodejs/src/platforms.ts index eec1298..9915561 100644 --- a/binding/nodejs/src/platforms.ts +++ b/binding/nodejs/src/platforms.ts @@ -76,6 +76,10 @@ SYSTEM_TO_LIBRARY_PATH.set( `${SYSTEM_WINDOWS}/${X86_64}`, `${PLATFORM_WINDOWS}/amd64/pv_eagle.node` ); +SYSTEM_TO_LIBRARY_PATH.set( + `${SYSTEM_WINDOWS}/${ARM_64}`, + `${PLATFORM_WINDOWS}/arm64/pv_eagle.node` +); function absoluteLibraryPath(libraryPath: string): string { return path.resolve(__dirname, LIBRARY_PATH_PREFIX, libraryPath); @@ -127,7 +131,7 @@ export function getPlatform(): string { return PLATFORM_MAC; } - if (system === SYSTEM_WINDOWS && arch === X86_64) { + if (system === SYSTEM_WINDOWS && (arch === X86_64 || arch === ARM_64)) { return PLATFORM_WINDOWS; } @@ -175,9 +179,9 @@ export function getSystemLibraryPath(): string { } break; case SYSTEM_WINDOWS: - if (arch === X86_64) { + if (arch === X86_64 || arch === ARM_64) { return absoluteLibraryPath( - SYSTEM_TO_LIBRARY_PATH.get(`${SYSTEM_WINDOWS}/${X86_64}`) + SYSTEM_TO_LIBRARY_PATH.get(`${SYSTEM_WINDOWS}/${arch}`) ); } break; diff --git a/binding/python/README.md b/binding/python/README.md index 74f44c9..80451cf 100644 --- a/binding/python/README.md +++ b/binding/python/README.md @@ -9,7 +9,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: - Private; All voice processing runs locally. - Cross-Platform: - - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64) + - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64) - Android and iOS - Chrome, Safari, Firefox, and Edge - Raspberry Pi (3, 4, 5) @@ -17,7 +17,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: ## Compatibility - Python 3.8 or higher -- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64), and Raspberry Pi (3, 4, 5). +- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64), and Raspberry Pi (3, 4, 5). ## Installation diff --git a/binding/python/_util.py b/binding/python/_util.py index 6762419..367d2fa 100644 --- a/binding/python/_util.py +++ b/binding/python/_util.py @@ -69,7 +69,10 @@ def default_library_path(relative: str = "") -> str: os.path.dirname(__file__), relative, "lib/raspberry-pi/%s/libpv_eagle.so" % linux_machine ) elif platform.system() == "Windows": - return os.path.join(os.path.dirname(__file__), relative, "lib", "windows", "amd64", "libpv_eagle.dll") + if platform.machine().lower() == 'amd64': + return os.path.join(os.path.dirname(__file__), relative, "lib", "windows", "amd64", "libpv_eagle.dll") + elif platform.machine().lower() == 'arm64': + return os.path.join(os.path.dirname(__file__), relative, "lib", "windows", "arm64", "libpv_eagle.dll") raise NotImplementedError("Unsupported platform.") diff --git a/binding/python/setup.py b/binding/python/setup.py index ed479c7..2a124a7 100644 --- a/binding/python/setup.py +++ b/binding/python/setup.py @@ -42,7 +42,7 @@ setuptools.setup( name="pveagle", - version="1.0.2", + version="1.0.3", author="Picovoice", author_email="hello@picovoice.ai", description="Eagle Speaker Recognition Engine", diff --git a/demo/nodejs/README.md b/demo/nodejs/README.md index 152e52a..1dfd337 100644 --- a/demo/nodejs/README.md +++ b/demo/nodejs/README.md @@ -8,7 +8,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: - Private; All voice processing runs locally. - Cross-Platform: - - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64) + - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64) - Android and iOS - Chrome, Safari, Firefox, and Edge - Raspberry Pi (5, 4, 3) @@ -16,7 +16,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: ## Compatibility - Node.js 12+ -- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64), and Raspberry Pi (3, 4, 5). +- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64), and Raspberry Pi (3, 4, 5). ## Installation diff --git a/demo/nodejs/package.json b/demo/nodejs/package.json index 56840fd..fab18d7 100644 --- a/demo/nodejs/package.json +++ b/demo/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "@picovoice/eagle-node-demo", - "version": "1.0.3", + "version": "1.0.4", "description": "Picovoice Eagle Node.js file-based and microphone demos", "scripts": { "file": "node file.js", @@ -24,8 +24,8 @@ "author": "Picovoice Inc.", "license": "Apache-2.0", "dependencies": { - "@picovoice/eagle-node": "=1.0.2", - "@picovoice/pvrecorder-node": "^1.2.2", + "@picovoice/eagle-node": "=1.0.3", + "@picovoice/pvrecorder-node": "^1.2.5", "commander": "^6.1.0", "readline": "^1.3.0", "wavefile": "^11.0.0" diff --git a/demo/nodejs/yarn.lock b/demo/nodejs/yarn.lock index 602dad3..435cb6a 100644 --- a/demo/nodejs/yarn.lock +++ b/demo/nodejs/yarn.lock @@ -2,15 +2,15 @@ # yarn lockfile v1 -"@picovoice/eagle-node@=1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@picovoice/eagle-node/-/eagle-node-1.0.2.tgz#cef55d40a9db2ce2a49c4e624b1413cb8460687f" - integrity sha512-nMG8NkRg7gjMVSWF82O1kv9DLd5N3NYIk6c6N6I0A1+7x0wT1cNaOPBWRKxDUDvm1lIVUy2DmEk4AOgEieUtnQ== +"@picovoice/eagle-node@=1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@picovoice/eagle-node/-/eagle-node-1.0.3.tgz#9d1ef04191a845fe7e414bff47816492c5bd1d61" + integrity sha512-zMzDd8aqJaCIV45dY2bzbwTueN0nJUabkjfODeYc5vrRrY+gEvDf9lTUZ2z1LPaTGACMAVoCWUE7VbAduUhY5w== -"@picovoice/pvrecorder-node@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@picovoice/pvrecorder-node/-/pvrecorder-node-1.2.2.tgz#41c39719b408e29c581b3094a9ff4c59f282b026" - integrity sha512-GuzZhWslbR4TLE3VxTiqjax8Mc8f1nB69bY5jag4ETlCxo7q/KpeUbWRvojhtNVPvpFLbospZAb6vfgxkEqgJQ== +"@picovoice/pvrecorder-node@^1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@picovoice/pvrecorder-node/-/pvrecorder-node-1.2.5.tgz#a47e11d347979ef0f1b083657ff69dd9bd2efe5c" + integrity sha512-bnid5oInf22JRdrZ75z8ooewOza0whYI9w/oSQSZbkDvddylPPrY6x+1L1qIyf5Tb8ZtzKQL+aQ9m8SazgRHFg== commander@^6.1.0: version "6.2.1" diff --git a/demo/python/README.md b/demo/python/README.md index 036105e..811a965 100644 --- a/demo/python/README.md +++ b/demo/python/README.md @@ -8,7 +8,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: - Private; All voice processing runs locally. - Cross-Platform: - - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64) + - Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64) - Android and iOS - Chrome, Safari, Firefox, and Edge - Raspberry Pi (3, 4, 5) @@ -16,7 +16,7 @@ Eagle is an on-device speaker recognition engine. Eagle is: ## Compatibility - Python 3.8+ -- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64), and Raspberry Pi (3, 4, 5). +- Runs on Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64, arm64), and Raspberry Pi (3, 4, 5). ## Installation diff --git a/demo/python/requirements.txt b/demo/python/requirements.txt index 7918c9d..7e6c35c 100644 --- a/demo/python/requirements.txt +++ b/demo/python/requirements.txt @@ -1,2 +1,2 @@ -pveagle==1.0.2 -pvrecorder==1.2.2 +pveagle==1.0.3 +pvrecorder==1.2.4 diff --git a/demo/python/setup.py b/demo/python/setup.py index 774ed9e..8be6747 100644 --- a/demo/python/setup.py +++ b/demo/python/setup.py @@ -24,7 +24,7 @@ setuptools.setup( name="pveagledemo", - version="1.0.3", + version="1.0.4", author="Picovoice", author_email="hello@picovoice.ai", description="Eagle Speaker Recognition Engine demos", @@ -32,7 +32,7 @@ long_description_content_type="text/markdown", url="https://github.com/Picovoice/eagle", packages=["pveagledemo"], - install_requires=["pveagle==1.0.2", "pvrecorder==1.2.2"], + install_requires=["pveagle==1.0.3", "pvrecorder==1.2.4"], include_package_data=True, classifiers=[ "Development Status :: 5 - Production/Stable", diff --git a/lib/node/windows/arm64/pv_eagle.node b/lib/node/windows/arm64/pv_eagle.node new file mode 100644 index 0000000..53b7003 Binary files /dev/null and b/lib/node/windows/arm64/pv_eagle.node differ diff --git a/lib/windows/arm64/libpv_eagle.dll b/lib/windows/arm64/libpv_eagle.dll new file mode 100644 index 0000000..a26124a Binary files /dev/null and b/lib/windows/arm64/libpv_eagle.dll differ