tencent_ocr_probe.dart
2.71 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import 'dart:convert';
import 'dart:io';
import 'package:crypto/crypto.dart';
Future<void> main(List<String> args) async {
const secretId = 'AKID9Vgy8FEC5qSxLcllVCmXzJWaVSI0Z2Nb';
const secretKey = 'c2c5MTOBo5d9XilhaLzVSG4DE7qRuCJF';
const service = 'ocr';
const host = 'ocr.tencentcloudapi.com';
const version = '2018-11-19';
const action = 'GeneralBasicOCR';
const region = 'ap-guangzhou';
final String imagePath = args.isNotEmpty
? args.first
: '/Users/wangdongni/Desktop/微信图片_2026-09-22_104305_553.jpg';
final List<int> bytes = await File(imagePath).readAsBytes();
final String payload = jsonEncode(<String, dynamic>{
'ImageBase64': base64Encode(bytes),
'LanguageType': 'zh',
});
final int ts = DateTime.now().millisecondsSinceEpoch ~/ 1000;
final String date = DateTime.fromMillisecondsSinceEpoch(ts * 1000, isUtc: true)
.toIso8601String()
.substring(0, 10);
final String hashedPayload = sha256.convert(utf8.encode(payload)).toString();
const canonicalHeaders = 'content-type:application/json; charset=utf-8\n'
'host:ocr.tencentcloudapi.com\n';
const signedHeaders = 'content-type;host';
final String canonicalRequest = 'POST\n/\n\n$canonicalHeaders\n$signedHeaders\n$hashedPayload';
final String hashedCanonicalRequest = sha256.convert(utf8.encode(canonicalRequest)).toString();
final String credentialScope = '$date/$service/tc3_request';
final String stringToSign = 'TC3-HMAC-SHA256\n$ts\n$credentialScope\n$hashedCanonicalRequest';
final List<int> secretDate = Hmac(sha256, utf8.encode('TC3$secretKey')).convert(utf8.encode(date)).bytes;
final List<int> secretService = Hmac(sha256, secretDate).convert(utf8.encode(service)).bytes;
final List<int> secretSigning = Hmac(sha256, secretService).convert(utf8.encode('tc3_request')).bytes;
final String signature = Hmac(sha256, secretSigning).convert(utf8.encode(stringToSign)).toString();
final String authorization = 'TC3-HMAC-SHA256 '
'Credential=$secretId/$credentialScope, '
'SignedHeaders=$signedHeaders, '
'Signature=$signature';
final HttpClient client = HttpClient();
final HttpClientRequest req = await client.postUrl(Uri.parse('https://$host/'));
req.headers.set('Authorization', authorization);
req.headers.set('Content-Type', 'application/json; charset=utf-8');
req.headers.set('Host', host);
req.headers.set('X-TC-Action', action);
req.headers.set('X-TC-Timestamp', '$ts');
req.headers.set('X-TC-Version', version);
req.headers.set('X-TC-Region', region);
req.write(payload);
final HttpClientResponse res = await req.close();
final String body = await res.transform(utf8.decoder).join();
print('HTTP ${res.statusCode}');
print(body);
client.close();
}