diff --git a/AI_POLICY.md b/AI_POLICY.md index 2e0fbca3..d38347d4 100644 --- a/AI_POLICY.md +++ b/AI_POLICY.md @@ -1,8 +1,9 @@ # AI Policy ## Tools Used -- Junie by JetBrains / Claude (architecture, implementation, code review, CI/CD setup) -- JetBrains AI Assistant (code completion) +- **Claude Code (Claude Opus)** — this fork's songbird-import workflow was built slice-by-slice with + Claude Code under a plan-first, one-PR-per-slice process, each PR human-reviewed before merge. +- (Upstream MakeACopy additionally used Junie by JetBrains and the JetBrains AI Assistant.) ## How AI Is Used AI tools are used as a significant development partner in this project, diff --git a/CLAUDE.md b/CLAUDE.md index 15faf0ed..5382b953 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,10 +51,11 @@ The full workflow is now live end-to-end (no TEMP anything): scan front/back → `SpanResolver` re-resolve blocking on out-of-range, + title/date/tags) → **finalize screen** (`ui/finalize/FinalizeFragment`). Finalize shows the byte-stable JSON (`emit/ImportJsonEmitter`, Appendix A; body via `emit/NoteMarkdown`; golden `app/src/test/resources/emit/golden_import.json` governs the wire -format — update consciously), then **Send to songbird** (`POST {base}/api/v1/import`, Bearer token, -result shows created/skipped) or **Share JSON** (FileProvider, cache). Connection settings live in -`ui/settings/SettingsFragment` (base URL + token via the encrypted `songbird/SongbirdPrefsHelper`), reached -from finalize. The `SermonDraft` flows via the activity-scoped `SermonDraftViewModel`. +format — update consciously), then **Send to songbird** (cookie-session login-per-send → +`POST {base}/api/v1/import`; result shows created/skipped/failed — see the Environment errata) or +**Share JSON** (FileProvider, cache). Connection settings live in `ui/settings/SettingsFragment` (base URL ++ **username + password** via the encrypted `songbird/SongbirdPrefsHelper`), reached from finalize. The +`SermonDraft` flows via the activity-scoped `SermonDraftViewModel`. ## Combined OCR text contract (F2 — the downstream artifact) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index ef547a8a..1fc2cb82 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -2,7 +2,7 @@ ## Our Commitment -We are committed to providing a welcoming and inspiring community for all. We pledge that everyone participating in the MakeACopy project and its communities will be treated with respect and dignity. +We are committed to providing a welcoming and inspiring community for all. We pledge that everyone participating in the Sermon Scanner project and its communities will be treated with respect and dignity. ## Our Standards @@ -33,7 +33,7 @@ This Code of Conduct applies to: - GitHub issues, pull requests, and discussions - Project communication channels (if any) - Community events and meetings -- Any other spaces that represent the MakeACopy project or community +- Any other spaces that represent the Sermon Scanner project or community This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. @@ -77,5 +77,5 @@ If you have questions about this Code of Conduct, please reach out to the projec --- -**Thank you for helping make MakeACopy a welcoming and inclusive community!** +**Thank you for helping make Sermon Scanner a welcoming and inclusive community!** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f03e8f14..10b7c5f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,386 +1,51 @@ -# Contributing to MakeACopy +# Contributing to Sermon Scanner -This guide explains how to set up a development environment for MakeACopy on **Linux** and **macOS**. +Sermon Scanner is a **private, sideloaded fork** of +[MakeACopy](https://github.com/egdels/makeacopy), retargeted to import sermon-note handouts into +[songbird](https://github.com/kbennett2000/songbird). It is not a store app and is developed for one +operator's workflow, so this is a short guide rather than an open community process. -> **Version alignment:** All local tool versions (JDK, NDK, CMake, Python) must match the versions defined in the GitHub Actions workflow (`.github/workflows/build-release.yml`) to ensure reproducible builds and F-Droid compatibility. The versions listed below are derived from that workflow. +## Build & toolchain -## Prerequisites +The **authoritative, verified build recipe** — JDK 21, Android SDK/NDK 28, CMake 3.31.6, the Python venv +for the ONNX build, submodule init, the three native-lib scripts, and the Gradle assemble step — lives in +**[CLAUDE.md](CLAUDE.md)** under "Build & test". It is not duplicated here. -| Tool | Version | Notes | -|------|---------|-------| -| **JDK** | 17 (Temurin recommended) | Required for Gradle and Android builds | -| **Android SDK** | API 36 | `compileSdk = 36`, `minSdk = 29` | -| **Android NDK** | 28.0.13004108 | Only needed if building native libs from source (Option B) | -| **CMake** | 3.31.6 | Only needed if building native libs from source (Option B) | -| **Python** | 3.11.x | Only needed if building native libs from source (Option B) | -| **Git** | any recent | With submodule support | +The app ships a single product flavor (**paddle**, PaddleOCR) targeting **arm64-v8a**; native OpenCV + +ONNX Runtime are built from source (the `./gradlew` assemble does **not** trigger that — run the scripts +first). -## 1. Clone the Repository +## The verification gate -```bash -git clone --recurse-submodules https://github.com/egdels/makeacopy.git -cd makeacopy -``` - -If you already cloned without `--recurse-submodules`: - -```bash -git submodule update --init --recursive -``` - -The project uses two Git submodules: -- `external/opencv` — OpenCV 4.13.0 -- `external/onnxruntime` — ONNX Runtime v1.24.1 - -## 2. Install JDK 21 - -### macOS - -```bash -brew install openjdk@21 -``` - -Or install [Eclipse Temurin](https://adoptium.net/) manually. - -### Linux (Debian/Ubuntu) - -```bash -sudo apt-get install -y openjdk-21-jdk -``` - -### Linux (Fedora) - -```bash -sudo dnf install -y java-21-openjdk-devel -``` - -Verify: - -```bash -java -version # should show 17.x -``` - -## 3. Install Android SDK and NDK - -### Option A: Android Studio (recommended) - -1. Install [Android Studio](https://developer.android.com/studio). -2. Open **SDK Manager** → **SDK Platforms** → install **Android API 36**. -3. Under **SDK Tools**, install: - - **NDK (Side by side)** version **28.0.13004108** - - **CMake** (see section below for exact version) -4. Set the environment variable: - -```bash -export ANDROID_HOME="$HOME/Android/Sdk" # Linux -export ANDROID_HOME="$HOME/Library/Android/sdk" # macOS -export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/28.0.13004108" -``` - -### Option B: Command-line only - -```bash -# Install NDK via sdkmanager -yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" \ - "ndk;28.0.13004108" \ - "platforms;android-36" \ - "build-tools;36.0.0" -``` - -## 4. Install CMake 3.31.6 - -The project requires CMake **3.31.6** to match F-Droid reproducible builds. - -### macOS - -```bash -brew install cmake -# If brew installs a different version, download 3.31.6 manually: -# https://github.com/Kitware/CMake/releases/tag/v3.31.6 -``` - -### Linux - -```bash -# Download and install CMake 3.31.6 -wget https://github.com/Kitware/CMake/releases/download/v3.31.6/cmake-3.31.6-linux-x86_64.tar.gz -tar xzf cmake-3.31.6-linux-x86_64.tar.gz -export PATH="$PWD/cmake-3.31.6-linux-x86_64/bin:$PATH" -``` - -Verify: - -```bash -cmake --version # should show 3.31.6 -``` - -## 5. Install Python 3.11 - -Python is needed by CMake scripts during native library builds. - -### macOS - -```bash -brew install python@3.11 -``` - -### Linux (Debian/Ubuntu) - -```bash -sudo apt-get install -y python3.11 -``` - -Verify: - -```bash -python3 --version # should show 3.11.x -``` - -## 6. Obtain Native Libraries - -The app requires native libraries (OpenCV and ONNX Runtime). You have two options: - -### Option A: Extract from a Release APK (recommended for contributors not modifying native code) - -Recommended for contributors working exclusively on Java/Kotlin code, UI, OCR flow, business logic, or tests — without modifying native code. You can obtain the prebuilt libraries from CI artifacts or extract them from an official release APK. - -#### From CI artifacts - -Every CI build on `main` uploads a **`native-libs`** artifact containing `jniLibs/` and `libs/`. Download it from the [Actions tab](https://github.com/egdels/makeacopy/actions/workflows/build-release.yml), extract it, and place the contents into your project: - -```bash -# After downloading and unzipping native-libs.zip: -cp -r app/src/main/jniLibs/ /app/src/main/jniLibs/ -cp -r app/libs/ /app/libs/ -``` - -#### From a release APK - -You can also extract the native libraries from any official release APK: - -```bash -# 1. Download a release APK (e.g. arm64-v8a) -wget https://github.com/egdels/makeacopy/releases/latest/download/MakeACopy-v3.1.0-arm64-v8a-release.apk - -# 2. Extract native libraries -unzip -o MakeACopy-v3.1.0-arm64-v8a-release.apk 'lib/*' -d /tmp/apk_extract - -# 3. Copy to project (APK uses lib//, project uses jniLibs//) -mkdir -p app/src/main/jniLibs/arm64-v8a -cp /tmp/apk_extract/lib/arm64-v8a/*.so app/src/main/jniLibs/arm64-v8a/ -``` - -For the ONNX Runtime JAR, download it from the same CI artifact or from [Maven Central](https://central.sonatype.com/artifact/com.microsoft.onnxruntime/onnxruntime-android) (version 1.24.1) and place it in `app/libs/`. - -> **Note:** Each APK contains only one ABI. For development on an emulator (x86_64) or a physical device (arm64-v8a), you only need the matching ABI. Extract from the corresponding APK. - -> **Important:** The `app/src/main/jniLibs/` directory is listed in `.gitignore` and must **not** be committed to the repository. The same applies to `app/libs/` (ONNX Runtime JAR). These directories contain build artifacts that are either built from source (Option B) or obtained from CI/release APKs (Option A). Committing them would violate the project's policy of not storing prebuilt binaries in the repository. - -### Option B: Build from source (required for native changes and F-Droid) - -If you need to modify native code or reproduce F-Droid builds, compile the native libraries from source. - -#### Set environment variables - -```bash -export ANDROID_HOME="$HOME/Android/Sdk" # adjust for your system -export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/28.0.13004108" -export ANDROID_SDK_ROOT="$ANDROID_HOME" -export ORT_CMAKE="$(which cmake)" -export OPENCV_CMAKE="$(which cmake)" -export PY3_BIN="$(which python3)" -export BUILD_GENERATOR="Unix Makefiles" -``` - -#### Build OpenCV - -```bash -chmod +x scripts/build_opencv_android.sh -VERBOSE=1 ./scripts/build_opencv_android.sh -``` - -#### Prepare OpenCV for the app - -```bash -chmod +x scripts/prepare_opencv.sh -./scripts/prepare_opencv.sh -``` - -This copies the compiled `.so` files into `app/src/main/jniLibs/`. - -#### Build ONNX Runtime - -```bash -chmod +x scripts/build_onnxruntime_android.sh -./scripts/build_onnxruntime_android.sh -``` - -> **Tip:** To build only for a specific ABI (faster for development): -> ```bash -> ABIS="arm64-v8a" ./scripts/build_opencv_android.sh -> ABIS="arm64-v8a" ./scripts/prepare_opencv.sh -> ABIS="arm64-v8a" ./scripts/build_onnxruntime_android.sh -> ``` - -## 7. Build the App - -```bash -chmod +x gradlew - -# Debug APK (with ABI splits) -./gradlew :app:assembleDebug - -# Debug APK (single universal APK, faster) -./gradlew :app:assembleDebug -PenableAbiSplits=false - -# Release APK -./gradlew :app:assembleRelease -``` - -## 8. Run Tests - -### JVM Unit Tests - -```bash -# All unit tests -./gradlew :app:testDebugUnitTest - -# Single test class -./gradlew :app:testDebugUnitTest --tests "de.schliweb.makeacopy.ExampleSanityTest" -``` - -### Instrumented Tests (requires emulator or device) - -```bash -# All instrumented tests -./gradlew :app:connectedDebugAndroidTest - -# Single test class -./gradlew :app:connectedDebugAndroidTest \ - -Pandroid.testInstrumentationRunnerArguments=class=de.schliweb.makeacopy.SomeInstrumentedTest -``` - -> The emulator or device must run **API 29+** (matching `minSdk`). - -## IDE Setup - -### Android Studio / IntelliJ IDEA - -1. Open the project root directory. -2. Let Gradle sync complete. -3. Ensure **annotation processing** is enabled (required for Lombok and Room): - - **Settings → Build → Compiler → Annotation Processors → Enable annotation processing** -4. The project uses **Java 21** — make sure your IDE JDK is set accordingly. - -### Lombok - -The project uses Lombok (`compileOnly` + `annotationProcessor`). Install the Lombok plugin in your IDE for proper code completion and navigation. - -## Project Structure +A change is green only when this passes (it mirrors `.github/workflows/build-release.yml`): ``` -makeacopy/ -├── app/ # Android application module -│ ├── src/main/java/ # Main source code -│ ├── src/test/java/ # JVM unit tests -│ ├── src/androidTest/java/ # Instrumented tests -│ └── src/main/jniLibs/ # Native libraries (generated) -├── external/ -│ ├── opencv/ # OpenCV submodule -│ ├── onnxruntime/ # ONNX Runtime submodule -│ └── opencv_pinned_jni/ # Pinned JNI headers for reproducibility -├── scripts/ # Build scripts for native libraries -├── fastlane/ # Fastlane metadata and changelogs -├── docs/ # Documentation -├── langpack-latin-best/ # OCR language pack module -├── training/ # ML model training resources -└── server/ # Server module +./gradlew :app:compilePaddleDebugJavaWithJavac :app:testPaddleDebugUnitTest :app:lintPaddleDebug ``` -## Feature Flags - -The app uses `BuildConfig` booleans to gate features: - -| Flag | Default | Description | -|------|---------|-------------| -| `FEATURE_SCAN_LIBRARY` | `true` | Scan library functionality | -| `FEATURE_REVIEW_OCR` | `true` | OCR review and correction | -| `FEATURE_FRAMING_LOGGING` | `false` | Debug logging for framing engine | -| `FEATURE_A11Y_GUIDANCE` | `true` | Accessibility guidance mode | -| `FEATURE_LAYOUT_ANALYSIS` | `false` | Layout analysis feature | -| `FEATURE_INBOX_MODE` | `true` | Inbox Mode – automatic export to a default directory | - -When adding new features, prefer **default-off** for risky or experimental changes. - -## 9. Code Quality +`lintPaddleDebug` is part of the gate (`abortOnError` is on, no baseline) — assemble + unit tests alone do +**not** catch lint errors. Code is formatted with **Spotless / google-java-format**: -The project uses three code-quality plugins. Run them regularly before pushing changes. - -### Spotless (Code Formatting) - -Spotless enforces [Google Java Format](https://github.com/google/google-java-format) on all Java sources. - -```bash -# Check formatting (fails if code is not formatted) -./gradlew :app:spotlessCheck - -# Auto-format all Java sources -./gradlew :app:spotlessApply ``` - -> **Tip:** Run `spotlessApply` before every commit to avoid CI failures. - -### JaCoCo (Test Coverage) - -JaCoCo generates a coverage report from the debug unit tests. - -```bash -./gradlew :app:jacocoTestReport +./gradlew :app:spotlessApply # auto-format +./gradlew :app:spotlessCheck # verify ``` -Reports are generated at: -- **HTML:** `app/build/reports/jacoco/jacocoTestReport/html/index.html` -- **XML:** `app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml` - -### Error Prone (Static Analysis) - -Error Prone runs automatically during every Java compilation — no separate command needed. All findings are reported as **warnings** in the compiler output. - -```bash -./gradlew :app:compileStandardDebugJavaWithJavac -``` - -> **Note:** Error Prone only analyses Java sources (not Kotlin). OpenCV sources under `org.opencv` are excluded from analysis. - -### Android Lint (Static Analysis) - -Android Lint checks for accessibility issues, unused resources, performance problems, and more. - -```bash -./gradlew :app:lintStandardDebug :app:lintPaddleDebug -``` - -The HTML reports are generated at: -- `app/build/reports/lint-results-standardDebug.html` -- `app/build/reports/lint-results-paddleDebug.html` - -> **Note:** Intentional suppressions are documented in `app/lint.xml` with explanations for each ignored check. - -### Run All Quality Checks Together - -```bash -./gradlew :app:spotlessCheck :app:lintStandardDebug :app:lintPaddleDebug :app:jacocoTestReport -``` - -This checks formatting (Spotless), runs Android Lint, compiles the code (Error Prone runs automatically), executes unit tests, and generates the coverage report (JaCoCo). - -## Tips +## Methodology (how this fork is developed) -- **ABI splits**: Enabled by default. Use `-PenableAbiSplits=false` for a single universal APK during development. -- **Hamcrest**: The project pins a single Hamcrest version for `androidTest`. When adding test dependencies, exclude `hamcrest-core` and `hamcrest-library` to avoid duplicate classes. -- **Test PDFs**: Place test assets under `app/src/debug/assets` or test directories, not in `main` — test PDFs are excluded from release builds. -- **Native builds take time**: The first OpenCV and ONNX Runtime builds can take 30–60 minutes. Subsequent builds are faster if the build directories are cached. +- **Plan first.** Investigate, write the plan, get it approved, then implement. +- **One PR per slice**, smallest reviewable unit; the maintainer merges. Never force-push `main`. +- **The scan/OCR core is frozen** — CameraX/Camera2 capture, the crop/perspective fragment, ONNX DocQuad + corner detection, OpenCV enhancement, PaddleOCR inference, `OCRPostProcessor`, multi-page capture, the + paddle model assets, and the native build. Its output quality is already validated on real handouts; + don't touch it without a forced, re-validated reason (see the "Prime directive" in CLAUDE.md). +- **Pure logic gets offline, deterministic unit tests** (the anchor finder, the JSON emitter, the span + resolver). Fixtures come from `docs/BUILD-BRIEF.md` or are synthetic — never bundle licensed Scripture. +- Pin behavior to the contracts in `docs/BUILD-BRIEF.md` (and the Environment errata in CLAUDE.md where + reality supersedes the brief). -## License +## Licensing & upstream -By contributing, you agree that your contributions will be licensed under the [Apache License 2.0](LICENSE). +Apache-2.0; `LICENSE` and `NOTICE` are preserved verbatim and attribution is permanent. Improvements to +the underlying scanner belong **upstream** at [egdels/makeacopy](https://github.com/egdels/makeacopy); +this fork only carries the songbird-import workflow. diff --git a/README.md b/README.md index 1a21b4e7..da46cb77 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,29 @@ A **private, sideloaded Android app** that photographs a two-sided printed sermon-note handout, OCRs it on-device, lets the operator fix the text and confirm a Scripture anchor, and emits a [songbird](https://github.com/kbennett2000/songbird)-compatible annotation **import JSON** -(optionally POSTing it straight into songbird over the LAN). Not a store app. +(sending it straight into songbird over the LAN). Not a store app. + +It was built to digitize the weekly printed sermon-note handouts from **Majestic View Church** +(Kiowa, Colorado) and file them into [songbird](https://github.com/kbennett2000/songbird) as +Scripture-anchored notes — turning a paper handout into a searchable annotation in a couple of minutes. The scan/OCR pipeline — CameraX capture, crop/perspective correction, ONNX DocQuad corner detection, OpenCV enhancement, and **PaddleOCR** inference — is inherited unchanged from the upstream project and validated on real handouts. +## How it works + +1. **Scan** the handout — photograph the front, crop, OCR; then the back, crop, OCR. +2. The app **concatenates** the two pages and **auto-detects the Scripture passage** (the first + structurally-resolvable reference, top-to-bottom). +3. **Review & fix** on one edit screen: correct the OCR text, confirm the anchor (book / chapter / + verses, with a live passage label), and set the title, date, and tags. +4. **Finalize**: preview the exact import JSON, then **Send to songbird** (shows *created / skipped* — + re-sending the same note is a harmless no-op) or **Share JSON** as a file. + ## Status -Feature-complete per its brief. The full workflow is live end-to-end: +Feature-complete. The full workflow is live end-to-end: > snap front → crop → OCR → snap back → crop → OCR → **concatenate** → > **auto-detect the Scripture anchor** → **edit screen** → **finalize** @@ -23,22 +37,52 @@ Feature-complete per its brief. The full workflow is live end-to-end: live passage label), and set the title, date, and tags. Out-of-range chapters block; the rest is best-effort with warnings. - **Finalize** — preview the exact import JSON, then **Send to songbird** (`POST /api/v1/import`, - showing the *created / skipped* result — re-sending the same note is a harmless no-op) or - **Share JSON** as a file. Verse spans for whole-chapter references are filled from a bundled, - offline verse-count table; the app never calls a Bible API at runtime. + showing the *created / skipped* result) or **Share JSON** as a file. Verse spans for whole-chapter + references are filled from a bundled, offline verse-count table; the app never calls a Bible API at + runtime. ### First run -Before **Send** is enabled, open **Settings** (from the finalize screen) and enter the songbird -base URL (e.g. `http://:8000`, reachable over the LAN/Tailscale) and bearer token. The token -is stored encrypted on-device. Until then you can still **Share JSON**. +songbird uses cookie-session login. Before **Send** is enabled, open **Settings** (from the finalize +screen) and enter the songbird base URL (e.g. `http://:`, reachable over the LAN/Tailscale), +your songbird **username**, and **password**. Credentials are stored encrypted on-device +(`EncryptedSharedPreferences`) and never logged. Until they're set you can still **Share JSON**. ## Fork & licensing This is a fork of **MakeACopy** ([egdels/makeacopy](https://github.com/egdels/makeacopy)), -licensed under the **Apache License 2.0**. The `LICENSE` and `NOTICE` files are preserved -verbatim and attribution is retained permanently. See `NOTICE` for upstream and third-party -attributions (OpenCV, ONNX Runtime, PaddleOCR, and others). +**custom-tailored to Majestic View's notes format** (the anchor-detection heuristic and book-name +aliases) and retargeted from a document-scanner to a songbird note importer. Licensed under the +**Apache License 2.0**; the `LICENSE` and `NOTICE` files are preserved verbatim and attribution is +retained permanently. See `NOTICE` for upstream and third-party attributions (OpenCV, ONNX Runtime, +PaddleOCR, and others). + +## Developer notes — adapting to other note formats + +If you keep your own sermon (or study) notes in songbird and want to OCR a *different* handout layout, +most of this app is reusable as-is; only a couple of spots encode Majestic View's conventions. The +authoritative spec is [`docs/BUILD-BRIEF.md`](docs/BUILD-BRIEF.md) (Appendix B = the book map, +Appendix C = a real OCR fixture); architecture and slice history are in [`CLAUDE.md`](CLAUDE.md). + +- **Scan / OCR** (CameraX → OpenCV → PaddleOCR) is **format-agnostic** — it reads any printed page; no + changes needed. +- **Anchor auto-detection** — `de.schliweb.makeacopy.anchor.AnchorFinder`. It assumes the passage is the + *first structurally-resolvable Scripture reference scanning top-to-bottom* (true for Majestic View, + whose handouts print the passage in the header). If your layout puts the reference elsewhere, or has + several, adjust the heuristic here. The operator can always override on the edit screen. +- **Book recognition** — `anchor/BookMap.java` is a table-driven 66-book USFM map with normalization + (Roman numerals → arabic, period-abbreviations, the `|john` OCR quirk). Adding an accepted spelling for + a different abbreviation style is a one-line entry. (Spec: BUILD-BRIEF Appendix B.) +- **Note body** — `emit/NoteMarkdown.java` renders a deliberately minimal Markdown body (H1 title, a + `passage — date` line, then each non-empty OCR line as a `- ` bullet). Reshape this if you want a + different note structure (e.g. preserving an outline). +- **Verse-count table** — `tools/generate_verse_counts/` produces + `app/src/main/assets/anchor/verse_counts.json` (used to fill whole-chapter end-verses). It's + canon-structural and translation-agnostic; regenerate it from any [Concord](https://github.com/kbennett2000/concord) + deployment. +- **songbird contract** — `emit/ImportJsonEmitter.java` (the import-JSON shape) and + `songbird/HttpImportPoster.java` (cookie-session login → import) are reusable for any songbird + instance; just point Settings at your URL + login. ## Building diff --git a/SECURITY.md b/SECURITY.md index c157406b..27a9e600 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -9,7 +9,7 @@ We take security seriously and appreciate your efforts to responsibly disclose a **Please do NOT open a public GitHub issue for security vulnerabilities.** Instead, please report security vulnerabilities to the project maintainers privately. 1. **Use GitHub's Security Advisory Form** - - Navigate to: https://github.com/egdels/makeacopy/security/advisories/new + - Navigate to: https://github.com/kbennett2000/sermon-notes-scanner/security/advisories/new - This creates a private report visible only to repository maintainers 2. **Or contact the maintainers directly** @@ -24,7 +24,7 @@ We take security seriously and appreciate your efforts to responsibly disclose a Please provide as much information as possible to help us understand and assess the vulnerability: - **Description** - A clear description of the vulnerability -- **Affected Version(s)** - Which version(s) of MakeACopy are affected +- **Affected Version(s)** - Which version(s) of Sermon Scanner are affected - **Steps to Reproduce** - How to reproduce the issue (if applicable) - **Potential Impact** - What could an attacker do with this vulnerability? - **Suggested Fix** - If you have a suggestion for fixing the issue (optional) @@ -54,39 +54,39 @@ We follow a responsible disclosure process: ## Supported Versions -| Version | Status | Security Updates | -|---------|--------|-----------------| -| 3.x | Latest | ✅ Yes | -| 2.x | Older | ⚠️ Case by case | -| 1.x | Outdated | ❌ No | - -We recommend users keep their application up to date with the latest version to ensure they have the latest security patches. +This is a private, sideloaded fork with no versioned release channel — `main` is the supported version. +Build and sideload from the latest `main`; security fixes land there. ## Security Considerations -### Offline-First Architecture - -MakeACopy is designed to work completely offline. This design choice significantly reduces certain classes of security risks: +### On-device OCR, LAN-only networking -- ✅ No network requests to untrusted servers -- ✅ No cloud storage of user data -- ✅ No tracking or analytics -- ✅ No third-party API dependencies +OCR runs **entirely on-device** (PaddleOCR via ONNX Runtime + OpenCV); images never leave the phone for +recognition. The app's **only** network egress is the operator-initiated **import POST to a +user-configured [songbird](https://github.com/kbennett2000/songbird) instance** over the LAN/Tailscale — +there are no third-party servers, no cloud storage, no tracking or analytics, and no telemetry. -However, other security considerations remain important: +- ✅ OCR and all document processing stay on-device +- ✅ The single network call is operator-initiated, to a self-hosted server the operator configures +- ✅ No cloud storage of user data; no tracking/analytics +- Network specifics: + - songbird credentials (username + password) are stored in **`EncryptedSharedPreferences`** and are + never logged or echoed. + - Auth is songbird's cookie-session; the session cookie is held only for the duration of a send. + - **Cleartext HTTP is permitted** (via `res/xml/network_security_config.xml`) because songbird is a + LAN/tailnet service without TLS; revisit if it is ever fronted by HTTPS. -- Input validation for document processing -- Safe handling of OCR models and image processing -- Secure storage of any cached data -- Safe handling of file I/O operations +Other ongoing considerations: input validation for document processing, safe handling of OCR models and +image processing, secure storage of cached data, and safe file I/O. ### Dependencies -We carefully select and maintain our dependencies: +Key third-party components: -- **ONNX Runtime** - ML inference engine for document detection +- **ONNX Runtime** - ML inference engine (DocQuad corner detection + PaddleOCR) - **OpenCV** - Image processing library -- **Tesseract/Leptonica** - OCR engines +- **PaddleOCR** - on-device OCR models +- **androidx.security-crypto** - EncryptedSharedPreferences for the songbird credentials All dependencies are regularly updated to patch known vulnerabilities. We use tools like: @@ -105,48 +105,31 @@ All code changes, including security fixes, go through: ### Android Security Features -MakeACopy leverages Android's built-in security features: +Sermon Scanner leverages Android's built-in security features: - **Sandboxing** - Each app instance is isolated from others - **Permission System** - Users must grant permissions for camera, storage, etc. - **SELinux** - Android's mandatory access control framework - **Code Signing** - All releases are cryptographically signed -### Build Reproducibility - -Official releases are built to be reproducible, allowing community members to verify builds: - -- Fixed tool versions (JDK, NDK, CMake) -- Deterministic build process -- Published build scripts and documentation -- APK signature verification available +### Builds -## APK Verification - -All official releases are cryptographically signed. You can verify the authenticity of APKs: - -**Upload Key (used for GitHub releases, F-Droid, and sideload APKs):** -``` -SHA-256: AE:32:2D:3F:B7:1A:FE:21:DF:47:27:E3:7A:5C:68:03:51:1D:5A:2F:E1:FC:31:35:43:0C:EE:06:99:FA:1B:34 -``` - -**Google Play App Signing Key:** -- Used for Play Store releases only +There are no official store releases. The app is built from source and **sideloaded as an unsigned debug +APK** (the build uses fixed tool versions — JDK 21, NDK 28, CMake 3.31.6 — per CLAUDE.md "Build & test"). +Verify provenance by building from `main` yourself; there is no Play Store / F-Droid distribution and no +published signing key for this fork. ## Staying Informed -To stay informed about security updates: - -- ⭐ Watch the GitHub repository for release notifications -- 📧 Subscribe to release announcements +- ⭐ Watch the GitHub repository for activity - 🔔 Enable notifications for security advisories ## Scope This security policy covers: -- The MakeACopy application code -- Official releases (F-Droid, Google Play, GitHub Releases) +- The Sermon Scanner application code +- Sideloaded debug builds from `main` - The project documentation and build infrastructure This security policy does **not** cover: @@ -161,7 +144,7 @@ If you have questions about this security policy or security in general, feel fr --- -**Thank you for helping keep MakeACopy secure!** +**Thank you for helping keep Sermon Scanner secure!** We appreciate the security research community and responsible disclosure practices that help make our project safer for all users. diff --git a/docs/accessibility_mode_guide_de.md b/docs/accessibility_mode_guide_de.md index 9699f96f..b00e4d1f 100644 --- a/docs/accessibility_mode_guide_de.md +++ b/docs/accessibility_mode_guide_de.md @@ -1,6 +1,6 @@ -# MakeACopy – Accessibility‑Modus +# Sermon Scanner – Accessibility‑Modus -Dieser Leitfaden erklärt Schritt für Schritt, wie du den Accessibility‑Modus in MakeACopy benutzt. Der Modus ist speziell dafür gedacht, die Kamera ohne visuelle Hinweise zu bedienen – mit klaren akustischen Ansagen und leichter haptischer Rückmeldung. +Dieser Leitfaden erklärt Schritt für Schritt, wie du den Accessibility‑Modus in Sermon Scanner benutzt. Der Modus ist speziell dafür gedacht, die Kamera ohne visuelle Hinweise zu bedienen – mit klaren akustischen Ansagen und leichter haptischer Rückmeldung. Hinweis: Die Begriffe „Tippen“, „Doppeltippen“ und „Taste“ beziehen sich auf die übliche Bedienung mit einem Screenreader wie TalkBack. @@ -94,11 +94,10 @@ Tipps für gute Ergebnisse - Licht: Bei Schatten oder sehr wenig Licht die Taschenlampe einschalten. Datenschutz und Offline‑Betrieb -- MakeACopy verarbeitet Bilder lokal auf deinem Gerät. +- Sermon Scanner verarbeitet Bilder lokal auf deinem Gerät. - Es findet kein Hochladen oder Teilen im Accessibility‑Modus statt. Keine Internetverbindung nötig. Häufige Fragen (FAQ) -Siehe auch: Website‑FAQ → Scannen (Kamera): docs/index_de.html#faq-scanning F: Ich höre die „Dokument erkannt“‑Hinweise sehr häufig. A: Die App begrenzt Wiederholungen bereits. Bewege das Gerät leicht weg und richte es dann erneut aus. Beim stabilen Erkennen kommt ein Ton + Vibration + Ansage. @@ -146,7 +145,6 @@ Wichtig: Die Stabilität über mehrere Frames wird separat genutzt, um Ansagen r F: Wie kann ich den Score verbessern? A: Nutze gleichmäßiges, helles Licht und vermeide Blendungen; halte das Telefon parallel zur Seite; lasse alle vier Ecken mit einem kleinen Rand sichtbar; wenn du zu nah dran bist, gehe ein Stück zurück und schneide später zu; lege das Papier auf einen kontrastreichen, matten Hintergrund; halte kurz ruhig, damit sich die Erkennung stabilisiert; wähle eine passende Ausrichtung (A4/Letter: meist Hochformat). -Hinweis: Eine ausführlichere Erklärung mit Beispielen findest du auf der Website: docs/index.html → FAQ → „Scanning (Camera)“. F: Ich höre ständig „Weiter weg/Move back“. diff --git a/docs/accessibility_mode_guide_en.md b/docs/accessibility_mode_guide_en.md index 340840d2..fcac0bef 100644 --- a/docs/accessibility_mode_guide_en.md +++ b/docs/accessibility_mode_guide_en.md @@ -1,6 +1,6 @@ -# MakeACopy – Accessibility Mode +# Sermon Scanner – Accessibility Mode -This guide explains step by step how to use Accessibility Mode in MakeACopy. The mode is designed to operate the camera without visual cues — using clear spoken announcements and gentle haptic feedback instead. +This guide explains step by step how to use Accessibility Mode in Sermon Scanner. The mode is designed to operate the camera without visual cues — using clear spoken announcements and gentle haptic feedback instead. Note: When this guide mentions “tap”, “double tap”, or “button”, it refers to typical screen reader usage such as TalkBack. @@ -94,11 +94,10 @@ Tips for good results - Light: Turn on the flashlight in shadows or very low light. Privacy and offline operation -- MakeACopy processes images locally on your device. +- Sermon Scanner processes images locally on your device. - No upload or sharing takes place in Accessibility Mode. No internet connection required. Frequently Asked Questions (FAQ) -See also: Website FAQ → Scanning (Camera): docs/index.html#faq-scanning Q: I hear “Document detected” very often. A: The app already limits repetitions. Move the device slightly away and realign. When the detection is stable you’ll get a tone + vibration + announcement. @@ -148,7 +147,6 @@ If the detection is unstable (e.g., because you are moving, the page is partiall Q: How can I improve detection and guidance? A: Use even, bright lighting and avoid glare; hold the phone parallel to the page; keep all four corners in view with a small margin; if you’re too close, step back a little and crop later; place the paper on a high‑contrast, matte background; keep still briefly so detection can stabilize; match orientation (A4/Letter: portrait usually fits best). -Tip: A more detailed explanation with examples is available on the website: docs/index.html → FAQ → “Scanning (Camera)”. Q: I keep hearing “Move back” all the time. diff --git a/docs/accessibility_mode_guide_fr.md b/docs/accessibility_mode_guide_fr.md index e7f563c4..385fd556 100644 --- a/docs/accessibility_mode_guide_fr.md +++ b/docs/accessibility_mode_guide_fr.md @@ -1,6 +1,6 @@ -# MakeACopy – Mode accessibilité +# Sermon Scanner – Mode accessibilité -Ce guide explique étape par étape comment utiliser le mode Accessibilité dans MakeACopy. Ce mode est conçu pour utiliser l'appareil photo sans repères visuels — avec des annonces vocales claires et un retour haptique léger. +Ce guide explique étape par étape comment utiliser le mode Accessibilité dans Sermon Scanner. Ce mode est conçu pour utiliser l'appareil photo sans repères visuels — avec des annonces vocales claires et un retour haptique léger. Remarque : lorsque ce guide mentionne « toucher », « double‑toucher » ou « bouton », il s'agit de l'usage typique avec un lecteur d'écran comme TalkBack. @@ -94,11 +94,10 @@ Conseils pour de bons résultats - Lumière : activez la lampe en cas d'ombre ou de très faible luminosité. Confidentialité et fonctionnement hors ligne -- MakeACopy traite les images localement sur votre appareil. +- Sermon Scanner traite les images localement sur votre appareil. - Aucun upload ni partage n'a lieu en mode Accessibilité. Aucune connexion Internet requise. Foire aux questions (FAQ) -Voir aussi : FAQ du site → Numérisation (Caméra) : docs/index_fr.html#faq-scanning Q : J'entends « Document détecté » très souvent. R : L'application limite déjà les répétitions. Éloignez légèrement l'appareil puis réalignez. Lorsque la détection est stable, vous obtenez un son + une vibration + une annonce. @@ -149,7 +148,6 @@ Si la détection est instable (par ex. parce que vous bougez, que la page est pa Q : Comment améliorer la détection et le guidage ? R : Utilisez un éclairage homogène et suffisamment fort, évitez les reflets ; tenez le téléphone parallèle à la page ; gardez les quatre coins visibles avec une petite marge ; si vous êtes trop près, reculez un peu et recadrez ensuite ; posez le papier sur un fond mat et contrasté ; restez brièvement immobile pour stabiliser la détection ; choisissez une orientation adaptée (A4/Letter : le portrait convient souvent). -Astuce : une explication plus détaillée avec des exemples est disponible sur le site : docs/index.html → FAQ → « Scanning (Camera) ». Q : J'entends constamment « Éloignez‑vous/Move back ». diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f2c0d94d..00000000 --- a/docs/index.html +++ /dev/null @@ -1,483 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MakeACopy - Document Scanner App - - - - - - - - - -
-

