baidu_ocr_probe.dart
1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import 'dart:convert';
import 'dart:io';
Future<void> main(List<String> args) async {
if (args.length < 2) {
print('用法: dart run tool/baidu_ocr_probe.dart <API_KEY> <SECRET_KEY> [图片路径]');
return;
}
final String apiKey = args[0];
final String secretKey = args[1];
final String imagePath = args.length > 2
? args[2]
: '/Users/wangdongni/Desktop/微信图片_2026-09-22_104305_553.jpg';
final HttpClient client = HttpClient();
final String tokenUri = 'https://aip.baidubce.com/oauth/2.0/token'
'?grant_type=client_credentials'
'&client_id=${Uri.encodeComponent(apiKey)}'
'&client_secret=${Uri.encodeComponent(secretKey)}';
final HttpClientRequest tokenReq = await client.postUrl(Uri.parse(tokenUri));
tokenReq.headers.set('Content-Type', 'application/x-www-form-urlencoded');
final HttpClientResponse tokenRes = await tokenReq.close();
final Map<String, dynamic> tokenData =
jsonDecode(await tokenRes.transform(utf8.decoder).join()) as Map<String, dynamic>;
final String accessToken = tokenData['access_token']?.toString() ?? '';
if (accessToken.isEmpty) {
print('获取 access_token 失败: $tokenData');
client.close();
return;
}
print('access_token 获取成功: ${accessToken.substring(0, 12)}...');
final List<int> bytes = await File(imagePath).readAsBytes();
final String encodedImage = Uri.encodeComponent(base64Encode(bytes));
final String ocrUri = 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic'
'?access_token=${Uri.encodeComponent(accessToken)}';
final HttpClientRequest ocrReq = await client.postUrl(Uri.parse(ocrUri));
ocrReq.headers.set('Content-Type', 'application/x-www-form-urlencoded');
ocrReq.write('image=$encodedImage&language_type=CHN_ENG&detect_direction=true');
final HttpClientResponse ocrRes = await ocrReq.close();
final String body = await ocrRes.transform(utf8.decoder).join();
print('HTTP ${ocrRes.statusCode}');
print(body);
client.close();
}