baidu_ocr_probe.dart 1.96 KB
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();
}