MakeACopy

- -

MakeACopy is an open-source document scanner app for Android that allows you to digitize paper documents with OCR functionality. The app is designed to be privacy-friendly, working completely offline without any cloud connection or tracking.

- - - -
- Get it on F-Droid - Get it on Google Play -
- -

Features

- -
    -
  • Camera Scanning: Capture documents using the device camera
  • -
  • Edge Detection: Automatic document edge detection using OpenCV, optionally enhanced by a custom-trained ONNX inference model
  • -
  • Perspective Correction: Adjust and crop documents with manual or automatic perspective correction
  • -
  • Image Enhancement: Apply filters (grayscale, contrast, sharpening)
  • -
  • OCR: Offline text recognition with PaddleOCR in the published paddle flavor; the standard Tesseract flavor remains available via GitHub Releases
  • -
  • OCR Review: Interactive review and correction of OCR results with word-level editing, dictionary-based suggestions, confidence highlighting, and re-OCR for individual words
  • -
  • PDF Export: Save as searchable PDF with recognized text
  • -
  • JPEG Export: Export scans as high-quality JPEG images (configurable quality, color/BW)
  • -
  • Multi-page Scanning: Combine multiple pages into one document; reorder and manage pages before export
  • -
  • Last Scans: Quickly access and reuse your most recent scans
  • -
  • Inbox Mode: Configure a default export folder (via SAF) for frictionless scanning — documents are saved automatically without a file picker, ideal for paperless-ngx, Nextcloud, or Syncthing workflows
  • -
  • Share & Save: Export locally or share with other apps
  • -
  • Dark Mode: Material 3 theme with day/night support
  • -
  • Privacy-Focused: 100% offline functionality, no internet connection required
  • -
