桌面应用计算机视觉图像处理OCR【免费下载链接】audiverisLatest generation of Audiveris OMR engine项目地址https://gitcode.com/gh_mirrors/au/audiveris点击查看免费下载Audiveris最新一代 OMR 光学音乐识别引擎为 Linux 用户提供 Flatpak 格式的免安装发行包。本文基于仓库中 flatpak/README.md 的官方流程结合 flatpak/build.gradle、manifest 模板 等源码级证据完整讲解如何初始化 flathub 子模块、通过单一 Gradle 任务生成全部 Flatpak 组件并调用flatpak-builder构建安装包以及在非 Linux 环境下如何分两阶段完成生成内容 远程构建发布的协作流程。读完本文你将掌握 Audiveris Flatpak 产物的完整生成链路、关键参数的唯一维护位置以及调试构建环境的常见坑位。一、Flatpak 打包体系总览Flatpak 打包相关的材料统一存放在仓库的flatpak/子项目下当前目录结构为flatpak/dev/org.audiveris.audiveris.template.ymlflatpak-builder 的 manifest 模板由 Gradle 任务展开变量后生成正式 manifestflatpak/res/org.audiveris.audiveris.metainfo.xmlAppStream 元数据应用商店展示信息含版本发布记录flatpak/res/org.audiveris.audiveris.desktopLinux XDG 桌面入口文件flatpak/build.gradle全部 Flatpak 相关 Gradle 任务的定义flatpak/README.md官方打包与发布说明。按 README 的设计正式用于构建的目标文件应位于flatpak/flathub/目录即 flathub 仓库的 git 子模块中包括flatpak manifest 文件org.audiveris.audiveris.ymlAppStream 元数据org.audiveris.audiveris.metainfo.xmlLinux XDG 桌面文件org.audiveris.audiveris.desktop可选的flathub.jsonflathub 构建指令Java 依赖清单dependencies.json列出需要从 Maven 等仓库下载的全部依赖。README 特别强调这些是目标文件没有任何一个应当被手写或直接修改——它们全部由 Gradle 任务从flatpak/dev与flatpak/res模板自动生成并拷贝过去。这也体现了该项目单一位置定义关键参数、用 Gradle 任务取代临时脚本的设计原则。从源码看flatpak/build.gradle中 flathub 目标目录的实际取值逻辑是优先使用 Gradle 属性flathubDir其默认值为../org.audiveris.audiverisflatpak/build.gradle而 gradle.properties 中将其显式配置为flathubDir../org.audiveris.audiveris指向仓库同级目录下的 flathub 仓库本地克隆。README 中描述的flatpak/flathub子模块路径属于规划形态当前仓库的flatpak/目录尚未包含该子模块需按下一节步骤初始化。二、初始化 flathub 子模块Audiveris 的 git 树通过**子模块submodule**方式追踪 flathub 仓库代码而不是把代码直接塞进 audiveris 仓库。这样做的好处是当需要发布新版本时可以直接向 flathub 上游仓库推送保持两个仓库的边界清晰。初始化子模块在 Audiveris 仓库根目录执行$ git submodule init $ git submodule update如果仓库的.gitmodules指向的路径是flatpak/flathub这两条命令会把 flathub 仓库检出到该目录随后所有 Gradle 生成任务的输出都会落到这里。三、关键参数全项目唯一的定义位置README 强调Audiveris 的核心参数只为整个项目定义一份Flatpak 构建只是这些参数的消费者之一。官方给出的参数 → 源文件 → 变量 → 示例值对应关系如下信息源文件路径变量示例值Audiveris 版本app/build.gradleproject(:app).version5.4Audiveris 标签app/build.gradleproject(:app).ext.tag5.4Gradlegradle/wrapper/gradle-wrapper.propertiesdistributionUrlgradle 发行包 URLGradle SHAgradle/wrapper/gradle-wrapper.propertiesdistributionSha256Sum对应 SHA-256 校验和Java 版本gradle.propertiestheMinJavaVersion21Tesseract 语言包版本gradle.propertiestheTessdataTag4.1.0选用的 XSLT 处理器gradle.propertiestheXsltTransformerXsltProc上表是文档给出的示例值以当前仓库的实际内容为准各参数的最新取值分别为Audiveris 版本project.version 5.11.0定义在 buildSrc/src/main/groovy/audiveris-commons.gradle作为约定插件被各子项目共享并同步维护于docs/_config.ymlGradledistributionUrlhttps\://services.gradle.org/distributions/gradle-9.4.1-bin.zip校验和distributionSha256Sum2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb见 gradle/wrapper/gradle-wrapper.propertiesJava 版本theMinJavaVersion 25同时作为 Java 编译的sourceCompatibility见 audiveris-commons.gradleTesseract 语言包版本theTessdataTag 4.1.0见 gradle.properties。这些参数服务于整个 Audiveris 项目Windows/macOS 安装包、文档构建等并非只为 Flatpak 存在——这正是单一来源Single Source of Truth的体现。3.1 发布新 Flatpak 版本时需要更新的位置针对一次新的 Flatpak 发版README 列出以下可能需要同步修改的文件app/build.gradle更新 Audiveris 的version与taggradle.properties更新theMinJavaVersion若换用更高的 Java 基线gradle/wrapper/gradle-wrapper.properties当所需 Java 版本需要更新的 Gradle 支持时distributionUrl与distributionSha256Sum两者必须一起更新flatpak/res/org.audiveris.audiveris.metainfo.xml用 HTML 标签补充新版本的发布说明见本文第七节。3.2 tag 的符号化使用移动而不改名Audiveris tag例如5.4对 flatpak-builder 至关重要——它用于让构建器精确检索 Audiveris 项目的一个具体提交。README 指出 tag 是一个符号值可以保持同名如仍叫5.4同时让该 tag 指向更新的提交。具体操作如下本地删除并重建# delete $ git tag -d my_tag # (re-)create $ git tag my_tag强制推送到远端$ git push --force origin my_tag这样既维持了 manifest 中引用的 tag 名称不变又能让每次 Flatpak 构建拉取到最新代码。四、一键构建buildFlatpak 任务在 Linux 环境、且位于 Audiveris 仓库根目录时构建 Flatpak 只需一条命令$ ./gradlew -q :flatpak:buildFlatpak它启动flatpak子项目中的buildFlatpak任务。README 解释道这个任务本可以命名为build但为了避免与其他构建任务冲突暂时保留buildFlatpak这个名字。4.1 任务依赖链从模板到成品buildFlatpak实际做了两件事依赖链见 flatpak/build.gradle第一步initFlathub填充 flathub 目录它又串联三个子任务genDependencies先确保 Audiveris Java 类:app:classes已编译然后运行:app:flatpakGradleGenerator插件由io.github.jwharm.flatpak-gradle-generator提供版本 1.8.0见 app/build.gradle生成app/build/dependencies.json再拷贝到 flathub 目录。该清单收录了 app 的全部 Java 依赖包括args4j、logback、jai-imageio、itextpdf、pdfbox、tesseract/leptonicaJavaCPP 绑定、jfreechart、jgrapht等完整列表见 app/build.gradle。genManifest读取 gradle/wrapper/gradle-wrapper.properties 与 gradle.properties 中的变量展开模板 flatpak/dev/org.audiveris.audiveris.template.yml生成flatpak/flathub/org.audiveris.audiveris.yml构建脚本中通过copyexpand(binding)实现见 flatpak/build.gradle。展开时注入的变量包括OPEN_JDK由theMinJavaVersion拼成如openjdk25GRADLE_URL/GRADLE_NAME/GRADLE_SHA256取自 gradle wrapper 属性COMMIT取自app.ext.commit即:app:getCommit任务用git log -n1 --pretty%H -- :^../flatpak/flathub获取的最新提交哈希见 app/build.gradle——注意该命令排除了flatpak/flathub目录避免子模块的提交污染 Audiveris 自身的 commit。将flatpak/res/下的org.audiveris.audiveris.metainfo.xml与org.audiveris.audiveris.desktop拷贝到 flathub 目录。第二步仅在宿主 OS 为 Linux 时启动flatpak-builder。buildFlatpak是Exec类型任务onlyIf { app.ext.hostOSName linux }flatpak/build.gradle其命令行等价于$ flatpak-builder \ --force-clean \ # 清空输出目录 build \ # 输出目录的相对路径 org.audiveris.audiveris.yml # 要读取的 manifest 相对路径hostOSName由公共约定在 audiveris-commons.gradle 中根据os.name计算得出因此整个任务链在 Windows/macOS 上只会完成生成内容这一步不会尝试运行flatpak-builder。4.2 构建环境注意事项Flatpak 构建最好在 Linux 环境运行在 VirtualBox/Ubuntu 这类虚拟化环境中README 提示为了让flatpak-builder能通过file协议在本地复制 git 仓库需要先放开 git 对本地协议的限制$ git config --global protocol.file.allow always五、非 Linux 环境分两阶段构建如果没有 Linux 主机可以把构建拆成两个阶段由不同的人/机器接力完成README 标注该流程仍在完善中XXX TO BE REVIEWED XXX第一阶段任何 OS含 Windows上生成并推送 flathub 内容。只运行initFlathub任务。注意当目标 OS 与宿主 OS 不同时必须显式指定targetOS该属性在 audiveris-commons.gradle 中被解析默认取宿主 OS# Run just the initFlathub task # NOTA: The targetOS must be explicitly set if it is different from the hosting OS $ ./gradlew -q -PtargetOSlinux-x86_64 :flatpak:initFlathub # Commit and push the content of flatpak/flathub $ git add flatpak/flathub $ git commit -m updated flatpak submodule -- flatpak/flathub $ git push第二阶段在 Linux 上拉取、构建并提交 flathub。# Retrieve flatpak/flathub content $ git pull # Build $ flatpak-builder --force-clean build org.audiveris.audiveris.yml # Or these commands to build and run with a local repository # To export directly to the local $HOME/testrepo $ flatpak-builder --force-clean --repo$HOME/testrepo build org.audiveris.audiveris $ flatpak remote-add --no-gpg-verify --user testrepo file://$HOME/testrepo # To list audiveris in the local repo $ flatpak remote-ls testrepo # To start audiveris $ flatpak run org.audiveris.audiveris # Submit to flathub $ ???其中提交到 flathub的具体命令在 README 中尚未定稿用$ ???占位发布者通常需通过 flathub 仓库的 PR 流程完成提交。本地调试时remote-add --no-gpg-verify允许在没有签名的情况下把构建产物注册进本地测试仓库flatpak run org.audiveris.audiveris即可直接启动应用验证。六、Manifest 模板逐项解读正式 manifest 由模板 flatpak/dev/org.audiveris.audiveris.template.yml 展开生成模板头部注释明确列出将注入的变量及示例值OPEN_JDK如openjdk21、GRADLE_URL、GRADLE_NAME、GRADLE_SHA256、COMMIT提交哈希。模板核心内容如下id: org.audiveris.audiveris runtime: org.freedesktop.Platform runtime-version: 25.08 sdk: org.freedesktop.Sdk sdk-extensions: - org.freedesktop.Sdk.Extension.${OPEN_JDK} build-options: append-path: /usr/lib/sdk/${OPEN_JDK}/bin command: Audiveris finish-args: # Network access - --sharenetwork # X11 XShm access - --shareipc - --socketx11 # Needs to save files locally - --filesystemxdg-documents - --filesystemxdg-pictures - --persist~/.audiveris - --envPATH/app/bin:/app/jre/bin:/usr/bin - --envJAVA_HOME/app/jre # Calling abort() on malloc-check doesnt fly with OpenJDK - --envMALLOC_CHECK_0 modules: - name: openjdk buildsystem: simple build-commands: - /usr/lib/sdk/${OPEN_JDK}/install.sh - name: audiveris buildsystem: simple build-commands: # We make the Gradle wrapper use our local .zip file # NOTA: template expansion will reduce the backslashes in template, so double them! - ln --force ${GRADLE_NAME} gradle/wrapper/${GRADLE_NAME} - - sed --regexp-extended --in-place s,https\\\\://services.gradle.org/distributions/,file:\\/run/build/audiveris/, gradle/wrapper/gradle-wrapper.properties # Copy some needed icons - install --mode0644 -D app/res/icon-256.png /app/share/icons/hicolor/256x256/apps/org.audiveris.audiveris.png - install --mode0644 -D app/res/icon-64.png /app/share/icons/hicolor/64x64/apps/org.audiveris.audiveris.png - install --mode0644 -D app/src/main/java/org/audiveris/omr/ui/resources/icon-48.png /app/share/icons/hicolor/48x48/apps/org.audiveris.audiveris.png - install --mode0644 -D app/src/main/java/org/audiveris/omr/ui/resources/icon-32.png /app/share/icons/hicolor/32x32/apps/org.audiveris.audiveris.png - install --mode0644 -D app/src/main/java/org/audiveris/omr/ui/resources/icon-24.png /app/share/icons/hicolor/24x24/apps/org.audiveris.audiveris.png - install --mode0644 -D app/src/main/java/org/audiveris/omr/ui/resources/icon-16.png /app/share/icons/hicolor/16x16/apps/org.audiveris.audiveris.png # Copy desktop and metainfo - install --mode0644 -D org.audiveris.audiveris.desktop /app/share/applications/org.audiveris.audiveris.desktop - install --mode0644 -D org.audiveris.audiveris.metainfo.xml /app/share/metainfo/org.audiveris.audiveris.metainfo.xml # Run Gradle build in offline mode, with a specific repository (hence the isFlatpak property) - ./gradlew -PisFlatpaktrue --offline distTar # Extract lib and bin from Audiveris .tar to /app - tar x --directory/app --strip-components1 --file app/build/distributions/*.tar sources: # NOTA: Paths are relative to the location of the expanded template, that is flatpak/flathub # Audiveris project. We provide the commit hash value - type: git url: https://github.com/Audiveris/audiveris commit: ${COMMIT} - type: file url: ${GRADLE_URL} sha256: ${GRADLE_SHA256} - type: file path: org.audiveris.audiveris.desktop - type: file path: org.audiveris.audiveris.metainfo.xml # Include app dependencies.json, generated by Gradle task :flatpak:genDependencies - dependencies.json6.1 关键设计点运行时与 SDK基于 freedesktop 平台的org.freedesktop.Platform模板中为25.08通过sdk-extensions挂载${OPEN_JDK}扩展build-options.append-path将 JDK 的 bin 目录加入构建 PATH沙箱权限finish-args共享网络与 X11 IPC 套接字--filesystemxdg-documents与--filesystemxdg-pictures允许应用读写文档/图片目录Audiveris 需要保存谱面文件--persist~/.audiveris持久化用户配置JAVA_HOME/app/jre、MALLOC_CHECK_0避免 OpenJDK 与 malloc-check 的 abort 冲突等环境变量一并注入两个 moduleopenjdk模块调用 SDK 扩展的install.sh安装 JDKaudiveris模块完成从 Gradle wrapper 重定向、图标安装、desktop/metainfo 安装到离线 Gradle 构建的全流程离线构建模板用sed把gradle-wrapper.properties里的发行包 URL 替换为本地file:/run/build/audiveris/模板注释提醒变量展开会减少反斜杠因此模板中必须写双反斜杠\\\\再以-PisFlatpaktrue --offline运行distTar。isFlatpak属性会在 app/build.gradle 的仓库配置中被识别从而只使用本地../dependencies离线仓库而非 Maven Central产物装配tar x --strip-components1把distTar生成的发行 tar 解包到/app最终由command: Audiveris启动应用sources 引用Audiveris 源码按${COMMIT}哈希精确检出Gradle 发行包按${GRADLE_URL}${GRADLE_SHA256}校验desktop、metainfo 与dependencies.json以相对路径相对于展开后模板所在目录flatpak/flathub引用。七、配套资源AppStream 元数据与桌面入口7.1 org.audiveris.audiveris.metainfo.xmlflatpak/res/org.audiveris.audiveris.metainfo.xml 是 AppStream 元数据供 Flathub 商店展示应用信息。其核心内容包括身份与许可idorg.audiveris.audiveris/idmetadata_license为 CC0-1.0project_license为 AGPL-3.0摘要与描述定位为 Optical Music Recognition (OMR) Application描述中说明它从数字化图像识别乐谱并转换为计算机可读的符号格式输出 OMR 格式与标准 MusicXML可被 MuseScore、Finale、Lilypond 等外部记谱软件继续处理并提供用于快速校验与人工纠错的图形界面分类Music、Scanning、AudioVideo发布记录releases从 5.102026-03-07回溯到 5.1.02018-12-13的完整版本历史每条含日期、紧急度与类型。最新 5.10 记录中值得关注的点包括UI 层支持句子级字体属性、拖拽优化引擎层新增 BARITONE/MEZZO_SOPRANO/SOPRANO 谱号支持、排练记号rehearsal marks支持、诗节号识别过滤项目层宣布 Audiveris for Windows 上架 Scoop Extras。5.8 记录同时披露Flatpak 已与各 OS 安装包同步以及升级到 Java 25 与 Gradle 9.1。发版时README 要求在此文件中用 HTML 标签追加新版本的release条目。7.2 org.audiveris.audiveris.desktopflatpak/res/org.audiveris.audiveris.desktop 是 XDG 桌面入口内容为[Desktop Entry] NameAudiveris GenericNameOptical Music Recognition (OMR) ExecAudiveris TypeApplication Iconorg.audiveris.audiveris CommentConvert sheet music to XML Comment[en]Convert sheet music to XML CategoriesMusic;Scanning;AudioVideo Keywordslilypond;editor;sheet music;javaExecAudiveris与 manifest 中的command: Audiveris一致Iconorg.audiveris.audiveris对应 manifest 构建命令中安装到/app/share/icons/hicolor/{16,24,32,48,64,256}x{...}/的图标命名。八、发布流程小结与常见问题一次完整的 Audiveris Flatpak 发版可以归纳为以下闭环维护单一来源参数更新app/build.gradleversion/tag、gradle.propertiestheMinJavaVersion、theTessdataTag、gradle/wrapper/gradle-wrapper.propertiesdistributionUrldistributionSha256Sum更新发布说明在flatpak/res/org.audiveris.audiveris.metainfo.xml追加release生成目标文件Linux 上直接./gradlew -q :flatpak:buildFlatpak非 Linux 上执行./gradlew -q -PtargetOSlinux-x86_64 :flatpak:initFlathub后提交推送 flathub 子模块构建与验证Linux 上运行flatpak-builder --force-clean build org.audiveris.audiveris.yml可用--repo$HOME/testrepo导出到本地测试仓库再flatpak run org.audiveris.audiveris启动验证提交发布将 flathub 仓库内容提交README 中提交命令仍待完善实际走 flathub PR 流程。常见问题对照表现象原因与处理buildFlatpak在 Windows/macOS 上不执行构建任务onlyIf { app.ext.hostOSName linux }非 Linux 只生成内容需改用分两阶段流程flatpak-builder报 git file 协议被拒需先执行git config --global protocol.file.allow alwaysmanifest 中 Gradle 下载失败检查distributionUrl与distributionSha256Sum是否成对更新依赖解析失败确认已运行:flatpak:genDependencies且app/build/dependencies.json已生成并拷入 flathub 目录离线构建依赖-PisFlatpaktrue --offline与../dependencies本地仓库需要说明的是README 中表格给出的版本号5.4、Gradle 8.7、Java 21属于历史示例值当前仓库实际基线已是 Audiveris 5.11.0、Gradle 9.4.1、Java 25构建前请以仓库内 gradle-wrapper.properties、gradle.properties 与 audiveris-commons.gradle 的实际取值为准。赞分享桌面应用计算机视觉图像处理OCR【免费下载链接】audiverisLatest generation of Audiveris OMR engine项目地址https://gitcode.com/gh_mirrors/au/audiveris点击查看免费下载相关推荐Audiveris Flatpak 打包与 Flathub 提交完整指南从依赖生成到应用商店发布Audiveris Flatpak 打包与 Flathub 提交完整指南从依赖生成到应用商店发布 Audiveris 是最新一代的开源光学音乐识别OMR引桌面应用计算机视觉图像处理OCR超详细LocalSend Flatpak打包指南从构建到Flathub发布超详细LocalSend Flatpak打包指南从构建到Flathub发布 你还在为跨平台应用打包烦恼吗本文将以LocalSend项目为例带你从零开始掌握即时通讯网络/通信CodeBurn Desktop 的 Flathub 发布指南deb 重打包、Flatpak 清单与维护流程CodeBurn Desktop 的 Flathub 发布指南deb 重打包、Flatpak 清单与维护流程 CodeBurn 是一个免费、本地的 AI 编码上一篇CLIP-ViT-L-14-laion2B-s32B-b82K项目深度拆解2B数据集训练的75.3%准确率模型背后技术揭秘下一篇突破语言壁垒Material-UI国际化(i18n)全流程实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考