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.
Features
- Camera Scanning: Capture documents using the device camera
- Edge Detection: Automatic document edge detection using OpenCV, enhanced with an ONNX model (DocAligner)
- Perspective Correction: Adjust and crop documents with manual or automatic perspective correction
- Image Enhancement: Apply filters (grayscale, contrast, sharpening)
- OCR: Offline text recognition with Tesseract
- 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
- 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 Tesseract. You can select the language during the OCR step.
- English (
eng)
- German (
deu)
- French (
fra)
- Italian (
ita)
- Spanish (
spa)
- Portuguese (
por)
- Dutch (
nld)
- Polish (
pol)
- Czech (
ces)
- Slovak (
slk)
- Hungarian (
hun)
- Romanian (
ron)
- Danish (
dan)
- Norwegian (
nor)
- Swedish (
swe)
- Chinese (Simplified) (
chi_sim)
- Chinese (Traditional) (
chi_tra)
- Russian (
rus)
- Thai (
tha)
Besides the optional Language-Pack APKs, you can also add the original Tesseract best models from the official repository: tessdata_best. See the Tesseract project at github.com/tesseract-ocr/tesseract.
Language-Pack APK: MakeACopy OCR Latin (Best) – includes high-accuracy models for English (eng), German (deu), French (fra), Italian (ita), Spanish (spa), Portuguese (por), Dutch (nld), Polish (pol), Czech (ces), Slovak (slk), Hungarian (hun), Romanian (ron), Danish (dan), Norwegian (nor), and Swedish (swe). Download from the Language-Pack release page.
Note: For Chinese, the app includes suitable CJK fonts to improve PDF text rendering.
Screenshots
How to Use
- Scan Document: Open the app and tap the scan button to capture a document
- Adjust Corners: Fine-tune the detected document edges
- Crop & Enhance: Apply the crop and enhance the image if needed
- OCR Processing: The app will recognize text in the document
- Export & Share: Save as PDF or share with other apps
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.
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:
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.
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.
- 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”.
- 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.
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.