- -

OCR Languages

-

MakeACopy supports offline OCR using PaddleOCR in the published paddle flavor. You can select the language or script group during the OCR step.

-
    -
  • English (English)
  • -
  • German (Latin)
  • -
  • French (Latin)
  • -
  • Italian (Latin)
  • -
  • Spanish (Latin)
  • -
  • Portuguese (Latin)
  • -
  • Dutch (Latin)
  • -
  • Polish (Latin)
  • -
  • Czech (Latin)
  • -
  • Slovak (Latin)
  • -
  • Hungarian (Latin)
  • -
  • Romanian (Latin)
  • -
  • Danish (Latin)
  • -
  • Norwegian (Latin)
  • -
  • Swedish (Latin)
  • -
  • Turkish (Latin)
  • -
  • Chinese (Simplified) (Chinese)
  • -
  • Chinese (Traditional) (Chinese)
  • -
  • Russian (East Slavic)
  • -
  • Thai (Thai)
  • -
  • Arabic (Arabic)
  • -
  • Persian/Farsi (Arabic)
  • -
  • Hindi (Devanagari)
  • -
  • Greek (Greek)
  • -
-

Note: For Chinese, the app includes suitable CJK fonts to improve PDF text rendering. For Arabic and Persian, the Noto Naskh Arabic font is included for proper RTL (right-to-left) rendering in PDF exports. For Hindi, the Noto Sans Devanagari font is included for proper Devanagari rendering in PDF exports.

- -

App variants and OCR backends

-

MakeACopy publishes the paddle flavor with PaddleOCR for F-Droid and Google Play. The standard Tesseract flavor remains available for users who still need Tesseract language data or workflows:

-
    -
  • Paddle flavor: the published app variant using PaddleOCR only, without Tesseract runtime or Tesseract language data.
  • -
  • Standard flavor (Tesseract): the Tesseract-based variant with optional language-pack APKs, offered via GitHub Releases.
  • -
-

In the paddle flavor, choose the closest script or language group in the OCR language selector. For example, choose Latin for German documents.

- - - - - - - - - - - - - - -
Document languageChoose in the OCR language selector
EnglishEnglish
German, French, Italian, Spanish, Portuguese, Dutch, Polish, Czech, Slovak, Hungarian, Romanian, Danish, Norwegian, Swedish, TurkishLatin
Chinese Simplified or TraditionalChinese
RussianEast Slavic
ThaiThai
Arabic and Persian/FarsiArabic
HindiDevanagari
GreekGreek
-

The F-Droid and Google Play links point to the paddle flavor. Use GitHub Releases if you need the standard Tesseract flavor.

- -

Screenshots

- -

- - - - -

- -

How to Use

- -
    -
  1. Scan Document: Open the app and tap the scan button to capture a document
  2. -
  3. Adjust Corners: Fine-tune the detected document edges
  4. -
  5. Crop & Enhance: Apply the crop and enhance the image if needed
  6. -
  7. OCR Processing: The app will recognize text in the document
  8. -
  9. Export & Share: Save as PDF or share with other apps
  10. -
- -

Privacy

- -

MakeACopy is designed with privacy in mind:

