使用 Dart 和 Flutter 构建验证码识别应用(基于 Tesseract OCR)

一、项目概述
我们将构建一个 Flutter 应用,用户可以上传验证码图像,应用内部调用 Tesseract 引擎识别出其中的英文字母和数字。

更多内容访问ttocr.com或联系1436423940

二、技术准备

  1. 安装 Flutter
    官网:https://flutter.dev

flutter doctor
确保 Flutter 和 Dart 环境已配置。

  1. 创建项目

flutter create captcha_ocr_flutter
cd captcha_ocr_flutter
3. 安装依赖插件
编辑 pubspec.yaml 添加:

dependencies:
flutter:
sdk: flutter
image_picker: ^1.0.4
tesseract_ocr: ^0.3.1
path_provider: ^2.1.1
permission_handler: ^11.0.1
三、iOS & Android 原生配置提示(如需部署到手机)
Android 需开启权限读取外部存储

iOS 需修改 Info.plist 增加摄像头与图库权限(不赘述,如需可提供)

四、主界面代码示例
编辑 lib/main.dart:

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:tesseract_ocr/tesseract_ocr.dart';
import 'dart:io';
import 'package:permission_handler/permission_handler.dart';

void main() {
runApp(CaptchaOCRApp());
}

class CaptchaOCRApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '验证码识别',
theme: ThemeData(primarySwatch: Colors.blue),
home: CaptchaHomePage(),
);
}
}

class CaptchaHomePage extends StatefulWidget {
@override
_CaptchaHomePageState createState() => _CaptchaHomePageState();
}

class _CaptchaHomePageState extends State {
File? _imageFile;
String _recognizedText = '';

Future _pickImage() async {
final picker = ImagePicker();
final picked = await picker.pickImage(source: ImageSource.gallery);
if (picked != null) {
setState(() {
_imageFile = File(picked.path);
_recognizedText = '';
});
}
}

Future _performOCR() async {
if (_imageFile == null) return;
final text = await TesseractOcr.extractText(
_imageFile!.path,
language: 'eng',
args: {
'tessedit_char_whitelist': 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'psm': '7',
},
);

final cleaned = text.replaceAll(RegExp(r'[^A-Za-z0-9]'), '');

setState(() {
  _recognizedText = cleaned;
});

}

@override
void initState() {
super.initState();
Permission.storage.request();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('验证码识别(Flutter + Tesseract)')),
body: Padding(
padding: const EdgeInsets.all(20),
child: Column(
children: [
if (_imageFile != null)
Image.file(_imageFile!, height: 150),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _pickImage,
child: Text('上传验证码图像'),
),
ElevatedButton(
onPressed: _performOCR,
child: Text('识别'),
),
const SizedBox(height: 20),
Text(
'识别结果:$_recognizedText',
style: TextStyle(fontSize: 18, color: Colors.green),
)
],
),
),
);
}
}
五、运行演示

flutter run
在模拟器或真机运行后,选择验证码图像,即可识别其文字内容。

输出示例:

识别结果:T7X2B

posted @ 2025-07-05 20:06  ttocr、com  阅读(48)  评论(0)    收藏  举报