V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Gdao3386
V2EX  ›  程序员

开源一个安卓项目,基于视频流的实时 ocr 识别。

  •  
  •   Gdao3386 · 3 小时 34 分钟前 · 117 次点击

    TextFinder - 实时文字查找神器

    🎥 对准摄像头,输入关键词,瞬间定位目标文字

    Android API Kotlin License


    📖 项目简介

    TextFinder 是一款基于 Android 的实时文字识别与定位应用。只需将摄像头对准任何包含文字的场景,输入你想查找的关键词,应用会实时高亮显示所有匹配的文字区域。

    🎯 设计初衷

    这个项目诞生于一个实际需求:帮助集运仓库工作人员快速找到快递包裹

    在繁忙的集运仓库中,工作人员经常需要在一堆包裹中找到特定客户的快递。传统方式是逐个翻看面单上的收件人信息,效率低下且容易遗漏。TextFinder 的出现彻底改变了这一工作流程:

    🔲 对准包裹堆 → 🔍 输入客户姓名/单号 → ✅ 瞬间定位目标包裹


    ✨ 功能特性

    特性 描述
    🔴 实时高亮 匹配的文字区域以红色边框实时标注,一目了然
    🌐 中英文支持 基于 Google ML Kit 中文识别引擎,完美支持中文、英文及混合文本
    极速响应 采用帧级处理优化,搜索结果即时呈现
    📱 简洁界面 极简设计,打开即用,零学习成本
    🔒 本地处理 所有文字识别在设备端完成,无需联网,保护隐私

    使用场景

    • 📦 物流仓储:快速定位特定客户的包裹
    • 📚 图书馆/书店:在书架上快速找到目标书籍
    • 📄 文档整理:在成堆文件中定位特定内容
    • 🏪 零售场景:在货架上快速找到特定商品
    • 🎓 学习场景:在教材/资料中快速定位知识点

    🛠 技术架构

    核心技术栈

    ┌─────────────────────────────────────────────────────────────┐
    │                      TextFinder 架构                         │
    ├─────────────────────────────────────────────────────────────┤
    │                                                             │
    │  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
    │  │  CameraX    │───▶│  ML Kit     │───▶│ OverlayView │     │
    │  │  (预览流)    │    │  (OCR 识别)   │    │  (结果渲染)  │     │
    │  └─────────────┘    └─────────────┘    └─────────────┘     │
    │         │                  │                   │            │
    │         ▼                  ▼                   ▼            │
    │  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
    │  │ PreviewView │    │ TextRecognizer│   │ Canvas 绘制  │     │
    │  │ (显示画面)   │    │ (中文模型)    │    │ (红色边框)   │     │
    │  └─────────────┘    └─────────────┘    └─────────────┘     │
    │                                                             │
    └─────────────────────────────────────────────────────────────┘
    

    技术选型

    组件 技术方案 选择理由
    相机框架 CameraX Jetpack 官方相机库,生命周期感知,兼容性强
    OCR 引擎 ML Kit Text Recognition (Chinese) Google 端侧 OCR ,中文识别精准,离线可用
    UI 框架 Kotlin + ViewBinding 原生性能,类型安全,开发效率高
    异步处理 ExecutorService + Callback 避免阻塞主线程,保证 UI 流畅

    📐 实现原理

    1. 实时文字识别流程

    摄像头帧 → 图像预处理 → ML Kit OCR → 文字块解析 → 关键词匹配 → 坐标映射 → 界面渲染
        │           │            │            │            │            │           │
        ▼           ▼            ▼            ▼            ▼            ▼           ▼
     ImageProxy  旋转校正   TextRecognizer  TextBlock   contains()  坐标变换   drawRect()
    

    2. 关键技术点

    帧级处理优化

    // 使用 AtomicBoolean 避免重复处理,跳过积压帧
    private val isProcessing = AtomicBoolean(false)
    
    if (!isProcessing.compareAndSet(false, true)) {
        imageProxy.close()  // 跳过,正在处理中
        return
    }
    

    坐标映射算法

    PreviewView 使用 fillCenter (CENTER_CROP) 模式,需要精确映射 OCR 坐标到视图坐标:

    // 复刻 CENTER_CROP 变换逻辑
    val scale = maxOf(viewWidth / imageWidth, viewHeight / imageHeight)
    val offsetX = (viewWidth - imageWidth * scale) / 2f
    val offsetY = (viewHeight - imageHeight * scale) / 2f
    
    // 映射坐标
    mappedRect.set(
        box.left   * scale + offsetX,
        box.top    * scale + offsetY,
        box.right  * scale + offsetX,
        box.bottom * scale + offsetY
    )
    

    多级匹配策略

    应用在 Block → Line → Element 三个层级进行匹配,确保无论目标文字是整段、一行还是单个词,都能被准确捕获。


    🚀 快速开始

    环境要求

    • Android Studio Hedgehog 或更高版本
    • Android SDK 34
    • Kotlin 1.9+
    • 最低支持 Android 8.0 (API 26)

    构建步骤

    # 克隆项目
    git clone https://github.com/xiaolan66/TextFinder.git
    
    # 打开 Android Studio ,导入项目
    # 等待 Gradle 同步完成
    
    # 连接 Android 设备或启动模拟器
    # 点击 Run 按钮即可
    

    权限说明

    应用仅需 摄像头权限,首次启动时会自动请求。所有数据处理均在本地完成,不收集任何用户信息。


    📁 项目结构

    app/src/main/java/com/example/textfinder/
    ├── MainActivity.kt      # 主界面逻辑:相机启动、OCR 调用、搜索匹配
    └── OverlayView.kt       # 自定义视图:坐标映射、边框绘制
    
    app/src/main/res/layout/
    └── activity_main.xml    # 界面布局:搜索栏、相机预览、叠加层
    

    🎨 界面预览

    ┌─────────────────────────────────┐
    │ 🔍 输入要查找的文字...      [×] │  ← 搜索栏
    ├─────────────────────────────────┤
    │                                 │
    │    ┌─────────────┐              │
    │    │  客户: 张三  │              │  ← 匹配项
    │    │  ┌───────┐  │              │    红色边框高亮
    │    │  │李四   │  │              │
    │    │  └───────┘  │              │
    │    │  客户: 张三  │              │
    │    └─────────────┘              │
    │                                 │
    │         ✅ 找到 2 处匹配         │  ← 状态提示
    └─────────────────────────────────┘
    

    🔧 扩展方向

    • 支持连续多关键词搜索
    • 添加历史搜索记录
    • 支持语音输入关键词
    • 增加夜间模式
    • 支持导出识别结果

    📄 开源协议

    本项目采用 MIT License 开源协议。


    💼 商业合作

    如果你对 TextFinder 感兴趣,欢迎在商业层面进行探索与合作:

    微信:URlake

    可能的合作方向:

    • 企业定制开发
    • 功能深度定制
    • 技术咨询与培训
    • SDK 授权集成

    ⭐ 如果这个项目对你有帮助,请给一个 Star 支持!

    Made with ❤️ by xiaolan66

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:00 · PVG 04:00 · LAX 13:00 · JFK 16:00
    ♥ Do have faith in what you're doing.