- -
    -
  • No internet connection required
  • -
  • No server requests or telemetry
  • -
  • OCR processing happens locally on your device
  • -
  • Required permissions: Camera, File Storage
  • -
  • No third-party connections
  • -
- -

For more details, see our Privacy Policy.

- -

Installation

- -

F-Droid

- -

MakeACopy is available on F-Droid: f-droid.org/packages/de.schliweb.makeacopy. - For F-Droid compliance, all native components are built from source: OpenCV native libraries (from the - external/opencv submodule) and ONNX Runtime (XNNPACK and NNAPI, Java bindings) from - external/onnxruntime. The resulting libraries are integrated into the app during the build; no prebuilt - binaries are stored in the repository.

-

The F-Droid and Google Play listings provide the paddle flavor. The standard Tesseract flavor is offered through GitHub Releases.

- -

GitHub Releases

- -

You can download the latest APK from the Releases page.

- -

APK Verification

- -

- To verify the authenticity of MakeACopy releases, compare the signing certificate fingerprint below with the output of - apksigner or AppVerifier. -

- -

SHA-256

-
    -
  • Upload key (GitHub / F-Droid / sideload APKs)
    - AE:32:2D:3F:B7:1A:FE:21:DF:47:27:E3:7A:5C:68:03:51:1D:5A:2F:E1:FC:31:35:43:0C:EE:06:99:FA:1B:34 -
  • -
  • Google Play App Signing key (Play Store releases)
    - C0:71:44:39:CB:51:62:32:A4:47:91:7A:6F:C2:28:1E:45:FA:AA:DD:37:F8:30:B1:01:1F:B4:85:68:8E:0D:64 -
  • -
- -

Verification Commands

-

-# Using apksigner (from Android SDK build-tools)
-apksigner verify --print-certs MakeACopy-vX.Y.Z.apk
-
-# Using AppVerifier (https://github.com/soupslurpr/AppVerifier)
-appverifier verify MakeACopy-vX.Y.Z.apk
-
- - -

❤️ Support this project

-

MakeACopy is free and open source. If you find it useful, please consider supporting development:

-

- Ko-fi - PayPal -

- -

FAQ

- -

Scanning (Camera)

-
    -
  • The image is blurry / text is hard to read
    - - Ensure sufficient lighting; avoid dim, warm ambient light.
    - - Hold the device steady or brace it.
    - - Trigger autofocus by tapping the relevant area in the viewfinder (if available).
    - - Increase the distance slightly and crop later — being too close can make focusing harder. -
  • -
  • Strong shadows or reflections
    - - Light the document evenly from multiple sides.
    - - Avoid direct light sources that cause glare (e.g., on glossy paper).
    - - Place the document on a matte, high-contrast background. -
  • -
  • The image is too dark/bright
    - - Improve the lighting.
    - - Use the flash only if needed — it can cause reflections. -
  • -
  • Distorted perspective
    - - Shoot as straight-on and parallel to the document surface as possible. -
  • -
  • What does the framing/quality score mean?
    - Accessibility Mode can announce a percentage (0–100%) while you align the page. This value is a confidence indicator for the current corner detection: it is based on (a) the detected quadrilateral’s area relative to the image, (b) how rectangular the corners are (angles closer to 90°), and (c) how symmetric opposite side lengths are.
    -
    - Important: stability over multiple frames is used separately to keep announcements calm — it is not part of this percentage. -
  • -
  • How can I improve the score?
    - - Use even, bright lighting; avoid glare and hard shadows (see tips above).
    - - Hold the phone parallel to the page; try not to tilt it. Keep a small margin around the paper so all four - corners are visible.
    - - If you are too close, focus may struggle and corners may be cut off — move a little further away and crop later.
    - - Place the paper on a high‑contrast, matte background so edges are easier to detect.
    - - Keep still for a moment so the detection can stabilize; rest your hands or elbows if possible.
    - - Match orientation: for A4/Letter, portrait usually fits best; for wide receipts or cards, try landscape. -
  • -
  • Should I hold the phone in portrait or landscape while capturing?
    - A4/Letter: portrait usually fits best. Very wide items (receipts, cards): try landscape. Guidance adapts to how you hold the phone. -
  • -
  • What do “left/right/up/down” mean if I hold the phone in landscape?
    - Note about holding the phone (landscape): the camera screen stays in portrait orientation. The directional hints (“left/right/up/down”) refer to the upright-aligned preview.
    -
    - If you hold the phone sideways, depending on your device/Android version, - - the hints may still behave like in portrait (because the UI does not switch to landscape), or - - the internal analysis axes may follow the display’s rotation.
    -
    - If “left/right/up/down” feels confusing, return to portrait or rotate the phone by 180° and check whether the hints make more sense. -
  • -
  • I keep hearing “Move back” all the time
    - The app suppresses distance prompts without a clear document and rate‑limits repeats. Improve light (use flashlight), include the whole page with a small margin, and hold still briefly. -
  • -
  • Does the app suggest portrait vs. landscape?
    - Yes. In Accessibility Mode, the app can suggest whether portrait or landscape seems more appropriate for the current page.
    -
    - The tip is only given when - - the estimate is sufficiently confident (confidence ≥ 0.30), and - - no plausible document is currently detected (so it does not override the normal guidance).
    -
    - To stay calm, the tip goes through the same guidance logic as other announcements (brief stability over multiple frames) and is rate-limited. -
  • -
- -

Edge Detection

-
    -
  • Document borders are detected incorrectly
    - - Ensure good contrast between the document and the background (e.g., light paper on a dark table).
    - - Flatten the paper (no waves/creases) and align it straight.
    - - Avoid shadows that could be interpreted as edges. -
  • -
  • No automatic detection
    - - Retake the shot with better lighting.
    - - Use manual corner adjustment after the scan to move points. -
  • -
  • Result is skewed or cropped
    - - After automatic detection, check all four points and adjust them manually if needed.
    -
  • -
- -

OCR (Text Recognition)

-
    -
  • OCR barely recognizes any text
    - - Make sure the correct language is selected.
    - - Scan in good quality: sharp, sufficient light, low noise.
    - - Avoid very small text — fill more of the page or scan closer (without blur). -
  • -
  • Wrong language / accents are not recognized
    - - Choose the appropriate OCR language in the app.
    - - For higher accuracy in Latin languages, install the Language Pack: MakeACopy OCR Latin (Best) (Play Store link above on this page). -
  • -
  • Mixed languages in the document
    - - If possible, scan sections separately per language.
    - - Alternatively, choose the primary language; mixed text can reduce recognition accuracy. -
  • -
  • Handwriting is not recognized
    - - Tesseract is primarily designed for printed text; handwriting is only recognized to a limited extent.
    - - Better results with clear, print-like handwriting; otherwise consider manual transcription. -
  • -
  • OCR rotation/orientation is wrong
    - - The app detects orientation automatically: it internally tries OCR at 90° steps (0°, 90°, 180°, 270°) and uses the best result. For pages that are already correctly aligned, it exits early to save time.
    - - If the page is heavily skewed, rotate it before OCR using the rotate buttons in 90° steps until text lines are horizontal.
    - - Avoid strong perspective; align the document as straight as possible. -
  • -
  • What does the “OCR auto-rotate (also apply to export)” option do?
    - When enabled, the app runs OCR with additional 90° rotations (0°, 90°, 180°, 270°) and picks the best result (by mean OCR confidence; ties are broken by text length). If the first attempt (0°) is already strong enough, it skips the remaining rotations to save time.
    -
    - It also applies the detected rotation to the current scan so the exported image/PDF will be rotated accordingly. When disabled, OCR is only run in the current orientation and nothing is automatically rotated for export. -
  • -
  • Search in the PDF does not work
    - - Check whether the selected language was correct; the wrong language produces mismatched recognized text.
    - - Alternatively, you can export the OCR text separately as a TXT file. -
  • -
  • What do the recognition modes mean?
    - In the app, before text recognition you can choose how to prepare the image for Tesseract: -
    - - Original (no pre-processing): Fastest. The photo is passed to OCR unchanged. Good for already clean, high-contrast scans; may miss faint or "dirty" text.
    - - OpenCV Quick: Fast, light pre-processing (grayscale, slight denoising, automatic black/white, optionally slight upscaling). A good default for most photos — a solid balance of speed and quality.
    - - OpenCV Robust: Maximum accuracy for difficult pages (deskew, normalize lighting, edge-preserving denoising, smart upscaling). Produces a high-quality grayscale image for Tesseract. Best accuracy, but slower and more memory intensive.
    - Note: For most cases, “OpenCV Quick” is recommended; for very tough pages use “OpenCV Robust”. -
  • -
  • What does the "OCR post-processing (correct common errors)" option do?
    - This option automatically improves the recognized text after OCR processing. It is enabled by default and can be toggled in the "Choose recognition mode" dialog.
    -
    - What gets corrected?
    - - Character confusions: 0 ↔ O (zero vs. letter O), 1 ↔ l ↔ I (one vs. lowercase L vs. uppercase I), 5 ↔ S, 8 ↔ B, 2 ↔ Z
    - - Ligature corrections: "rn" → "m", "cl" → "d", "vv" → "w" (character sequences that look like other letters)
    - - Context-aware corrections: In numeric sequences, letters are corrected to digits (e.g., "1O23" → "1023"); in text passages, digits are corrected to letters (e.g., "H0use" → "House")
    - - Dictionary-based correction: Words with low recognition confidence (below 70%) are checked against a dictionary and replaced if a match is found
    - - Language-specific corrections: For German, e.g., correction of umlauts and ß ("Strasse" → "Straße")
    -
    - When to disable?
    - In most cases, post-processing improves text quality. However, it may be useful to disable it if the text contains many technical codes or serial numbers, intentional mixtures of letters and numbers, or if the original text must be preserved exactly. -
  • -
  • How do I manage language packs / OCR models?
    - - Open the OCR view of a scan and tap the menu (⋮) → “OCR models”.
    - - “Import .traineddata…”: Import a single Tesseract model file from the device/storage.
    - - “Discover language packs”: Find installed Language‑Pack apps (e.g., “MakeACopy OCR Latin (Best)”) and import models from them.
    - - “Delete Best model”: Remove a previously imported Best model for the currently selected language (the built‑in fast model remains available).
    - Tip: The app ships with compact, fast models. For higher accuracy you can optionally install larger “Best” models via a Language‑Pack (link above on this page). No internet connection is required. -
  • -
- -

OCR Review

-
    -
  • What is OCR Review?
    - OCR Review is an interactive screen where you can check and correct the recognized text before exporting. It shows each recognized word as a box overlaid on the document, with color-coded confidence highlighting (green = high confidence, red = low confidence). -
  • -
  • How do I open OCR Review?
    - After OCR processing is complete, tap the "Review" button (pen icon) in the OCR screen. This opens the Review screen where you can inspect and edit the results. -
  • -
  • What are the different view modes?
    - The Review screen has three tabs:
    - - Layout: Shows word boxes overlaid on a neutral background. Tap a word to edit it, long-press for more options.
    - - Document: Shows the original scanned image with word boxes overlaid. Useful for comparing OCR results with the actual document.
    - - Text: A plain text editor view where you can edit the full text directly. -
  • -
  • What is the difference between tap and long-press on a word?
    - Tap (short click): Opens the inline edit dialog where you can:
    - - Edit the word text directly
    - - See dictionary-based suggestions (if available) and tap a suggestion to apply it
    -
    - Long-press (hold): Opens a context menu with additional options:
    - - Edit…: Same as tap — opens the inline edit dialog
    - - Merge with next: Combines this word with the following word into one
    - - Split: Splits the word in the middle into two separate words
    - - Delete: Removes the word entirely
    - - Case: Change capitalization (UPPERCASE, lowercase, Title Case)
    - - Language…: Set the language for this specific word and optionally re-run OCR for just this word -
  • -
  • What are the dictionary suggestions?
    - When you tap a word to edit it, the app shows suggestions from the dictionary based on similarity to the current word. This helps correct common OCR errors. Tap a suggestion chip to apply it. Suggestions are ranked by Levenshtein similarity with special weighting for typical OCR confusions (0↔O, 1↔l, 5↔S, etc.). -
  • -
  • What does "Re-OCR" do?
    - In the language dialog (long-press → Language…), you can select a different language and tap "Re-OCR". This re-runs text recognition for just that single word using the selected language. Useful when a word in a different script (e.g., Persian in an English document) was misrecognized. -
  • -
  • How do I save my changes?
    - Tap the "Save" button at the bottom of the Review screen. This applies your corrections to the OCR result. If you tap "Back" or the X button with unsaved changes, you will be asked whether to discard them. -
  • -
  • What do the color-coded boxes mean?
    - - Green/teal border: High confidence — the OCR engine is fairly certain about this word
    - - Red border: Low confidence (below 60%) — the word may need manual review
    - - Yellow border: Currently selected word -
  • -
- -

More questions? Please open an issue: github.com/egdels/makeacopy/issues.

- -

License

- -

MakeACopy is licensed under the Apache License 2.0.

- -
-Copyright 2025 Christian Kierdorf
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-    
-
- - diff --git a/docs/index_de.html b/docs/index_de.html deleted file mode 100644 index 285e5825..00000000 --- a/docs/index_de.html +++ /dev/null @@ -1,481 +0,0 @@ - - - - - - MakeACopy - Dokumentenscanner-App - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

MakeACopy

- -

MakeACopy ist eine Open-Source-Dokumentenscanner-App für Android, mit der Sie Papierdokumente mit OCR-Funktionalität digitalisieren können. Die App ist datenschutzfreundlich konzipiert und arbeitet vollständig offline ohne Cloud-Anbindung oder Tracking.

- - - -
- Hol es dir bei F-Droid - Jetzt bei Google Play -
- -

Funktionen

