构建时会通过 download-tflite.gradle.kts 自动下载分割模型,需联网;OCR 依赖 Tesseract,构建环境需能获取相应依赖;通过 intent 调用返回的 PDF URI 生命周期有限,调用方需立即复制内容。
FairScan
pynicolasGPL-3.0活跃维护一款注重隐私的 Android 文档扫描应用,用 OpenCV 和 TFLite 做图像分割与处理,把纸质文件拍成清晰的 PDF,全程本地完成不上传。
An Android app to scan your documents — simple and respectful
./gradlew clean check assembleRelease需运行 Android 8.0+ 且带摄像头的设备;README 未说明 CPU/GPU 或显存要求。
开源安卓文档扫描应用,几秒生成干净可分享的 PDF,本地处理不追踪
一款注重隐私的 Android 文档扫描应用,用 OpenCV 和 TFLite 做图像分割与处理,把纸质文件拍成清晰的 PDF,全程本地完成不上传。
核心能力
- 用自定义分割模型自动检测文档边界
- 自动做透视校正与图像增强
- 本地生成 PDF,无需手动调整
- 所有处理在设备端完成,不上传云端
- 权限极少、无广告无追踪,GPLv3 开源
容易踩的坑
- v2.3.0最新正式版2026-09-20 · 2026-09-20 16:03 UTC
What's Changed
- New color mode: Black and white. This produces very small PDF files. Huge thanks to @toolicious for this contribution, especially for the advanced binarization algorithm. See issue #150 and pull request #229.
- New app translations:
- Persian by @RZHSSNZDH (291ad0f)
- Tamil by @TamilNeram (15a5361)
Full Changelog: https://github.com/pynicolas/FairScan/compare/v2.2.0...v2.3.0
- v2.2.02026-07-19 · 2026-07-19 16:08 UTC
查看更新说明
What's Changed
- New app translations:
- Hungarian translation by @isti03 (https://github.com/pynicolas/FairScan/pull/209)
- Estonian translation by Priit Jõerüüt (https://github.com/pynicolas/FairScan/pull/215)
- Latvian translation by @Coool (https://github.com/pynicolas/FairScan/pull/220)
- Indonesian translation by @ihfandica (https://github.com/pynicolas/FairScan/pull/223)
- Improve document detection:
- Ignore detected quad when a corner is outside the frame (https://github.com/pynicolas/FairScan/pull/217)
- Reduce false-positive quads when importing photos (https://github.com/pynicolas/FairScan/pull/225)
Full Changelog: https://github.com/pynicolas/FairScan/compare/v2.1.0...v2.2.0
- New app translations:
- v2.1.02026-06-26 · 2026-06-26 13:36 UTC
查看更新说明
What's Changed
- Explicit choice on startup: resume current scan or start new (#204)
- Trigger capture with the volume buttons (#206), including from a remote control
- Import photos: the image picker now includes a "Browse" option (#207)
Bug fixes
- Manual crop: preserve the edited quad across device rotations (#195)
- Avoid a crash when tapping a link in the About screen if no app can open it (522dd5a)
Full Changelog: https://github.com/pynicolas/FairScan/compare/v2.0.0...v2.1.0
- v2.0.02026-06-13 · 2026-06-13 19:54 UTC
查看更新说明
What's New
- Create searchable PDFs with text recognition (OCR) (#27). Go to the Settings screen to download language files and enable OCR.
Other changes
- Revamp style of the Settings screen (#199)
- Fix system gesture triggering when editing quad corners. by @PhilLab in https://github.com/pynicolas/FairScan/pull/194
Note: FairScan now uses the INTERNET permission to download optional OCR language files. All document processing remains local to your device.
Full Changelog: https://github.com/pynicolas/FairScan/compare/v1.23.0...v2.0.0
- v1.23.02026-05-31 · 2026-05-31 07:24 UTC
查看更新说明
What's Changed
- Scan documents directly from compatible apps and web forms (#137). You can now use FairScan whenever an Android app requests a PDF document. This includes file upload forms in browsers such as Chrome and Firefox.
Full Changelog: https://github.com/pynicolas/FairScan/compare/v1.22.1...v1.23.0
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
FairScan is an Android app to scan documents quickly, easily and privately.
It's designed to be simple: users get a clean, shareable PDF in seconds, with no manual adjustments. And respectful: open source, minimal permissions, no tracking, no ads.
- Website: https://fairscan.org
- Blog: https://fairscan.org/blog/
Contributing
Contributions are welcome, but please read the guidelines first: CONTRIBUTING.md
Translations
Translations are managed on Weblate, and everyone is welcome to contribute.
Start translating: https://hosted.weblate.org/projects/fairscan/
Screenshots
| Scan | Preview | Save & Share |
|---|---|---|
![]() | ![]() | ![]() |
Features
- Clear, distraction-free interface
- Easy flow: scan, review if needed, save or share
- Automatic document detection using a custom segmentation model
- Automatic perspective correction
- Automatic image enhancement
- Fast PDF generation with no manual adjustments
- All document processing happens locally on your device, no cloud processing
- Minimal permissions
- Open source, GPLv3
What FairScan is not
FairScan is not intended to:
- provide fine-grained manual control over document processing
- replicate all features found in other scanning apps
- optimize for highly specific use cases at the expense of simplicity
Compatibility
FairScan works on any device that:
- runs Android 8.0+
- has a camera
Experimental: Scan to PDF via intent
FairScan can be invoked by other Android applications to perform a document scan and return a generated PDF.
This feature is experimental and intended for developers who want to rely on FairScan as a simple, privacy-respecting scanning tool. The intent contract and behavior may change between versions, and backward compatibility is not guaranteed at this stage.
Intent action: org.fairscan.app.action.SCAN_TO_PDF
This is an implicit intent that launches FairScan in a dedicated external mode.
When started via this intent:
- FairScan opens directly in scan mode
- the user scans one or more pages
- FairScan generates a single PDF
- the resulting PDF is returned to the calling application as a URI with a limited lifetime
- the calling application should immediately copy the content of the URI as FairScan deletes it later
See an example app: fairscan-intent-sample
Technical details
FairScan uses:
- Jetpack Compose for the UI
- CameraX for image capture
- LiteRT to run the custom segmentation model for automatic document detection
- OpenCV for perspective correction and image enhancement
- Tesseract for text recognition (OCR)
- PDFBox-Android for PDF generation
The segmentation model
FairScan uses a custom-trained image segmentation model to detect documents: https://github.com/pynicolas/fairscan-segmentation-model
It's based on a fully public dataset that is available here: https://github.com/pynicolas/fairscan-dataset
The build system automatically downloads the model using
download-tflite.gradle.kts.
Related blog posts:
Build
To build an APK:
./gradlew clean check assembleRelease
To build an Android App Bundle:
./gradlew clean check :app:bundleRelease
License
This project is licensed under the GNU GPLv3. See LICENSE for details.