- -
    -
  • Kamera-Scan: Erfassen von Dokumenten mit der Gerätekamera
  • -
  • Kantenerkennung: Automatische Dokumentkantenerkennung mit OpenCV, optional erweitert durch ein selbst trainiertes ONNX-Inferenzmodell
  • -
  • Perspektivkorrektur: Anpassen und Zuschneiden von Dokumenten mit manueller oder automatischer Perspektivkorrektur
  • -
  • Bildverbesserung: Filter anwenden (Graustufen, Kontrast, Schärfen)
  • -
  • OCR: Offline-Texterkennung mit PaddleOCR im veröffentlichten paddle-Flavor; das standard-Flavor mit Tesseract bleibt über GitHub Releases verfügbar
  • -
  • OCR Review: Interaktive Überprüfung und Korrektur von OCR-Ergebnissen mit Wort-Level-Bearbeitung, wörterbuchbasierten Vorschlägen, Konfidenz-Hervorhebung und Re-OCR für einzelne Wörter
  • -
  • PDF-Export: Speichern als durchsuchbares PDF mit erkanntem Text
  • -
  • JPEG-Export: Export als hochwertige JPEG-Bilder (Qualität, Farbe/Schwarzweiß konfigurierbar)
  • -
  • Mehrseitige Scans: Mehrere Seiten zu einem Dokument zusammenführen; Seiten vor dem Export verwalten und anordnen
  • -
  • Letzte Scans: Schnell auf die zuletzt erstellten Scans zugreifen und sie wiederverwenden
  • -
  • Inbox-Modus: Standard-Exportordner (über SAF) konfigurieren für reibungsloses Scannen — Dokumente werden automatisch ohne Dateiauswahl gespeichert, ideal für paperless-ngx, Nextcloud oder Syncthing-Workflows
  • -
  • Teilen & Speichern: Lokal exportieren oder mit anderen Apps teilen
  • -
  • Dunkelmodus: Material 3-Design mit Tag/Nacht-Unterstützung
  • -
  • Datenschutzorientiert: 100% Offline-Funktionalität, keine Internetverbindung erforderlich
  • -
- -

OCR-Sprachen

-

MakeACopy unterstützt Offline-OCR mit PaddleOCR im veröffentlichten paddle-Flavor. Die Sprache oder Schriftgruppe kann im OCR-Schritt ausgewählt werden.

-
    -
  • Englisch (Englisch)
  • -
  • Deutsch (Latin)
  • -
  • Französisch (Latin)
  • -
  • Italienisch (Latin)
  • -
  • Spanisch (Latin)
  • -
  • Portugiesisch (Latin)
  • -
  • Niederländisch (Latin)
  • -
  • Polnisch (Latin)
  • -
  • Tschechisch (Latin)
  • -
  • Slowakisch (Latin)
  • -
  • Ungarisch (Latin)
  • -
  • Rumänisch (Latin)
  • -
  • Dänisch (Latin)
  • -
  • Norwegisch (Latin)
  • -
  • Schwedisch (Latin)
  • -
  • Türkisch (Latin)
  • -
  • Chinesisch (Vereinfacht) (Chinesisch)
  • -
  • Chinesisch (Traditionell) (Chinesisch)
  • -
  • Russisch (Ostslawisch)
  • -
  • Thai (Thai)
  • -
  • Arabisch (Arabisch)
  • -
  • Persisch/Farsi (Arabisch)
  • -
  • Hindi (Devanagari)
  • -
  • Griechisch (Griechisch)
  • -
-

Hinweis: Für Chinesisch sind geeignete CJK-Schriften enthalten, um die PDF-Textdarstellung zu verbessern. Für Arabisch und Persisch ist die Noto Naskh Arabic-Schrift für korrekte RTL-Darstellung (rechts-nach-links) in PDF-Exporten enthalten. Für Hindi ist die Noto-Sans-Devanagari-Schrift für korrekte Devanagari-Darstellung in PDF-Exporten enthalten.

- -

App-Varianten und OCR-Backends

-

MakeACopy veröffentlicht das paddle-Flavor mit PaddleOCR auf F-Droid und Google Play. Das standard-Flavor mit Tesseract bleibt für Nutzer verfügbar, die weiterhin Tesseract-Sprachdaten oder -Workflows benötigen:

-
    -
  • paddle-Flavor: die veröffentlichte App-Variante nur mit PaddleOCR, ohne Tesseract-Laufzeit und ohne Tesseract-Sprachdaten.
  • -
  • standard-Flavor (Tesseract): die Tesseract-basierte Variante mit optionalen Language-Pack-APKs, angeboten über GitHub Releases.
  • -
-

Im paddle-Flavor wählen Sie im OCR-Fragment die passende Schrift- oder Sprachgruppe. Für deutsche Dokumente wählen Sie zum Beispiel Latin.

- - - - - - - - - - - - - - -
DokumentspracheAuswahl im OCR-Fragment
EnglischEnglisch
Deutsch, Französisch, Italienisch, Spanisch, Portugiesisch, Niederländisch, Polnisch, Tschechisch, Slowakisch, Ungarisch, Rumänisch, Dänisch, Norwegisch, Schwedisch, TürkischLatin
Chinesisch vereinfacht oder traditionellChinesisch
RussischOstslawisch
ThaiThai
Arabisch und Persisch/FarsiArabisch
HindiDevanagari
GriechischGriechisch
-

Die F-Droid- und Google-Play-Links führen zum paddle-Flavor. Nutzen Sie GitHub Releases, wenn Sie das standard-Flavor mit Tesseract benötigen.

- -

Screenshots

- -

- - - - -

- -

Verwendung

- -
    -
  1. Dokument scannen: Öffnen Sie die App und tippen Sie auf die Scan-Taste, um ein Dokument zu erfassen
  2. -
  3. Ecken anpassen: Feinabstimmung der erkannten Dokumentenränder
  4. -
  5. Zuschneiden & Verbessern: Wenden Sie den Zuschnitt an und verbessern Sie das Bild bei Bedarf
  6. -
  7. OCR-Verarbeitung: Die App erkennt Text im Dokument
  8. -
  9. Exportieren & Teilen: Als PDF speichern oder mit anderen Apps teilen
  10. -
- -

Datenschutz

- -

MakeACopy wurde mit Fokus auf Datenschutz entwickelt:

- -
    -
  • Keine Internetverbindung erforderlich
  • -
  • Keine Serveranfragen oder Telemetrie
  • -
  • OCR-Verarbeitung erfolgt lokal auf Ihrem Gerät
  • -
  • Erforderliche Berechtigungen: Kamera, Dateispeicher
  • -
  • Keine Verbindungen zu Drittanbietern
  • -
- -

Weitere Details finden Sie in unserer Datenschutzerklärung.

- -

Installation

- -

F-Droid

- -

MakeACopy ist auf F-Droid verfügbar: f-droid.org/packages/de.schliweb.makeacopy. - Für die F-Droid-Konformität werden alle nativen Komponenten aus dem Quellcode gebaut: OpenCV-Bibliotheken (aus dem - Submodul external/opencv) und ONNX Runtime (XNNPACK und NNAPI, Java-Bindings) aus external/onnxruntime. - Die resultierenden Bibliotheken werden während des Builds in die App integriert; es werden keine vorcompilierten - Binärdateien im Repository gespeichert.

-

Die F-Droid- und Google-Play-Einträge stellen das paddle-Flavor bereit. Das standard-Flavor mit Tesseract wird über GitHub Releases angeboten.

- -

GitHub Releases

- -

Sie können die neueste APK von der Releases-Seite herunterladen.

- -

APK-Überprüfung

- -

- Um die Echtheit der MakeACopy-Releases zu prüfen, vergleiche den unten angegebenen Fingerabdruck des Signaturzertifikats - mit der Ausgabe von apksigner oder AppVerifier. -

- -

SHA-256

-
    -
  • Upload-Schlüssel (GitHub / F-Droid / Sideload-APKs)
    - AE:32:2D:3F:B7:1A:FE:21:DF:47:27:E3:7A:5C:68:03:51:1D:5A:2F:E1:FC:31:35:43:0C:EE:06:99:FA:1B:34 -
  • -
  • Google Play App-Signaturschlüssel (Play-Store-Versionen)
    - C0:71:44:39:CB:51:62:32:A4:47:91:7A:6F:C2:28:1E:45:FA:AA:DD:37:F8:30:B1:01:1F:B4:85:68:8E:0D:64 -
  • -
- -

Verifikationsbefehle

-

-# Mit apksigner (aus den Android SDK build-tools)
-apksigner verify --print-certs MakeACopy-vX.Y.Z.apk
-
-# Mit AppVerifier (https://github.com/soupslurpr/AppVerifier)
-appverifier verify MakeACopy-vX.Y.Z.apk
-
- -

❤️ Unterstütze dieses Projekt

-

MakeACopy ist frei und quelloffen. Wenn dir die App hilft, erwäge bitte eine kleine Unterstützung:

-

- Ko-fi - PayPal -

- -

FAQ

- -

Scannen (Kamera)

-
    -
  • Das Bild ist unscharf / Text schwer lesbar
    - - Achte auf genügend Licht; vermeide schwaches, warmes Umgebungslicht.
    - - Halte das Gerät ruhig oder stütze es ab.
    - - Aktiviere den Autofokus durch Antippen des relevanten Bereichs im Sucher (falls verfügbar).
    - - Erhöhe den Abstand leicht und schneide später zu – zu nah kann den Fokus erschweren. -
  • -
  • Starke Schatten oder Reflexionen
    - - Beleuchte das Dokument gleichmäßig von mehreren Seiten.
    - - Vermeide direkte Lichtquellen, die Spiegelungen erzeugen (z. B. über glänzendem Papier).
    - - Lege das Dokument auf einen matten, kontrastreichen Untergrund. -
  • -
  • Das Bild ist zu dunkel/hell
    - - Verbessere die Beleuchtung.
    - - Schalte den Blitz nur bei Bedarf ein – er kann Reflexe verursachen. -
  • -
  • Verzerrte Perspektive
    - - Fotografiere möglichst frontal und parallel zur Dokumentenfläche. -
  • -
  • Was bedeutet der Framing-/Qualitäts‑Score?
    - Der Accessibility‑Modus kann beim Ausrichten einen Prozentwert (0–100 %) ansagen. Dieser Wert ist ein „Confidence“-Indikator der aktuellen Eckenerkennung: Er basiert auf (a) dem Flächenanteil des erkannten Vierecks im Bild, (b) wie rechteckig die Ecken sind (Winkel näher an 90°), und (c) wie symmetrisch gegenüberliegende Kantenlängen sind.
    -
    - Wichtig: Die Stabilität über mehrere Frames wird separat genutzt, um Ansagen ruhiger zu machen – sie ist nicht Teil dieses Prozentwerts. -
  • -
  • Wie kann ich den Score verbessern?
    - - Gleichmäßiges, helles Licht; Blendungen und harte Schatten vermeiden.
    - - Telefon parallel zur Seite halten; nicht kippen. Kleinen Rand lassen, alle vier Ecken sichtbar.
    - - Wenn du zu nah dran bist, etwas zurückgehen und später zuschneiden.
    - - Papier auf matten, kontrastreichen Untergrund legen.
    - - Kurz stillhalten, damit sich die Erkennung stabilisieren kann.
    - - Orientierung passend wählen: A4/Letter → meist Hochformat; sehr breite Belege/Karten → Querformat. -
  • -
  • Soll ich beim Aufnehmen im Hoch- oder Querformat halten?
    - A4/Letter: Hochformat passt meist am besten. Sehr breite Vorlagen (Belege, Karten): Querformat probieren. Die Hinweise passen sich deiner Haltung an. -
  • -
  • Was bedeuten „links/rechts/oben/unten“ im Querformat?
    - Hinweis zur Gerätehaltung (Querformat): Die Kameraansicht der App bleibt im Hochformat (Portrait). Die Richtungs‑Hinweise („links/rechts/oben/unten“) beziehen sich auf die aufrecht ausgerichtete Vorschau.
    -
    - Wenn du das Telefon seitlich hältst, kann es je nach Gerät/Android‑Version sein, - - dass die Hinweise weiterhin wie im Hochformat gemeint sind (weil die Oberfläche nicht ins Querformat wechselt), oder - - dass die Analyse‑Achsen intern mit der Display‑Ausrichtung mitgehen.
    -
    - Wenn dir „links/rechts/oben/unten“ unlogisch vorkommt, richte das Telefon wieder ins Hochformat aus oder drehe es um 180° und prüfe, ob die Hinweise dann besser passen. -
  • -
  • Ich höre ständig „Weiter weg/Move back“
    - Die App unterdrückt Distanz‑Hinweise ohne erkennbares Dokument und drosselt Wiederholungen. Beleuchtung verbessern (Taschenlampe bei Bedarf), ganze Seite mit kleinem Rand ins Bild nehmen, kurz ruhig halten. -
  • -
  • Gibt es einen Tipp für Hoch‑/Querformat?
    - Ja. Im Accessibility‑Modus kann die App einen Hinweis geben, ob Hoch‑ oder Querformat für die aktuelle Seite sinnvoller wirkt.
    -
    - Der Hinweis wird nur gegeben, wenn - - die Schätzung ausreichend sicher ist (Konfidenz ≥ 0,30) und - - aktuell kein plausibles Dokument erkannt wird (damit die normalen Ausrichtungs‑Hinweise nicht überlagert werden).
    -
    - Damit es ruhig bleibt, wird der Hinweis über dieselbe Guidance‑Logik wie die anderen Ansagen geglättet (kurze Stabilität über mehrere Frames) und zeitlich begrenzt (Rate‑Limit). -
  • -
- -

Eckenerkennung (Randerkennung)

-
    -
  • Dokumentränder werden falsch erkannt
    - - Sorge für guten Kontrast zwischen Dokument und Untergrund (z. B. helles Papier auf dunklem Tisch).
    - - Glätte das Papier (keine Wellen/Knicke) und richte es gerade aus.
    - - Vermeide Schatten, die wie Ränder interpretiert werden können. -
  • -
  • Keine automatische Erkennung
    - - Wiederhole die Aufnahme mit besserer Beleuchtung.
    - - Nutze die manuelle Eckenkorrektur nach dem Scan, um Punkte zu verschieben. -
  • -
  • Ergebnis ist schief oder abgeschnitten
    - - Prüfe nach der automatischen Erkennung alle vier Punkte und korrigiere sie bei Bedarf manuell.
    -
  • -
- -

OCR (Texterkennung)

-
    -
  • OCR erkennt kaum Text
    - - Stelle sicher, dass die richtige Sprache ausgewählt ist.
    - - Scanne in guter Qualität: scharf, ausreichend Licht, kein Rauschen.
    - - Vermeide sehr kleine Schrift – fülle die Seite mehr aus oder scanne näher (ohne Unschärfe). -
  • -
  • Falsche Sprache / Akzente werden nicht erkannt
    - - Wähle die passende OCR-Sprache in der App.
    - - Für höhere Genauigkeit bei lateinischen Sprachen installiere das Language-Pack: MakeACopy OCR Latin (Best) (Play Store-Link oben auf dieser Seite). -
  • -
  • Gemischte Sprachen im Dokument
    - - Wenn möglich, scanne Abschnitte getrennt pro Sprache.
    - - Alternativ die primäre Sprache wählen; Mischtexte können die Erkennungsrate reduzieren. -
  • -
  • Handschrift wird nicht erkannt
    - - Tesseract ist primär für Druckschrift ausgelegt; handschriftliche Texte werden nur eingeschränkt erkannt.
    - - Bessere Ergebnisse mit klarer, druckähnlicher Schrift; ansonsten manuelle Erfassung erwägen. -
  • -
  • OCR-Drehung/Orientierung falsch
    - - Die App erkennt die Ausrichtung automatisch: Sie testet die OCR intern in 90°‑Schritten (0°, 90°, 180°, 270°) und verwendet das beste Ergebnis. Bei bereits korrekt ausgerichteten Seiten wird aus Zeitgründen früh abgebrochen.
    - - Falls die Seite stark schief ist, drehe sie vor der OCR mit den Dreh‑Tasten in 90°‑Schritten, bis die Textzeilen horizontal verlaufen.
    - - Vermeide starke Perspektive; richte das Dokument möglichst gerade aus. -
  • -
  • Was macht die Option „OCR‑Auto‑Drehung (auch beim Export anwenden)“?
    - Wenn diese Option aktiv ist, versucht die App die OCR zusätzlich in 90°‑Schritten (0°, 90°, 180°, 270°) und wählt das beste Ergebnis (nach OCR‑Konfidenz; bei Gleichstand nach Textlänge). Wenn die erste Prüfung (0°) bereits „gut genug“ ist, werden die weiteren Drehungen übersprungen, um Zeit zu sparen.
    -
    - Zusätzlich wird die gefundene Drehung auf den aktuellen Scan übernommen, sodass das Bild beim Export entsprechend gedreht wird. Wenn die Option aus ist, wird OCR nur in der aktuellen Ausrichtung ausgeführt und es wird nichts automatisch für den Export gedreht. -
  • -
  • Suche im PDF funktioniert nicht
    - - Prüfe, ob die gewählte Sprache korrekt war; falsche Sprache erzeugt unpassenden erkannten Text.
    - - Alternativ kannst du den OCR-Text auch separat als TXT exportieren. -
  • -
  • Was bedeuten die Erkennungsmodi?
    - In der App kannst du vor der Texterkennung wählen, wie das Bild für Tesseract aufbereitet wird: -
    - - Original (ohne Vorverarbeitung): Am schnellsten. Das Foto wird unverändert an die OCR übergeben. Gut bei bereits sauberen, kontrastreichen Scans; kann blasse oder "schmutzige" Texte übersehen.
    - - OpenCV Schnell: Schnelle, leichte Aufbereitung (Graustufen, leichtes Entrauschen, automatisches Schwarz/Weiß, ggf. etwas Vergrößern). Gute Standardeinstellung für die meisten Fotos – gutes Gleichgewicht aus Tempo und Qualität.
    - - OpenCV Robust: Für schwierige Seiten maximale Genauigkeit (Begradigen/Deskew, Beleuchtung normalisieren, kanten‑erhaltendes Entrauschen, smartes Vergrößern). Liefert ein hochwertiges Graustufenbild für Tesseract. Beste Genauigkeit, aber langsamer und speicherintensiver.
    - Hinweis: Für die meisten Fälle ist „OpenCV Schnell“ empfehlenswert; bei sehr schwierigen Vorlagen „OpenCV Robust“. -
  • -
  • Was macht die Option „OCR‑Nachbearbeitung (häufige Fehler korrigieren)"?
    - Diese Option verbessert den erkannten Text automatisch nach der OCR‑Verarbeitung. Sie ist standardmäßig aktiviert und kann im Dialog „Erkennungsmodus auswählen" ein‑ oder ausgeschaltet werden.
    -
    - Was wird korrigiert?
    - - Zeichen‑Verwechslungen: 0 ↔ O (Null vs. Buchstabe O), 1 ↔ l ↔ I (Eins vs. kleines L vs. großes I), 5 ↔ S, 8 ↔ B, 2 ↔ Z
    - - Ligatur‑Korrekturen: „rn" → „m", „cl" → „d", „vv" → „w" (Zeichenfolgen, die wie andere Buchstaben aussehen)
    - - Kontextbezogene Korrekturen: In Zahlenfolgen werden Buchstaben zu Ziffern korrigiert (z. B. „1O23" → „1023"); in Textpassagen werden Ziffern zu Buchstaben korrigiert (z. B. „H0use" → „House")
    - - Wörterbuch‑basierte Korrektur: Wörter mit niedriger Erkennungssicherheit (unter 70 %) werden gegen ein Wörterbuch geprüft und ggf. ersetzt
    - - Sprachspezifische Korrekturen: Für Deutsch z. B. Korrektur von Umlauten und ß („Strasse" → „Straße")
    -
    - Wann deaktivieren?
    - In den meisten Fällen verbessert die Nachbearbeitung die Textqualität. Es kann jedoch sinnvoll sein, sie zu deaktivieren, wenn der Text viele technische Codes oder Seriennummern enthält, absichtliche Mischungen aus Buchstaben und Zahlen vorkommen oder der Originaltext exakt erhalten bleiben soll. -
  • -
  • Wie verwalte ich Sprachpakete / OCR‑Modelle?
    - - Öffne die OCR‑Ansicht eines Scans und tippe oben rechts auf das Menü (⋮) → „OCR‑Modelle“.
    - - „.traineddata importieren…“: Eine einzelne Tesseract‑Modelldatei vom Gerät/Speicher importieren.
    - - „Sprachpakete entdecken“: Installierte Language‑Pack‑Apps finden (z. B. „MakeACopy OCR Latin (Best)“) und Modelle daraus importieren.
    - - „Best‑Modell löschen“: Ein zuvor importiertes Best‑Modell der aktuell gewählten Sprache entfernen (das integrierte schnelle Modell bleibt erhalten).
    - Tipp: Die App bringt kompakte, schnelle Modelle mit. Für höhere Genauigkeit kannst du optional größere „Best“-Modelle per Language‑Pack installieren (Link oben auf dieser Seite). Eine Internetverbindung ist dafür nicht erforderlich. -
  • -
- -

OCR Review

-
    -
  • Was ist OCR Review?
    - OCR Review ist ein interaktiver Bildschirm, auf dem du den erkannten Text vor dem Export überprüfen und korrigieren kannst. Jedes erkannte Wort wird als Box über dem Dokument angezeigt, mit farbcodierter Konfidenz-Hervorhebung (grün = hohe Konfidenz, rot = niedrige Konfidenz). -
  • -
  • Wie öffne ich OCR Review?
    - Nach Abschluss der OCR-Verarbeitung tippe auf die Schaltfläche „Review" (Stift-Symbol) im OCR-Bildschirm. Dies öffnet den Review-Bildschirm, in dem du die Ergebnisse prüfen und bearbeiten kannst. -
  • -
  • Welche Ansichtsmodi gibt es?
    - Der Review-Bildschirm hat drei Tabs:
    - - Layout: Zeigt Wort-Boxen auf neutralem Hintergrund. Tippe auf ein Wort zum Bearbeiten, halte gedrückt für weitere Optionen.
    - - Document: Zeigt das Original-Scan-Bild mit darüberliegenden Wort-Boxen. Nützlich zum Vergleichen der OCR-Ergebnisse mit dem tatsächlichen Dokument.
    - - Text: Eine reine Texteditor-Ansicht, in der du den gesamten Text direkt bearbeiten kannst. -
  • -
  • Was ist der Unterschied zwischen Tippen und langem Drücken auf ein Wort?
    - Tippen (kurzer Klick): Öffnet den Inline-Bearbeitungsdialog, in dem du:
    - - Den Worttext direkt bearbeiten kannst
    - - Wörterbuch-basierte Vorschläge siehst (falls verfügbar) und auf einen Vorschlag tippen kannst, um ihn anzuwenden
    -
    - Langes Drücken (gedrückt halten): Öffnet ein Kontextmenü mit zusätzlichen Optionen:
    - - Bearbeiten…: Wie Tippen — öffnet den Inline-Bearbeitungsdialog
    - - Mit nächstem zusammenführen: Kombiniert dieses Wort mit dem folgenden Wort zu einem
    - - Teilen: Teilt das Wort in der Mitte in zwei separate Wörter
    - - Löschen: Entfernt das Wort vollständig
    - - Groß-/Kleinschreibung: Ändert die Schreibweise (GROSSBUCHSTABEN, kleinbuchstaben, Titel-Schreibweise)
    - - Sprache…: Legt die Sprache für dieses spezifische Wort fest und führt optional die OCR nur für dieses Wort erneut aus -
  • -
  • Was sind die Wörterbuch-Vorschläge?
    - Wenn du auf ein Wort tippst, um es zu bearbeiten, zeigt die App Vorschläge aus dem Wörterbuch basierend auf der Ähnlichkeit zum aktuellen Wort. Dies hilft, häufige OCR-Fehler zu korrigieren. Tippe auf einen Vorschlags-Chip, um ihn anzuwenden. Vorschläge werden nach Levenshtein-Ähnlichkeit sortiert, mit spezieller Gewichtung für typische OCR-Verwechslungen (0↔O, 1↔l, 5↔S usw.). -
  • -
  • Was macht „Re-OCR"?
    - Im Sprach-Dialog (langes Drücken → Sprache…) kannst du eine andere Sprache auswählen und auf „Re-OCR" tippen. Dies führt die Texterkennung nur für dieses einzelne Wort mit der ausgewählten Sprache erneut aus. Nützlich, wenn ein Wort in einer anderen Schrift (z. B. Persisch in einem englischen Dokument) falsch erkannt wurde. -
  • -
  • Wie speichere ich meine Änderungen?
    - Tippe auf die Schaltfläche „Speichern" am unteren Rand des Review-Bildschirms. Dies übernimmt deine Korrekturen in das OCR-Ergebnis. Wenn du auf „Zurück" oder die X-Schaltfläche tippst und ungespeicherte Änderungen vorliegen, wirst du gefragt, ob du sie verwerfen möchtest. -
  • -
  • Was bedeuten die farbcodierten Boxen?
    - - Grüner/türkiser Rand: Hohe Konfidenz — die OCR-Engine ist ziemlich sicher bei diesem Wort
    - - Roter Rand: Niedrige Konfidenz (unter 60 %) — das Wort sollte manuell überprüft werden
    - - Gelber Rand: Aktuell ausgewähltes Wort -
  • -
- -

Weitere Fragen? Bitte ein Issue eröffnen: github.com/egdels/makeacopy/issues.

- -

Lizenz

- -

MakeACopy ist unter der Apache License 2.0 lizenziert.

- -
-Copyright 2025 Christian Kierdorf
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-    
-
- - diff --git a/docs/index_fr.html b/docs/index_fr.html deleted file mode 100644 index 9a3c812a..00000000 --- a/docs/index_fr.html +++ /dev/null @@ -1,577 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MakeACopy - Application de numérisation de documents - - - - - - - - - -
-

MakeACopy

- -

MakeACopy est une application open source de numérisation de documents pour Android qui vous permet de numériser - des documents papier avec OCR. L’application est conçue dans le respect de la vie privée : elle fonctionne - entièrement hors ligne, sans cloud ni suivi.

- - - -
- Disponible sur F-Droid - Disponible sur Google Play -
- -

Fonctionnalités

-
    -
  • Numérisation avec l’appareil photo : capturez des documents avec la caméra de l’appareil -
  • -
  • Détection des bords : détection automatique des contours du document à l’aide d’OpenCV, éventuellement renforcée par un modèle d’inférence ONNX entraîné sur mesure
  • -
  • Correction de perspective : ajustez et recadrez les documents manuellement ou - automatiquement -
  • -
  • Amélioration d’image : appliquez des filtres (niveaux de gris, contraste, netteté)
  • -
  • OCR : reconnaissance de texte hors ligne avec PaddleOCR dans le flavor paddle publié ; le flavor standard avec Tesseract reste disponible via GitHub Releases
  • -
  • OCR Review : révision et correction interactives des résultats OCR avec édition au niveau - des mots, suggestions basées sur le dictionnaire, mise en évidence de la confiance et re-OCR pour les mots - individuels -
  • -
  • Export PDF : enregistrement en PDF interrogeable avec texte reconnu
  • -
  • Export JPEG : exportez en images JPEG de haute qualité (qualité, couleur/NB configurables) -
  • -
  • Numérisation multipage : combinez plusieurs pages en un seul document ; réorganisez et - gérez les pages avant l’export -
  • -
  • Derniers scans : accédez rapidement à vos numérisations récentes
  • -
  • Mode Inbox : configurez un dossier d'export par défaut (via SAF) pour une numérisation sans friction — les documents sont enregistrés automatiquement sans sélecteur de fichiers, idéal pour les workflows paperless-ngx, Nextcloud ou Syncthing
  • -
  • Partager & Enregistrer : enregistrement local ou partage avec d’autres applications
  • -
  • Mode sombre : thème Material 3 avec support jour/nuit
  • -
  • Respect de la vie privée : 100% hors ligne, aucune connexion Internet requise
  • -
- -

Langues OCR

-

MakeACopy prend en charge l’OCR hors ligne via PaddleOCR dans le flavor paddle publié. Vous pouvez sélectionner la langue ou le groupe d’écriture lors de l’étape - OCR.

-
    -
  • Anglais (Anglais)
  • -
  • Allemand (Latin)
  • -
  • Français (Latin)
  • -
  • Italien (Latin)
  • -
  • Espagnol (Latin)
  • -
  • Portugais (Latin)
  • -
  • Néerlandais (Latin)
  • -
  • Polonais (Latin)
  • -
  • Tchèque (Latin)
  • -
  • Slovaque (Latin)
  • -
  • Hongrois (Latin)
  • -
  • Roumain (Latin)
  • -
  • Danois (Latin)
  • -
  • Norvégien (Latin)
  • -
  • Suédois (Latin)
  • -
  • Turc (Latin)
  • -
  • Chinois (simplifié) (Chinois)
  • -
  • Chinois (traditionnel) (Chinois)
  • -
  • Russe (Slave oriental)
  • -
  • Thaï (Thaï)
  • -
  • Arabe (Arabe)
  • -
  • Persan/Farsi (Arabe)
  • -
  • Hindi (Devanagari)
  • -
  • Grec (Grec)
  • -
-

Remarque : Pour le chinois, l’application inclut des polices CJK adaptées afin d’améliorer le rendu - du texte dans les PDF. Pour l’arabe et le persan, la police Noto Naskh Arabic est incluse afin d’assurer un - rendu correct en écriture RTL (de droite à gauche) lors de l’exportation des PDF. Pour l’hindi, la police Noto Sans Devanagari est incluse pour un rendu correct du devanagari dans les PDF.

- -

Variantes de l’application et moteurs OCR

-

MakeACopy publie le flavor paddle avec PaddleOCR sur F-Droid et Google Play. Le flavor standard avec Tesseract reste disponible pour les utilisateurs qui ont encore besoin des données de langue ou des workflows Tesseract :

-
    -
  • Flavor paddle : la variante publiée avec PaddleOCR uniquement, sans moteur Tesseract ni données de langue Tesseract.
  • -
  • Flavor standard (Tesseract) : la variante basée sur Tesseract avec les APKs optionnels de packs de langues, proposée via GitHub Releases.
  • -
-

Dans le flavor paddle, choisissez dans le fragment OCR l’écriture ou le groupe de langues le plus adapté. Pour les documents en allemand, choisissez par exemple Latin.

- - - - - - - - - - - - - - -
Langue du documentChoix dans le fragment OCR
AnglaisAnglais
Allemand, français, italien, espagnol, portugais, néerlandais, polonais, tchèque, slovaque, hongrois, roumain, danois, norvégien, suédois, turcLatin
Chinois simplifié ou traditionnelChinois
RusseSlave oriental
ThaïThaï
Arabe et persan/farsiArabe
HindiDevanagari
GrecGrec
-

Les liens F-Droid et Google Play pointent vers le flavor paddle. Utilisez GitHub Releases si vous avez besoin du flavor standard avec Tesseract.

- -

Captures d’écran

-

- - - - -

- -

Guide d’utilisation

-
    -
  1. Numériser le document : ouvrez l’application et touchez le bouton de scan pour capturer un - document -
  2. -
  3. Ajuster les coins : peaufinez les bords détectés
  4. -
  5. Recadrer & améliorer : appliquez le recadrage et améliorez l’image si nécessaire
  6. -
  7. Traitement OCR : l’application reconnaît le texte du document
  8. -
  9. Exporter & partager : enregistrez en PDF ou partagez avec d’autres applications
  10. -
- -

Confidentialité

-
    -
  • Aucune connexion Internet requise
  • -
  • Aucune requête serveur ni télémétrie
  • -
  • Traitement OCR local sur votre appareil
  • -
  • Autorisations requises : Appareil photo, Stockage
  • -
  • Aucune connexion à des tiers
  • -
-

Pour plus de détails, consultez notre politique de confidentialité.

- -

Installation

-

F-Droid

-

MakeACopy est disponible sur F-Droid : f-droid.org/packages/de.schliweb.makeacopy. - Pour la conformité F-Droid, tous les composants natifs sont construits à partir des sources : bibliothèques - OpenCV (du - sous-module external/opencv) et ONNX Runtime (XNNPACK et NNAPI, liaisons Java) depuis external/onnxruntime. - Les bibliothèques résultantes sont intégrées à l’application pendant la construction ; aucun binaire précompilé - n’est stocké dans le dépôt.

-

Les fiches F-Droid et Google Play fournissent le flavor paddle. Le flavor standard avec Tesseract est proposé via GitHub Releases.

- -

GitHub Releases

-

Vous pouvez télécharger la dernière APK sur la page Releases. -

- -

Vérification de l’APK

-

Pour vérifier l’authenticité des versions de MakeACopy, comparez l’empreinte du certificat de signature - ci‑dessous avec la sortie de apksigner ou AppVerifier.

- -

SHA-256

-
    -
  • Clé d’upload (GitHub / F-Droid / APKs en sideload)
    - AE:32:2D:3F:B7:1A:FE:21:DF:47:27:E3:7A:5C:68:03:51:1D:5A:2F:E1:FC:31:35:43:0C:EE:06:99:FA:1B:34 -
  • -
  • Clé de signature Google Play (versions Play Store)
    - C0:71:44:39:CB:51:62:32:A4:47:91:7A:6F:C2:28:1E:45:FA:AA:DD:37:F8:30:B1:01:1F:B4:85:68:8E:0D:64 -
  • -
- -

Commandes de vérification

-

-# Avec apksigner (depuis Android SDK build-tools)
-apksigner verify --print-certs MakeACopy-vX.Y.Z.apk
-
-# Avec AppVerifier (https://github.com/soupslurpr/AppVerifier)
-appverifier verify MakeACopy-vX.Y.Z.apk
-
- -

❤️ Soutenir ce projet

-

MakeACopy est gratuit et open source. Si l’application vous est utile, pensez à soutenir le développement :

-

- Ko-fi - PayPal -

- -

FAQ

- -

Numérisation (Caméra)

-
    -
  • L’image est floue / le texte est difficile à lire
    - - Assurez un éclairage suffisant ; évitez une lumière d’ambiance faible et chaude.
    - - Tenez l’appareil bien stable ou appuyez‑le.
    - - Déclenchez l’autofocus en touchant la zone pertinente dans le viseur (si disponible).
    - - Éloignez légèrement l’appareil puis recadrez — être trop proche peut nuire à la mise au point. -
  • -
  • Fortes ombres ou reflets
    - - Éclairez le document uniformément depuis plusieurs côtés.
    - - Évitez les sources directes provoquant des reflets (p. ex. sur papier brillant).
    - - Posez le document sur un fond mat et contrasté. -
  • -
  • L’image est trop sombre/clair
    - - Améliorez l’éclairage.
    - - N’utilisez le flash qu’en cas de besoin — il peut créer des reflets. -
  • -
  • Perspective déformée
    - - Prenez la photo le plus perpendiculairement possible à la surface du document. -
  • -
  • Que signifie le score d’encadrement/qualité ?
    - Le Mode Accessibilité peut annoncer un pourcentage (0–100 %) pendant l’alignement. Cette valeur est un - indicateur de confiance pour la détection des coins : elle dépend (a) de la surface du quadrilatère détecté - dans l’image, (b) du caractère « rectangulaire » des coins (angles proches de 90°) et (c) de la symétrie des - longueurs des côtés opposés.
    -
    - Important : la stabilité sur plusieurs images est utilisée séparément pour garder les annonces discrètes ; - elle ne fait pas partie de ce pourcentage. -
  • -
  • Comment améliorer le score ?
    - - Éclairage homogène et suffisant ; évitez l’éblouissement/les ombres dures.
    - - Tenez le téléphone parallèle à la page ; évitez de le pencher. Gardez une petite marge avec les - quatre coins visibles.
    - - Si vous êtes trop près, reculez légèrement et recadrez ensuite.
    - - Placez le papier sur un fond mat et contrasté.
    - - Restez brièvement immobile pour stabiliser la détection.
    - - Adaptez l’orientation : A4/Letter → souvent portrait ; éléments très larges (tickets/cartes) → essayez - paysage. -
  • -
  • Dois‑je tenir le téléphone en portrait ou en paysage ?
    - A4/Letter : le portrait convient généralement. Éléments très larges (tickets, cartes) : essayez paysage. Les - indications s’adaptent à la façon dont vous tenez le téléphone. -
  • -
  • Que signifient « gauche/droite/haut/bas » en mode - paysage ?
    - Remarque sur la tenue du téléphone (paysage) : l’écran caméra reste en orientation portrait. Les indications - directionnelles (« gauche/droite/haut/bas ») se réfèrent à l’aperçu aligné « à l’endroit ».
    -
    - Si vous tenez le téléphone de côté, selon l’appareil/la version d’Android, - - les indications peuvent rester celles du mode portrait (car l’interface ne passe pas en paysage), ou - - les axes d’analyse internes peuvent suivre la rotation de l’affichage.
    -
    - Si « gauche/droite/haut/bas » semble illogique, revenez en portrait ou faites pivoter le téléphone de 180° - et voyez si les indications deviennent plus cohérentes. -
  • -
  • J’entends constamment « Éloignez‑vous/Move back »
    - L’application supprime les invites de distance sans document clair et limite les répétitions. Améliorez - l’éclairage (utilisez la lampe si besoin), incluez toute la page avec une petite marge, et restez brièvement - immobile. -
  • -
  • L’application suggère‑t‑elle portrait ou paysage ?
    - Oui. En Mode Accessibilité, l’application peut suggérer si le portrait ou le paysage semble mieux convenir à - la page actuelle.
    -
    - Le conseil n’est donné que si - - l’estimation est suffisamment fiable (confiance ≥ 0,30), et - - aucun document plausible n’est actuellement détecté (pour ne pas masquer les indications normales).
    -
    - Pour rester discret, ce conseil passe par la même logique de guidage que les autres annonces (stabilité - brève sur plusieurs images) et il est limité en fréquence. -
  • -
- -

Détection des bords

-
    -
  • Les bords du document sont mal détectés
    - - Assurez un bon contraste entre le document et le fond (par ex. papier clair sur table sombre).
    - - Aplatissez le papier (sans vagues/pliures) et alignez‑le correctement.
    - - Évitez les ombres pouvant être interprétées comme des bords. -
  • -
  • Aucune détection automatique
    - - Reprenez la photo avec un meilleur éclairage.
    - - Utilisez l’ajustement manuel des coins après le scan pour déplacer les points. -
  • -
  • Résultat incliné ou rogné
    - - Après la détection automatique, vérifiez les quatre points et ajustez‑les manuellement si nécessaire.
    -
  • -
- -

OCR (Reconnaissance de texte)

-
    -
  • L’OCR ne reconnaît presque aucun texte
    - - Vérifiez que la langue correcte est sélectionnée.
    - - Numérisez en bonne qualité : image nette, lumière suffisante, peu de bruit.
    - - Évitez les caractères trop petits — remplissez davantage la page ou rapprochez‑vous (sans flou). -
  • -
  • Mauvaise langue / les accents ne sont pas reconnus
    - - Choisissez la langue OCR appropriée dans l’application.
    - - Pour une meilleure précision dans les langues latines, installez le Language Pack : MakeACopy OCR - Latin (Best) (lien Play Store ci‑dessus sur cette page). -
  • -
  • Langues mélangées dans le document
    - - Si possible, numérisez les sections séparément par langue.
    - - Sinon, choisissez la langue principale ; le texte mixte peut réduire la précision. -
  • -
  • L’écriture manuscrite n’est pas reconnue
    - - Tesseract est principalement prévu pour le texte imprimé ; la reconnaissance manuscrite est limitée.
    - - De meilleurs résultats avec une écriture claire et proche de l’imprimé ; sinon, envisagez une - transcription manuelle. -
  • -
  • Mauvaise rotation/orientation de l’OCR
    - - L’application détecte automatiquement l’orientation : elle essaie l’OCR en interne par pas de 90° (0°, - 90°, 180°, 270°) et retient le meilleur résultat. Si la page est déjà bien orientée, elle s’arrête plus tôt - pour gagner du temps.
    - - Si la page est très inclinée, faites-la pivoter avant l’OCR à l’aide des boutons de rotation par pas de - 90°, jusqu’à ce que les lignes de texte soient horizontales.
    - - Évitez une forte perspective ; alignez le document aussi droit que possible. -
  • -
  • Que fait l’option « Rotation automatique OCR (appliquer aussi - à l’export) » ?
    - Lorsqu’elle est activée, l’application exécute l’OCR avec des rotations supplémentaires par pas de 90° (0°, - 90°, 180°, 270°) et choisit le meilleur résultat (selon la confiance moyenne OCR ; en cas d’égalité, selon - la longueur du texte). Si la première tentative (0°) est déjà suffisamment bonne, les rotations restantes - sont ignorées pour gagner du temps.
    -
    - Elle applique aussi la rotation détectée au scan courant, afin que l’image/le PDF exporté soit orienté en - conséquence. Lorsqu’elle est désactivée, l’OCR n’est exécuté que dans l’orientation actuelle et rien n’est - automatiquement pivoté pour l’export. -
  • -
  • La recherche dans le PDF ne fonctionne pas
    - - Vérifiez si la langue sélectionnée est correcte ; une mauvaise langue produit un texte reconnu non - concordant.
    - - Vous pouvez aussi exporter le texte OCR séparément en fichier TXT. -
  • -
  • Que signifient les modes de reconnaissance ?
    - Dans l’application, avant la reconnaissance de texte, vous pouvez choisir comment préparer l’image pour - Tesseract : -
    - - Original (sans prétraitement) : Le plus rapide. La photo est transmise telle quelle à - l’OCR. Idéal pour des scans propres et très contrastés ; peut manquer du texte pâle ou « sale ».
    - - OpenCV Rapide : Prétraitement léger et rapide (niveaux de gris, léger débruitage, - noir/blanc automatique, éventuellement léger agrandissement). Bon réglage par défaut pour la plupart des - photos — bon équilibre entre vitesse et qualité.
    - - OpenCV Robuste : Précision maximale pour des pages difficiles (redressement/deskew, - normalisation de l’éclairage, débruitage préservant les contours, agrandissement intelligent). Produit une - image en niveaux de gris de haute qualité pour Tesseract. Meilleure précision, mais plus lent et plus - gourmand en mémoire.
    - Remarque : Pour la plupart des cas, « OpenCV Rapide » est recommandé ; pour des pages très - difficiles, utilisez « OpenCV Robuste ». -
  • -
  • Que fait l'option « Post‑traitement OCR (corriger les erreurs - courantes) » ?
    - Cette option améliore automatiquement le texte reconnu après le traitement OCR. Elle est activée par défaut - et peut être activée/désactivée dans le dialogue « Choisir le mode de reconnaissance ».
    -
    - Qu'est‑ce qui est corrigé ?
    - - Confusions de caractères : 0 ↔ O (zéro vs. lettre O), 1 ↔ l ↔ I (un vs. L minuscule vs. I - majuscule), 5 ↔ S, 8 ↔ B, 2 ↔ Z
    - - Corrections de ligatures : « rn » → « m », « cl » → « d », « vv » → « w » (séquences de - caractères ressemblant à d'autres lettres)
    - - Corrections contextuelles : Dans les séquences numériques, les lettres sont corrigées en chiffres - (p. ex. « 1O23 » → « 1023 ») ; dans les passages de texte, les chiffres sont corrigés en lettres (p. ex. « - H0use » → « House »)
    - - Correction basée sur le dictionnaire : Les mots avec une faible confiance de reconnaissance - (inférieure à 70 %) sont vérifiés dans un dictionnaire et remplacés si une correspondance est trouvée
    - - Corrections spécifiques à la langue : Pour l'allemand, p. ex. correction des trémas et du ß (« - Strasse » → « Straße »)
    -
    - Quand désactiver ?
    - Dans la plupart des cas, le post‑traitement améliore la qualité du texte. Cependant, il peut être utile de - le désactiver si le texte contient de nombreux codes techniques ou numéros de série, des mélanges - intentionnels de lettres et de chiffres, ou si le texte original doit être préservé exactement. -
  • -
  • Comment gérer les packs de langue / modèles OCR ?
    - - Ouvrez la vue OCR d’un scan et touchez le menu (⋮) → « Modèles OCR ».
    - - « Importer .traineddata… » : importer un fichier modèle Tesseract unique depuis l’appareil/le stockage. -
    - - « Découvrir les packs de langue » : trouver les applications Language‑Pack installées (p. ex. « MakeACopy - OCR Latin (Best) ») et y importer des modèles.
    - - « Supprimer le modèle Best » : retirer un modèle Best précédemment importé pour la langue actuellement - sélectionnée (le modèle rapide intégré reste disponible).
    - Astuce : L’application inclut des modèles compacts et rapides. Pour une meilleure précision, vous - pouvez installer en option des modèles « Best » plus volumineux via un Language‑Pack (lien en haut de cette - page). Aucune connexion Internet n’est requise. -
  • -
- -

Révision OCR

-
    -
  • Qu’est-ce que la révision OCR ?
    - La révision OCR est un écran interactif qui te permet de vérifier et corriger le texte reconnu avant - l’export. Chaque mot reconnu est affiché sous forme de cadre superposé au document, avec un code couleur - indiquant le niveau de confiance (vert = confiance élevée, rouge = confiance faible). -
  • -
  • Comment ouvrir la révision OCR ?
    - Une fois le traitement OCR terminé, appuie sur le bouton « Révision » (icône stylo) dans l’écran - OCR. Cela ouvre l’écran de révision, où tu peux examiner et modifier les résultats. -
  • -
  • Quels sont les différents modes d’affichage ?
    - L’écran de révision comporte trois onglets :
    - - Mise en page : affiche les cadres des mots sur un fond neutre. Appuie sur un mot pour le - modifier, appui long pour plus d’options.
    - - Document : affiche l’image scannée originale avec les cadres des mots superposés. Utile - pour comparer les résultats OCR avec le document réel.
    - - Texte : vue d’éditeur de texte simple permettant de modifier directement l’ensemble du - texte. -
  • -
  • Quelle est la différence entre un appui et un appui long sur un - mot ?
    - Appui (clic court) : ouvre la boîte de dialogue d’édition intégrée, où tu peux :
    - - Modifier directement le texte du mot
    - - Voir les suggestions basées sur le dictionnaire (si disponibles) et en sélectionner une pour - l’appliquer
    -
    - Appui long (maintenir) : ouvre un menu contextuel avec des options - supplémentaires :
    - - Modifier… : identique à l’appui — ouvre la boîte de dialogue d’édition intégrée
    - - Fusionner avec le suivant : combine ce mot avec le mot suivant en un seul
    - - Diviser : coupe le mot en deux parties distinctes
    - - Supprimer : supprime complètement le mot
    - - Casse : modifier la capitalisation (MAJUSCULES, minuscules, Casse Titre)
    - - Langue… : définir la langue pour ce mot spécifique et relancer éventuellement l’OCR uniquement - pour ce mot -
  • -
  • Que sont les suggestions du dictionnaire ?
    - Lorsque tu appuies sur un mot pour le modifier, l’application affiche des suggestions issues du - dictionnaire, basées sur la similarité avec le mot actuel. Cela aide à corriger les erreurs OCR courantes. - Appuie sur une suggestion pour l’appliquer. Les suggestions sont classées selon la distance de Levenshtein, - avec une pondération spécifique pour les confusions OCR typiques (0↔O, 1↔l, 5↔S, etc.). -
  • -
  • Que fait « Relancer l’OCR » ?
    - Dans la boîte de dialogue de langue (appui long → Langue…), tu peux sélectionner une autre langue et appuyer - sur « Relancer l’OCR ». Cela relance la reconnaissance de texte uniquement pour ce mot, en - utilisant la langue sélectionnée. Utile lorsqu’un mot dans une autre écriture (par exemple du persan dans un - document anglais) a été mal reconnu. -
  • -
  • Comment enregistrer mes modifications ?
    - Appuie sur le bouton « Enregistrer » en bas de l’écran de révision. Cela applique tes corrections - au résultat OCR. Si tu appuies sur « Retour » ou sur le bouton X alors que des modifications ne - sont pas enregistrées, l’application te demandera si tu souhaites les ignorer. -
  • -
  • Que signifient les cadres en couleur ?
    - - Contour vert/turquoise : confiance élevée — le moteur OCR est relativement sûr de ce - mot
    - - Contour rouge : confiance faible (inférieure à 60 %) — le mot peut nécessiter une - vérification manuelle
    - - Contour jaune : mot actuellement sélectionné -
  • -
- -

Plus de questions ? Ouvrez un ticket : github.com/egdels/makeacopy/issues. -

- -

Licence

-

MakeACopy est sous licence Apache License 2.0.

- -
-Copyright 2025 Christian Kierdorf
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-    
-
- - diff --git a/docs/og/makeacopy-1200x630.png b/docs/og/makeacopy-1200x630.png deleted file mode 100644 index f40832a9..00000000 Binary files a/docs/og/makeacopy-1200x630.png and /dev/null differ diff --git a/docs/privacy.html b/docs/privacy.html deleted file mode 100644 index 1273a1fc..00000000 --- a/docs/privacy.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Privacy Policy - MakeACopy - - - - - - - - - - -
-

Privacy Policy

- -

Last updated: July 29, 2025

- -

Introduction

- -

This Privacy Policy explains how MakeACopy handles your data. MakeACopy is designed with privacy as a core principle, operating completely offline and without collecting any personal data.

- -

Summary

- -
    -
  • MakeACopy operates 100% offline
  • -
  • No data collection or transmission to servers
  • -
  • No analytics or tracking
  • -
  • No advertising
  • -
  • All processing happens locally on your device
  • -
- -

Information We Don't Collect

- -

MakeACopy does not collect, store, or transmit:

- -
    -
  • Personal information
  • -
  • Usage statistics
  • -
  • Device information
  • -
  • Location data
  • -
  • Network information
  • -
  • Any other identifiable data
  • -
- -

App Permissions

- -

MakeACopy requires the following permissions:

- -
    -
  1. Camera: Required to capture images of documents. Images are processed locally and are not sent to any server.
  2. -
  3. Storage: Required to save processed documents and exported PDFs to your device. All files are stored locally on your device and are not uploaded anywhere.
  4. -
- -

Third-Party Services

- -

MakeACopy does not integrate with any third-party services, analytics tools, or advertising networks. There are no embedded trackers or data collection mechanisms.

- -

Data Storage

- -

All data (images, processed documents, and PDFs) is stored locally on your device. You have complete control over this data through your device's file management system.

- -

Changes to This Privacy Policy

- -

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page and updating the "Last updated" date.

- -

Contact Us

- -

If you have any questions about this Privacy Policy, please contact us:

- - - -

Open Source

- -

MakeACopy is open-source software. You can review the source code at https://github.com/egdels/makeacopy to verify our privacy practices.

- - -
- - \ No newline at end of file diff --git a/docs/privacy_de.html b/docs/privacy_de.html deleted file mode 100644 index 72dff12e..00000000 --- a/docs/privacy_de.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Datenschutzerklärung - MakeACopy - - - - - - - - - - -
-

Datenschutzerklärung

- -

Zuletzt aktualisiert: 29. Juli 2025

- -

Einleitung

- -

Diese Datenschutzerklärung erläutert, wie MakeACopy mit Ihren Daten umgeht. MakeACopy wurde mit Datenschutz als Grundprinzip entwickelt und arbeitet vollständig offline, ohne persönliche Daten zu sammeln.

- -

Zusammenfassung

- -
    -
  • MakeACopy arbeitet 100% offline
  • -
  • Keine Datenerfassung oder Übertragung an Server
  • -
  • Keine Analyse oder Tracking
  • -
  • Keine Werbung
  • -
  • Alle Verarbeitungen finden lokal auf Ihrem Gerät statt
  • -
- -

Informationen, die wir nicht sammeln

- -

MakeACopy sammelt, speichert oder überträgt nicht:

- -
    -
  • Persönliche Informationen
  • -
  • Nutzungsstatistiken
  • -
  • Geräteinformationen
  • -
  • Standortdaten
  • -
  • Netzwerkinformationen
  • -
  • Andere identifizierbare Daten
  • -
- -

App-Berechtigungen

- -

MakeACopy benötigt die folgenden Berechtigungen:

- -
    -
  1. Kamera: Erforderlich, um Bilder von Dokumenten aufzunehmen. Bilder werden lokal verarbeitet und nicht an einen Server gesendet.
  2. -
  3. Speicher: Erforderlich, um verarbeitete Dokumente und exportierte PDFs auf Ihrem Gerät zu speichern. Alle Dateien werden lokal auf Ihrem Gerät gespeichert und nirgendwo hochgeladen.
  4. -
- -

Drittanbieterdienste

- -

MakeACopy ist nicht mit Drittanbieterdiensten, Analysetools oder Werbenetzwerken integriert. Es gibt keine eingebetteten Tracker oder Datenerfassungsmechanismen.

- -

Datenspeicherung

- -

Alle Daten (Bilder, verarbeitete Dokumente und PDFs) werden lokal auf Ihrem Gerät gespeichert. Sie haben die vollständige Kontrolle über diese Daten über das Dateiverwaltungssystem Ihres Geräts.

- -

Änderungen dieser Datenschutzerklärung

- -

Wir können unsere Datenschutzerklärung von Zeit zu Zeit aktualisieren. Wir werden Sie über Änderungen informieren, indem wir die neue Datenschutzerklärung auf dieser Seite veröffentlichen und das Datum "Zuletzt aktualisiert" aktualisieren.

- -

Kontaktieren Sie uns

- -

Wenn Sie Fragen zu dieser Datenschutzerklärung haben, kontaktieren Sie uns bitte:

- - - -

Open Source

- -

MakeACopy ist Open-Source-Software. Sie können den Quellcode unter https://github.com/egdels/makeacopy überprüfen, um unsere Datenschutzpraktiken zu verifizieren.

- - -
- - \ No newline at end of file diff --git a/docs/privacy_fr.html b/docs/privacy_fr.html deleted file mode 100644 index a147d58d..00000000 --- a/docs/privacy_fr.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - Politique de confidentialité - MakeACopy - - - - - - - - - - -
-

Politique de confidentialité

- -

Dernière mise à jour: 29 juillet 2025

- -

Introduction

- -

La présente politique de confidentialité explique comment MakeACopy gère vos données. MakeACopy est conçu avec la confidentialité comme principe fondamental: l'application fonctionne entièrement hors ligne et ne collecte aucune donnée personnelle.

- -

Résumé

- -
    -
  • MakeACopy fonctionne 100% hors ligne
  • -
  • Aucune collecte de données ni transmission vers des serveurs
  • -
  • Pas d'analyse ni de pistage
  • -
  • Aucune publicité
  • -
  • Tous les traitements ont lieu localement sur votre appareil
  • -
- -

Données que nous ne collectons pas

- -

MakeACopy ne collecte, ne stocke et ne transmet pas:

- -
    -
  • Informations personnelles
  • -
  • Statistiques d'utilisation
  • -
  • Informations sur l'appareil
  • -
  • Données de localisation
  • -
  • Informations réseau
  • -
  • Toute autre donnée identifiable
  • -
- -

Autorisations de l'application

- -

MakeACopy requiert les autorisations suivantes:

- -
    -
  1. Caméra: nécessaire pour capturer des images de documents. Les images sont traitées localement et ne sont envoyées à aucun serveur.
  2. -
  3. Stockage: nécessaire pour enregistrer les documents traités et les PDF exportés sur votre appareil. Tous les fichiers sont stockés localement sur votre appareil et ne sont pas téléversés.
  4. -
- -

Services tiers

- -

MakeACopy n'intègre aucun service tiers, outil d'analyse ou réseau publicitaire. Il n'y a aucun traqueur intégré ni mécanisme de collecte de données.

- -

Stockage des données

- -

Toutes les données (images, documents traités et PDF) sont stockées localement sur votre appareil. Vous avez le contrôle total de ces données via le gestionnaire de fichiers de votre appareil.

- -

Modifications de la présente politique de confidentialité

- -

Nous pouvons mettre à jour notre politique de confidentialité de temps à autre. Nous vous informerons de tout changement en publiant la nouvelle politique sur cette page et en mettant à jour la date "Dernière mise à jour".

- -

Contact

- -

Si vous avez des questions concernant cette politique de confidentialité, veuillez nous contacter:

- - - -

Open Source

- -

MakeACopy est un logiciel open source. Vous pouvez consulter le code source sur https://github.com/egdels/makeacopy afin de vérifier nos pratiques en matière de confidentialité.

- - -
- - \ No newline at end of file