-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
519 lines (371 loc) · 107 KB
/
index.html
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 6.3.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/lib/font-awesome/css/all.min.css">
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<script id="hexo-configurations">
var NexT = window.NexT || {};
var CONFIG = {"hostname":"example.com","root":"/","scheme":"Muse","version":"7.8.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12,"onmobile":false},"copycode":{"enable":false,"show_result":false,"style":null},"back2top":{"enable":true,"sidebar":false,"scrollpercent":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"fancybox":false,"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"algolia":{"hits":{"per_page":10},"labels":{"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}},"localsearch":{"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}};
</script>
<meta name="description" content="Xuanyu Zhu Blog">
<meta property="og:type" content="website">
<meta property="og:title" content="Xuanyu Zhu's Blog">
<meta property="og:url" content="http://example.com/index.html">
<meta property="og:site_name" content="Xuanyu Zhu's Blog">
<meta property="og:description" content="Xuanyu Zhu Blog">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Xuanyu Zhu">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="http://example.com/">
<script id="page-configurations">
// https://hexo.io/docs/variables.html
CONFIG.page = {
sidebar: "",
isHome : true,
isPost : false,
lang : 'zh-CN'
};
</script>
<title>Xuanyu Zhu's Blog</title>
<noscript>
<style>
.use-motion .brand,
.use-motion .menu-item,
.sidebar-inner,
.use-motion .post-block,
.use-motion .pagination,
.use-motion .comments,
.use-motion .post-header,
.use-motion .post-body,
.use-motion .collection-header { opacity: initial; }
.use-motion .site-title,
.use-motion .site-subtitle {
opacity: initial;
top: initial;
}
.use-motion .logo-line-before i { left: initial; }
.use-motion .logo-line-after i { right: initial; }
</style>
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage">
<div class="container use-motion">
<div class="headband"></div>
<header class="header" itemscope itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<h1 class="site-title">Xuanyu Zhu's Blog</h1>
<span class="logo-line-after"><i></i></span>
</a>
<p class="site-subtitle" itemprop="description">Blog</p>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger">
</div>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="main-menu menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档</a>
</li>
</ul>
</nav>
</div>
</header>
<div class="back-to-top">
<i class="fa fa-arrow-up"></i>
<span>0%</span>
</div>
<main class="main">
<div class="main-inner">
<div class="content-wrap">
<div class="content index posts-expand">
<article itemscope itemtype="http://schema.org/Article" class="post-block" lang="zh-CN">
<link itemprop="mainEntityOfPage" href="http://example.com/2023/03/02/yuque/OCR%E6%8E%A5%E5%8F%A3%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3/">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="Xuanyu Zhu">
<meta itemprop="description" content="Xuanyu Zhu Blog">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Xuanyu Zhu's Blog">
</span>
<header class="post-header">
<h2 class="post-title" itemprop="name headline">
<a href="/2023/03/02/yuque/OCR%E6%8E%A5%E5%8F%A3%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3/" class="post-title-link" itemprop="url">OCR接口使用文档</a>
</h2>
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2023-03-02 16:20:15" itemprop="dateCreated datePublished" datetime="2023-03-02T16:20:15+08:00">2023-03-02</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2023-03-04 12:21:36" itemprop="dateModified" datetime="2023-03-04T12:21:36+08:00">2023-03-04</time>
</span>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>先简单介绍一下。<br>直接使用腾讯云或者百度云的接口的方法我就不过多赘述了,我觉得他们的开发文档写的蛮好,直接对着做就行了。我的工作主要就是将腾讯云的 api 接口进行了简单的封装,免去了环境配置和身份认证过程,只需要密钥和图片就能直接进行识别,甚至密钥也可以不用,大大方便了同学们的操作。<br>同时也在刘同学的帮助下实现了 paddlepaddle 模型的接口,后续还会再加上其他更多的预训练模型,提供更多的选择,同时后续我们还会将各个模型性能对比进行分析,为选择提供参考。<br>一些常用语言的 demo 在下方有<a href="#jtsl">具体实例</a>,复制粘贴就能用了。</p>
<p>具体实例中是核心代码,在<a target="_blank" rel="noopener" href="https://github.com/zhuzil/ocrDemo.git">https://github.com/zhuzil/ocrDemo.git</a> 中有各个语言的demo工程文件,clone下来就能用了,不过不是很推荐吧,我的具体实例中的核心代码已经写的比较清楚了,复制过去比较好,下载的demo我感觉可能环境版本什么的出问题在你们的电脑上不一定能跑通。</p>
<h2 id="腾讯云-api-封装接口"><a href="#腾讯云-api-封装接口" class="headerlink" title="腾讯云 api 封装接口"></a>腾讯云 api 封装接口</h2><blockquote>
<p><strong>URL</strong>:<code>https://www.7-an.com:5000/api/ocr</code><br><strong>Method</strong>:<code>POST</code></p>
</blockquote>
<h3 id="请求参数"><a href="#请求参数" class="headerlink" title="请求参数"></a>请求参数</h3><table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>必填</th>
<th>说明</th>
</tr>
</thead>
<tbody><tr>
<td><code>SecretID</code></td>
<td>String</td>
<td>否</td>
<td>无</td>
</tr>
<tr>
<td><code>SecretKey</code></td>
<td>String</td>
<td>否</td>
<td>无</td>
</tr>
<tr>
<td><code>ImageBase64</code></td>
<td>String</td>
<td>必填</td>
<td>暂时不支持 URL,后续会补充</td>
</tr>
<tr>
<td><code>IsCorrection</code></td>
<td>Int</td>
<td>否</td>
<td>数字 1 或 0,1 使用校正,0 不使用,图片校准默认为 0</td>
</tr>
</tbody></table>
<div style="background: #E8F7FF;padding:10px;border: 1px solid #ABD2DA;border-radius:5px;margin-bottom:5px;">💡 注意,`SecretID` 和 `SecretKey` 字段为腾讯云<b>文字识别服务</b>的个人密钥,在这个接口中我把我的密钥做成了默认密钥,如果用户没有输入密钥的话则会使用默认密钥,因为腾讯云只有免费的1000次额度所以希望同学们谨慎使用,同时我也对接口使用做了一些限制,每个IP每10秒只能获取一次。希望同学们尽量使用自己的密钥。</div>
<p><a href="#myhq">密钥获取方式</a></p>
<h4 id="IsCorrection-参数说明"><a href="#IsCorrection-参数说明" class="headerlink" title="IsCorrection 参数说明"></a>IsCorrection 参数说明</h4><p>感谢刘同学友情赞助的校正代码,github 地址<a target="_blank" rel="noopener" href="https://github.com/evibhm/ImageCorrection">https://github.com/evibhm/ImageCorrection</a>,欢迎 fork 和 star<br>校正效果如下:<br>原图:</p>
<p><img src="https://s2.loli.net/2023/03/04/7KIDaUHuPceOx8m.jpg" alt="test.jpg"></p>
<p>校正后:</p>
<p><img src="https://s2.loli.net/2023/03/04/q9hEIp5sn8d7yrv.jpg" alt="test1_cor.jpg"></p>
<p>请求示例</p>
<p>json 格式请求</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"ImageBase64"</span><span class="punctuation">:</span>ImageBase64Data<span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"IsCorrection"</span><span class="punctuation">:</span><span class="number">1</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"SecretId"</span><span class="punctuation">:</span><span class="string">"xxxxx"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"SecretKey"</span><span class="punctuation">:</span><span class="string">"xxxxx"</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure>
<h3 id="成功响应"><a href="#成功响应" class="headerlink" title="成功响应"></a>成功响应</h3><blockquote>
<p><strong>条件</strong>:请求参数合法,并且用户身份校验通过。<br><strong>状态码:</strong><code>200 OK</code><br><strong>响应示例</strong>:如果成功识别最会返回一个JSON格式的串,结果存在data值中:</p>
</blockquote>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"code"</span><span class="punctuation">:</span> <span class="number">200</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"message"</span><span class="punctuation">:</span> <span class="string">"Your SecretId or SecretKey is wrong, the default SecretId and SecretKey are already used"</span><span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"data"</span><span class="punctuation">:</span> <span class="string">"{\"TableDetections\": [{\"Cells\": [{\"ColTl\": 0, \"RowTl\": 0, \"ColBr\": 9, \"RowBr\": 1, \"Text\": \"五(1) 班卫生值日表\", \"Type\": \"body\", \"Confidence\": 99.982088804245, \"Polygon\": [{\"X\": 26, \"Y\": 193}, {\"X\": 774, \"Y\": 193}, {\"X\": 774, \"Y\": 282}, {\"X\": 26, \"Y\": 282}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 25}]}, {\"ColTl\": 0, \"RowTl\": 1, \"ColBr\": 1, \"RowBr\": 2, \"Text\": \"星期一\", \"Type\": \"body\", \"Confidence\": 99.96871948242188, \"Polygon\": [{\"X\": 26, \"Y\": 282}, {\"X\": 107, \"Y\": 282}, {\"X\": 107, \"Y\": 326}, {\"X\": 26, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 1, \"RowTl\": 1, \"ColBr\": 2, \"RowBr\": 2, \"Text\": \"梅亚婷\", \"Type\": \"body\", \"Confidence\": 99.99997615814209, \"Polygon\": [{\"X\": 107, \"Y\": 282}, {\"X\": 191, \"Y\": 282}, {\"X\": 191, \"Y\": 326}, {\"X\": 107, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 2, \"RowTl\": 1, \"ColBr\": 3, \"RowBr\": 2, \"Text\": \"潘林峰\", \"Type\": \"body\", \"Confidence\": 99.99949336051941, \"Polygon\": [{\"X\": 191, \"Y\": 282}, {\"X\": 275, \"Y\": 282}, {\"X\": 275, \"Y\": 326}, {\"X\": 191, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 3, \"RowTl\": 1, \"ColBr\": 4, \"RowBr\": 2, \"Text\": \"余校凯\", \"Type\": \"body\", \"Confidence\": 99.98820424079895, \"Polygon\": [{\"X\": 275, \"Y\": 282}, {\"X\": 359, \"Y\": 282}, {\"X\": 359, \"Y\": 326}, {\"X\": 275, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 4, \"RowTl\": 1, \"ColBr\": 5, \"RowBr\": 2, \"Text\": \"郑江豪\", \"Type\": \"body\", \"Confidence\": 99.99780654907227, \"Polygon\": [{\"X\": 359, \"Y\": 282}, {\"X\": 442, \"Y\": 282}, {\"X\": 442, \"Y\": 326}, {\"X\": 359, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 5, \"RowTl\": 1, \"ColBr\": 6, \"RowBr\": 2, \"Text\": \"范立新\", \"Type\": \"body\", \"Confidence\": 100, \"Polygon\": [{\"X\": 442, \"Y\": 282}, {\"X\": 526, \"Y\": 282}, {\"X\": 526, \"Y\": 326}, {\"X\": 442, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 6, \"RowTl\": 1, \"ColBr\": 7, \"RowBr\": 2, \"Text\": \"柯志生\", \"Type\": \"body\", \"Confidence\": 99.99997019767761, \"Polygon\": [{\"X\": 526, \"Y\": 282}, {\"X\": 610, \"Y\": 282}, {\"X\": 610, \"Y\": 326}, {\"X\": 526, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 7, \"RowTl\": 1, \"ColBr\": 8, \"RowBr\": 2, \"Text\": \"周于\", \"Type\": \"body\", \"Confidence\": 99.9976396560669, \"Polygon\": [{\"X\": 610, \"Y\": 282}, {\"X\": 694, \"Y\": 282}, {\"X\": 694, \"Y\": 326}, {\"X\": 610, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 8, \"RowTl\": 1, \"ColBr\": 9, \"RowBr\": 2, \"Text\": \"李慧得\", \"Type\": \"body\", \"Confidence\": 99.99997019767761, \"Polygon\": [{\"X\": 694, \"Y\": 282}, {\"X\": 774, \"Y\": 282}, {\"X\": 774, \"Y\": 326}, {\"X\": 694, \"Y\": 326}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 0, \"RowTl\": 2, \"ColBr\": 1, \"RowBr\": 3, \"Text\": \"星期二\", \"Type\": \"body\", \"Confidence\": 99.99971389770508, \"Polygon\": [{\"X\": 26, \"Y\": 326}, {\"X\": 107, \"Y\": 326}, {\"X\": 107, \"Y\": 373}, {\"X\": 26, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 1, \"RowTl\": 2, \"ColBr\": 2, \"RowBr\": 3, \"Text\": \"郑江尧\", \"Type\": \"body\", \"Confidence\": 99.99954104423523, \"Polygon\": [{\"X\": 107, \"Y\": 326}, {\"X\": 191, \"Y\": 326}, {\"X\": 191, \"Y\": 373}, {\"X\": 107, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 2, \"RowTl\": 2, \"ColBr\": 3, \"RowBr\": 3, \"Text\": \"郑锦证\", \"Type\": \"body\", \"Confidence\": 99.99963641166687, \"Polygon\": [{\"X\": 191, \"Y\": 326}, {\"X\": 275, \"Y\": 326}, {\"X\": 275, \"Y\": 373}, {\"X\": 191, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 3, \"RowTl\": 2, \"ColBr\": 4, \"RowBr\": 3, \"Text\": \"虞志峰\", \"Type\": \"body\", \"Confidence\": 99.98536109924316, \"Polygon\": [{\"X\": 275, \"Y\": 326}, {\"X\": 359, \"Y\": 326}, {\"X\": 359, \"Y\": 373}, {\"X\": 275, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 4, \"RowTl\": 2, \"ColBr\": 5, \"RowBr\": 3, \"Text\": \"虞雨清\", \"Type\": \"body\", \"Confidence\": 98.66757988929749, \"Polygon\": [{\"X\": 359, \"Y\": 326}, {\"X\": 442, \"Y\": 326}, {\"X\": 442, \"Y\": 373}, {\"X\": 359, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 5, \"RowTl\": 2, \"ColBr\": 6, \"RowBr\": 3, \"Text\": \"郑小伟\", \"Type\": \"body\", \"Confidence\": 100, \"Polygon\": [{\"X\": 442, \"Y\": 326}, {\"X\": 526, \"Y\": 326}, {\"X\": 526, \"Y\": 373}, {\"X\": 442, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 6, \"RowTl\": 2, \"ColBr\": 7, \"RowBr\": 3, \"Text\": \"桂堂豪\", \"Type\": \"body\", \"Confidence\": 99.99939799308777, \"Polygon\": [{\"X\": 526, \"Y\": 326}, {\"X\": 610, \"Y\": 326}, {\"X\": 610, \"Y\": 373}, {\"X\": 526, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 7, \"RowTl\": 2, \"ColBr\": 8, \"RowBr\": 3, \"Text\": \"何志勇\", \"Type\": \"body\", \"Confidence\": 99.99999403953552, \"Polygon\": [{\"X\": 610, \"Y\": 326}, {\"X\": 694, \"Y\": 326}, {\"X\": 694, \"Y\": 373}, {\"X\": 610, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 8, \"RowTl\": 2, \"ColBr\": 9, \"RowBr\": 3, \"Text\": \"张志霞\", \"Type\": \"body\", \"Confidence\": 99.99999403953552, \"Polygon\": [{\"X\": 694, \"Y\": 326}, {\"X\": 774, \"Y\": 326}, {\"X\": 774, \"Y\": 373}, {\"X\": 694, \"Y\": 373}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 0, \"RowTl\": 3, \"ColBr\": 1, \"RowBr\": 4, \"Text\": \"星期三\", \"Type\": \"body\", \"Confidence\": 99.99997019767761, \"Polygon\": [{\"X\": 26, \"Y\": 373}, {\"X\": 107, \"Y\": 373}, {\"X\": 107, \"Y\": 418}, {\"X\": 26, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 1, \"RowTl\": 3, \"ColBr\": 2, \"RowBr\": 4, \"Text\": \"桂小敏\", \"Type\": \"body\", \"Confidence\": 99.99976754188538, \"Polygon\": [{\"X\": 107, \"Y\": 373}, {\"X\": 191, \"Y\": 373}, {\"X\": 191, \"Y\": 418}, {\"X\": 107, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 2, \"RowTl\": 3, \"ColBr\": 3, \"RowBr\": 4, \"Text\": \"雷玉婷\", \"Type\": \"body\", \"Confidence\": 99.99997019767761, \"Polygon\": [{\"X\": 191, \"Y\": 373}, {\"X\": 275, \"Y\": 373}, {\"X\": 275, \"Y\": 418}, {\"X\": 191, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 3, \"RowTl\": 3, \"ColBr\": 4, \"RowBr\": 4, \"Text\": \"李洁\", \"Type\": \"body\", \"Confidence\": 99.9998688697815, \"Polygon\": [{\"X\": 275, \"Y\": 373}, {\"X\": 359, \"Y\": 373}, {\"X\": 359, \"Y\": 418}, {\"X\": 275, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 4, \"RowTl\": 3, \"ColBr\": 5, \"RowBr\": 4, \"Text\": \"雷可丽\", \"Type\": \"body\", \"Confidence\": 99.99987483024597, \"Polygon\": [{\"X\": 359, \"Y\": 373}, {\"X\": 442, \"Y\": 373}, {\"X\": 442, \"Y\": 418}, {\"X\": 359, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 5, \"RowTl\": 3, \"ColBr\": 6, \"RowBr\": 4, \"Text\": \"李爱兰\", \"Type\": \"body\", \"Confidence\": 99.99998211860657, \"Polygon\": [{\"X\": 442, \"Y\": 373}, {\"X\": 526, \"Y\": 373}, {\"X\": 526, \"Y\": 418}, {\"X\": 442, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 6, \"RowTl\": 3, \"ColBr\": 7, \"RowBr\": 4, \"Text\": \"桂喻霞\", \"Type\": \"body\", \"Confidence\": 99.99707341194153, \"Polygon\": [{\"X\": 526, \"Y\": 373}, {\"X\": 610, \"Y\": 373}, {\"X\": 610, \"Y\": 418}, {\"X\": 526, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 7, \"RowTl\": 3, \"ColBr\": 8, \"RowBr\": 4, \"Text\": \"郭培润\", \"Type\": \"body\", \"Confidence\": 99.99442100524902, \"Polygon\": [{\"X\": 610, \"Y\": 373}, {\"X\": 694, \"Y\": 373}, {\"X\": 694, \"Y\": 418}, {\"X\": 610, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 8, \"RowTl\": 3, \"ColBr\": 9, \"RowBr\": 4, \"Text\": \"范亚妮\", \"Type\": \"body\", \"Confidence\": 99.99880194664001, \"Polygon\": [{\"X\": 694, \"Y\": 373}, {\"X\": 774, \"Y\": 373}, {\"X\": 774, \"Y\": 418}, {\"X\": 694, \"Y\": 418}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 0, \"RowTl\": 4, \"ColBr\": 1, \"RowBr\": 5, \"Text\": \"星期四\", \"Type\": \"body\", \"Confidence\": 99.99974370002747, \"Polygon\": [{\"X\": 26, \"Y\": 418}, {\"X\": 107, \"Y\": 418}, {\"X\": 107, \"Y\": 464}, {\"X\": 26, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 1, \"RowTl\": 4, \"ColBr\": 2, \"RowBr\": 5, \"Text\": \"桂宗宙\", \"Type\": \"body\", \"Confidence\": 99.99898076057434, \"Polygon\": [{\"X\": 107, \"Y\": 418}, {\"X\": 191, \"Y\": 418}, {\"X\": 191, \"Y\": 464}, {\"X\": 107, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 2, \"RowTl\": 4, \"ColBr\": 3, \"RowBr\": 5, \"Text\": \"李谓志\", \"Type\": \"body\", \"Confidence\": 99.9998390674591, \"Polygon\": [{\"X\": 191, \"Y\": 418}, {\"X\": 275, \"Y\": 418}, {\"X\": 275, \"Y\": 464}, {\"X\": 191, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 3, \"RowTl\": 4, \"ColBr\": 4, \"RowBr\": 5, \"Text\": \"雷彩霞\", \"Type\": \"body\", \"Confidence\": 99.99995231628418, \"Polygon\": [{\"X\": 275, \"Y\": 418}, {\"X\": 359, \"Y\": 418}, {\"X\": 359, \"Y\": 464}, {\"X\": 275, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 4, \"RowTl\": 4, \"ColBr\": 5, \"RowBr\": 5, \"Text\": \"郑佳勇\", \"Type\": \"body\", \"Confidence\": 99.99539256095886, \"Polygon\": [{\"X\": 359, \"Y\": 418}, {\"X\": 442, \"Y\": 418}, {\"X\": 442, \"Y\": 464}, {\"X\": 359, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 5, \"RowTl\": 4, \"ColBr\": 6, \"RowBr\": 5, \"Text\": \"马佳辉\", \"Type\": \"body\", \"Confidence\": 99.99973773956299, \"Polygon\": [{\"X\": 442, \"Y\": 418}, {\"X\": 526, \"Y\": 418}, {\"X\": 526, \"Y\": 464}, {\"X\": 442, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 6, \"RowTl\": 4, \"ColBr\": 7, \"RowBr\": 5, \"Text\": \"郭培建\", \"Type\": \"body\", \"Confidence\": 99.99993443489075, \"Polygon\": [{\"X\": 526, \"Y\": 418}, {\"X\": 610, \"Y\": 418}, {\"X\": 610, \"Y\": 464}, {\"X\": 526, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 7, \"RowTl\": 4, \"ColBr\": 8, \"RowBr\": 5, \"Text\": \"李智政\", \"Type\": \"body\", \"Confidence\": 99.99950528144836, \"Polygon\": [{\"X\": 610, \"Y\": 418}, {\"X\": 694, \"Y\": 418}, {\"X\": 694, \"Y\": 464}, {\"X\": 610, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 8, \"RowTl\": 4, \"ColBr\": 9, \"RowBr\": 5, \"Text\": \"范成龙\", \"Type\": \"body\", \"Confidence\": 100, \"Polygon\": [{\"X\": 694, \"Y\": 418}, {\"X\": 774, \"Y\": 418}, {\"X\": 774, \"Y\": 464}, {\"X\": 694, \"Y\": 464}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 0, \"RowTl\": 5, \"ColBr\": 1, \"RowBr\": 6, \"Text\": \"星期五\", \"Type\": \"body\", \"Confidence\": 99.99926090240479, \"Polygon\": [{\"X\": 26, \"Y\": 464}, {\"X\": 107, \"Y\": 464}, {\"X\": 107, \"Y\": 510}, {\"X\": 26, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 1, \"RowTl\": 5, \"ColBr\": 2, \"RowBr\": 6, \"Text\": \"朱凯鹏\", \"Type\": \"body\", \"Confidence\": 99.99980926513672, \"Polygon\": [{\"X\": 107, \"Y\": 464}, {\"X\": 191, \"Y\": 464}, {\"X\": 191, \"Y\": 510}, {\"X\": 107, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 2, \"RowTl\": 5, \"ColBr\": 3, \"RowBr\": 6, \"Text\": \"虞校水\", \"Type\": \"body\", \"Confidence\": 99.98979568481445, \"Polygon\": [{\"X\": 191, \"Y\": 464}, {\"X\": 275, \"Y\": 464}, {\"X\": 275, \"Y\": 510}, {\"X\": 191, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 3, \"RowTl\": 5, \"ColBr\": 4, \"RowBr\": 6, \"Text\": \"郑雯丽\", \"Type\": \"body\", \"Confidence\": 99.99974370002747, \"Polygon\": [{\"X\": 275, \"Y\": 464}, {\"X\": 359, \"Y\": 464}, {\"X\": 359, \"Y\": 510}, {\"X\": 275, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 4, \"RowTl\": 5, \"ColBr\": 5, \"RowBr\": 6, \"Text\": \"郑琳\", \"Type\": \"body\", \"Confidence\": 100, \"Polygon\": [{\"X\": 359, \"Y\": 464}, {\"X\": 442, \"Y\": 464}, {\"X\": 442, \"Y\": 510}, {\"X\": 359, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 14}]}, {\"ColTl\": 5, \"RowTl\": 5, \"ColBr\": 6, \"RowBr\": 6, \"Text\": \"范越\", \"Type\": \"body\", \"Confidence\": 99.99940991401672, \"Polygon\": [{\"X\": 442, \"Y\": 464}, {\"X\": 526, \"Y\": 464}, {\"X\": 526, \"Y\": 510}, {\"X\": 442, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 6, \"RowTl\": 5, \"ColBr\": 7, \"RowBr\": 6, \"Text\": \"张鑫涛\", \"Type\": \"body\", \"Confidence\": 99.99998211860657, \"Polygon\": [{\"X\": 526, \"Y\": 464}, {\"X\": 610, \"Y\": 464}, {\"X\": 610, \"Y\": 510}, {\"X\": 526, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 7, \"RowTl\": 5, \"ColBr\": 8, \"RowBr\": 6, \"Text\": \"雷万林\", \"Type\": \"body\", \"Confidence\": 99.99470114707947, \"Polygon\": [{\"X\": 610, \"Y\": 464}, {\"X\": 694, \"Y\": 464}, {\"X\": 694, \"Y\": 511}, {\"X\": 610, \"Y\": 510}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 8, \"RowTl\": 5, \"ColBr\": 9, \"RowBr\": 6, \"Text\": \"雷建国\", \"Type\": \"body\", \"Confidence\": 100, \"Polygon\": [{\"X\": 694, \"Y\": 464}, {\"X\": 774, \"Y\": 464}, {\"X\": 774, \"Y\": 510}, {\"X\": 694, \"Y\": 511}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 15}]}, {\"ColTl\": 0, \"RowTl\": 6, \"ColBr\": 9, \"RowBr\": 7, \"Text\": \"备注:李林涛、梅美雪、江瑶洁、郑佳杰、李建华负责黑板及窗台等区域卫生。\", \"Type\": \"body\", \"Confidence\": 99.58259463310242, \"Polygon\": [{\"X\": 26, \"Y\": 510}, {\"X\": 774, \"Y\": 510}, {\"X\": 774, \"Y\": 557}, {\"X\": 26, \"Y\": 557}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 17}]}, {\"ColTl\": 0, \"RowTl\": 7, \"ColBr\": 9, \"RowBr\": 8, \"Text\": \"我们在一起一直在努力!\", \"Type\": \"body\", \"Confidence\": 98.30002188682556, \"Polygon\": [{\"X\": 26, \"Y\": 557}, {\"X\": 774, \"Y\": 557}, {\"X\": 774, \"Y\": 604}, {\"X\": 26, \"Y\": 604}], \"AdvancedInfo\": \"\", \"Contents\": [{\"ParagNo\": 0, \"WordSize\": 22}]}], \"Titles\": null, \"Type\": 1, \"TableCoordPoint\": [{\"X\": 26, \"Y\": 193}, {\"X\": 774, \"Y\": 193}, {\"X\": 774, \"Y\": 604}, {\"X\": 26, \"Y\": 604}]}], \"Data\": \"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\", \"PdfPageSize\": 0, \"Angle\": 0, \"RequestId\": \"b127722b-d3d6-45c6-b622-85332916a526\"}"</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure>
<h4 id="data-中的参数介绍"><a href="#data-中的参数介绍" class="headerlink" title="data 中的参数介绍"></a>data 中的参数介绍</h4><table>
<thead>
<tr>
<th><strong>参数名称</strong></th>
<th><strong>类型</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody><tr>
<td>TableDetections</td>
<td>Array of <a target="_blank" rel="noopener" href="https://cloud.tencent.com/document/api/866/33527#TableDetectInfo">TableDetectInfo</a></td>
<td>检测到的文本信息,具体内容请点击左侧链接。</td>
</tr>
<tr>
<td>Data</td>
<td>String</td>
<td>Base64 编码后的 Excel 数据。</td>
</tr>
<tr>
<td>PdfPageSize</td>
<td>Integer</td>
<td>图片为 PDF 时,返回 PDF 的总页数,默认为 0</td>
</tr>
<tr>
<td>Angle</td>
<td>Float</td>
<td>图片旋转角度(角度制),文本的水平方向为 0°,统一以逆时针方向旋转,逆时针为负,角度范围为-360° 至 0°。</td>
</tr>
<tr>
<td>RequestId</td>
<td>String</td>
<td>唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。</td>
</tr>
</tbody></table>
<h3 id="错误响应"><a href="#错误响应" class="headerlink" title="错误响应"></a>错误响应</h3><blockquote>
<p><strong>条件</strong>:ImageBase64和ImageUrl都没有传入。<br><strong>状态码</strong>:<code>500 BAD REQUEST</code></p>
</blockquote>
<p>响应示例:</p>
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta"><!doctype <span class="keyword">html</span>></span></span><br><span class="line"><span class="tag"><<span class="name">html</span> <span class="attr">lang</span>=<span class="string">en</span>></span></span><br><span class="line"><span class="tag"><<span class="name">title</span>></span>500 Internal Server Error<span class="tag"></<span class="name">title</span>></span></span><br><span class="line"><span class="tag"><<span class="name">h1</span>></span>Internal Server Error<span class="tag"></<span class="name">h1</span>></span></span><br><span class="line"><span class="tag"><<span class="name">p</span>></span>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or</span><br><span class="line"> there is an error in the application.<span class="tag"></<span class="name">p</span>></span></span><br></pre></td></tr></table></figure>
<p><a id='myhq'></a></p>
<h3 id="密钥获取"><a href="#密钥获取" class="headerlink" title="密钥获取"></a>密钥获取</h3><ol>
<li><p><strong>开通文字识别服务:</strong>进入 <a target="_blank" rel="noopener" href="https://console.cloud.tencent.com/ocr/v2/overview">文字识别控制台</a>,注册腾讯云账号并通过实名认证,阅读《文字识别服务条款》后勾选同意并单击立即开通;<br><img src="https://s2.loli.net/2023/03/04/UGjFKrAlhwaYzm8.png" alt="image.png"></p>
</li>
<li><p><strong>获取个人密钥:</strong>单击 <a target="_blank" rel="noopener" href="https://console.cloud.tencent.com/cam/capi">查看密钥</a>,进入控制台的 API 密钥管理界面,可查看您的<strong>个人密钥</strong>,若是新用户可单击【新建密钥】按钮创建<strong>个人密钥</strong>。<br><img src="https://s2.loli.net/2023/03/04/ruWbdyqKo5lt17Z.png" alt="image2.png"></p>
</li>
</ol>
<h2 id="paddle-预训练模型接口"><a href="#paddle-预训练模型接口" class="headerlink" title="paddle 预训练模型接口"></a>paddle 预训练模型接口</h2><blockquote>
<ul>
<li><strong>URL</strong>:<code>https://www.7-an.com:5000/api/paddle</code></li>
<li><strong>Method</strong>:<code>POST</code></li>
</ul>
</blockquote>
<h3 id="请求参数-1"><a href="#请求参数-1" class="headerlink" title="请求参数"></a>请求参数</h3><table>
<thead>
<tr>
<th>参数</th>
<th>类型</th>
<th>必填</th>
<th>说明</th>
</tr>
</thead>
<tbody><tr>
<td><code>ImageBase64</code></td>
<td>String</td>
<td>必填</td>
<td>暂时不支持 URL,后续会补充</td>
</tr>
<tr>
<td><code>IsCorrection</code></td>
<td>Int</td>
<td>否</td>
<td>数字 1 或 0,1 使用校正,0 不使用,图片校准默认为 0</td>
</tr>
</tbody></table>
<h3 id="请求示例"><a href="#请求示例" class="headerlink" title="请求示例"></a>请求示例</h3><p>json 格式请求</p>
<figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">{</span></span><br><span class="line"> <span class="attr">"ImageBase64"</span><span class="punctuation">:</span>ImageBase64Data<span class="punctuation">,</span></span><br><span class="line"> <span class="attr">"IsCorrection"</span><span class="punctuation">:</span><span class="number">1</span><span class="punctuation">,</span></span><br><span class="line"><span class="punctuation">}</span></span><br></pre></td></tr></table></figure>
<p>响应的结果与使用腾讯云 api 封装的接口相同。</p>
<p><a id='jtsl'></a></p>
<h2 id="具体实例"><a href="#具体实例" class="headerlink" title="具体实例"></a>具体实例</h2><h3 id="Python-示例"><a href="#Python-示例" class="headerlink" title="Python 示例"></a>Python 示例</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> base64</span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="comment">#image转base64</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">encode_base64</span>(<span class="params">file</span>):</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(file,<span class="string">'rb'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> img_data = f.read()</span><br><span class="line"> base64_data = base64.b64encode(img_data)</span><br><span class="line"> <span class="keyword">return</span> base64_data</span><br><span class="line"><span class="comment"># 读取图片</span></span><br><span class="line">file = <span class="string">"./test.jpg"</span></span><br><span class="line">base64_data = encode_base64(file)</span><br><span class="line">img_str = base64_data.decode() <span class="comment">#img_str是字符串类型变量,decode()对字节类型变量进行解码,bytes->str</span></span><br><span class="line">Data = {</span><br><span class="line"> <span class="string">"ImageBase64"</span>:img_str,</span><br><span class="line"> <span class="string">"IsCorrection"</span>:<span class="number">1</span>,</span><br><span class="line"> <span class="string">"SecretId"</span>:<span class="string">"xxx"</span>,</span><br><span class="line"> <span class="string">"SecretKey"</span>:<span class="string">"xxx"</span></span><br><span class="line">}</span><br><span class="line"><span class="comment">#访问服务</span></span><br><span class="line">result = requests.post(<span class="string">'http://www.7-an.com:5000/api/paddle'</span>,data=Data)</span><br><span class="line"><span class="built_in">print</span>(result.text)</span><br></pre></td></tr></table></figure>
<p>Python 实现如上,主要是参数以及图片转 base64,对于其他语言来说也是一样,都是在代码中设置好参数之后,将读取的图片转为 base64 再用 POST 请求我们的接口,获得返回结果。</p>
<h3 id="Java-示例"><a href="#Java-示例" class="headerlink" title="Java 示例"></a>Java 示例</h3><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> java.io.*;</span><br><span class="line"><span class="keyword">import</span> java.net.HttpURLConnection;</span><br><span class="line"><span class="keyword">import</span> java.net.URL;</span><br><span class="line"><span class="keyword">import</span> java.util.Base64;</span><br><span class="line"><span class="keyword">import</span> com.alibaba.fastjson2.JSONObject;</span><br><span class="line"></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">demo</span> {</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> String <span class="title function_">img2base64</span><span class="params">(String path)</span> <span class="keyword">throws</span> IOException {</span><br><span class="line"> <span class="type">File</span> <span class="variable">file</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">File</span>(path);</span><br><span class="line"> <span class="type">InputStream</span> <span class="variable">inputStream</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">FileInputStream</span>(file);</span><br><span class="line"> <span class="type">byte</span>[] buffer = <span class="keyword">new</span> <span class="title class_">byte</span>[(<span class="type">int</span>) file.length()];</span><br><span class="line"> inputStream.read(buffer);</span><br><span class="line"> inputStream.close();</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 将图片转换为 Base64 编码的字符串</span></span><br><span class="line"> <span class="type">String</span> <span class="variable">imageBase64</span> <span class="operator">=</span> Base64.getEncoder().encodeToString(buffer);</span><br><span class="line"> <span class="keyword">return</span> imageBase64;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title function_">main</span><span class="params">(String[] args)</span> <span class="keyword">throws</span> Exception {</span><br><span class="line"> <span class="comment">// 创建 URL 对象</span></span><br><span class="line"> <span class="type">URL</span> <span class="variable">url</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">URL</span>(<span class="string">"http://www.7-an.com:5000/api/paddle"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 打开连接</span></span><br><span class="line"> <span class="type">HttpURLConnection</span> <span class="variable">connection</span> <span class="operator">=</span> (HttpURLConnection) url.openConnection();</span><br><span class="line"> connection.setRequestMethod(<span class="string">"POST"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 设置请求头信息</span></span><br><span class="line"> connection.setRequestProperty(<span class="string">"Content-Type"</span>, <span class="string">"application/json"</span>);</span><br><span class="line"> connection.setRequestProperty(<span class="string">"Accept"</span>, <span class="string">"application/json"</span>);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 启用输出流,向服务器发送数据</span></span><br><span class="line"> connection.setDoOutput(<span class="literal">true</span>);</span><br><span class="line"></span><br><span class="line"> <span class="type">String</span> <span class="variable">imgPath</span> <span class="operator">=</span> <span class="string">"test.jpg"</span>;</span><br><span class="line"> <span class="type">String</span> <span class="variable">base64Img</span> <span class="operator">=</span> img2base64(imgPath);</span><br><span class="line"> <span class="comment">// 创建 JSON 请求数据</span></span><br><span class="line"> <span class="type">JSONObject</span> <span class="variable">jsonObject</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">JSONObject</span>();</span><br><span class="line"> jsonObject.put(<span class="string">"ImageBase64"</span>, base64Img);</span><br><span class="line"> jsonObject.put(<span class="string">"IsCorrection"</span>, <span class="number">1</span>);</span><br><span class="line"></span><br><span class="line"> <span class="type">String</span> <span class="variable">requestBody</span> <span class="operator">=</span> jsonObject.toJSONString();</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 发送请求数据</span></span><br><span class="line"> <span class="keyword">try</span>(<span class="type">OutputStream</span> <span class="variable">os</span> <span class="operator">=</span> connection.getOutputStream()) {</span><br><span class="line"> <span class="type">byte</span>[] input = requestBody.getBytes(<span class="string">"utf-8"</span>);</span><br><span class="line"> os.write(input, <span class="number">0</span>, input.length);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 读取响应</span></span><br><span class="line"> <span class="keyword">try</span>(<span class="type">BufferedReader</span> <span class="variable">br</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">BufferedReader</span>(</span><br><span class="line"> <span class="keyword">new</span> <span class="title class_">InputStreamReader</span>(connection.getInputStream(), <span class="string">"utf-8"</span>))) {</span><br><span class="line"> <span class="type">StringBuilder</span> <span class="variable">response</span> <span class="operator">=</span> <span class="keyword">new</span> <span class="title class_">StringBuilder</span>();</span><br><span class="line"> <span class="type">String</span> <span class="variable">responseLine</span> <span class="operator">=</span> <span class="literal">null</span>;</span><br><span class="line"> <span class="keyword">while</span> ((responseLine = br.readLine()) != <span class="literal">null</span>) {</span><br><span class="line"> response.append(responseLine.trim());</span><br><span class="line"> }</span><br><span class="line"> System.out.println(response.toString());</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<p>java 需要装一个 com.alibaba.fastjson2.JSONObject 包。</p>
<h3 id="Nodejs-示例"><a href="#Nodejs-示例" class="headerlink" title="Nodejs 示例"></a>Nodejs 示例</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> axios = <span class="built_in">require</span>(<span class="string">"axios"</span>);</span><br><span class="line"><span class="keyword">const</span> fs = <span class="built_in">require</span>(<span class="string">"fs"</span>);</span><br><span class="line"><span class="comment">// Base64编码</span></span><br><span class="line"><span class="keyword">let</span> img_raw = fs.<span class="title function_">readFileSync</span>(<span class="string">"../test.jpg"</span>);</span><br><span class="line"><span class="keyword">let</span> img_b64 = img_raw.<span class="title function_">toString</span>(<span class="string">"base64"</span>);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 发送请求</span></span><br><span class="line">axios</span><br><span class="line"> .<span class="title function_">post</span>(<span class="string">"http://www.7-an.com:5000/api/paddle"</span>, {</span><br><span class="line"> <span class="title class_">ImageBase64</span>: img_b64,</span><br><span class="line"> <span class="title class_">IsCorrection</span>: <span class="number">1</span>,</span><br><span class="line"> })</span><br><span class="line"> .<span class="title function_">then</span>(<span class="function">(<span class="params">res</span>) =></span> {</span><br><span class="line"> <span class="variable language_">console</span>.<span class="title function_">log</span>(res.<span class="property">data</span>);</span><br><span class="line"> });</span><br></pre></td></tr></table></figure>
<h3 id="NET-示例"><a href="#NET-示例" class="headerlink" title=".NET 示例"></a>.NET 示例</h3><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">using</span> System.Net.Http;</span><br><span class="line"></span><br><span class="line">HttpClient client = <span class="keyword">new</span> HttpClient();</span><br><span class="line"><span class="built_in">byte</span>[] imgBytes = File.ReadAllBytes(<span class="string">"../test.jpg"</span>);</span><br><span class="line"><span class="built_in">string</span> imgBase64 = Convert.ToBase64String(imgBytes);</span><br><span class="line"><span class="keyword">var</span> values = <span class="keyword">new</span> Dictionary<<span class="built_in">string</span>, <span class="built_in">string</span>></span><br><span class="line">{</span><br><span class="line">{ <span class="string">"ImageBase64"</span>, imgBase64 },</span><br><span class="line">{ <span class="string">"IsCorrection"</span>, <span class="string">"1"</span> }</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="built_in">string</span> url = <span class="string">"http://www.7-an.com:5000/api/paddle"</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> data = <span class="keyword">new</span> FormUrlEncodedContent(values);</span><br><span class="line"><span class="keyword">var</span> response = <span class="keyword">await</span> client.PostAsync(url, data);</span><br><span class="line"><span class="built_in">string</span> responseString = <span class="keyword">await</span> response.Content.ReadAsStringAsync();</span><br><span class="line">Console.WriteLine(responseString);</span><br></pre></td></tr></table></figure>
<p>在 visual studio 上或者其他地方创建一个 donet 框架的项目,把代码复制过去就能使用了。</p>
<h3 id="Go-示例"><a href="#Go-示例" class="headerlink" title="Go 示例"></a>Go 示例</h3><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> main</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> (</span><br><span class="line"> <span class="string">"bytes"</span></span><br><span class="line"> <span class="string">"encoding/base64"</span></span><br><span class="line"> <span class="string">"encoding/json"</span></span><br><span class="line"> <span class="string">"fmt"</span></span><br><span class="line"> <span class="string">"io/ioutil"</span></span><br><span class="line"> <span class="string">"net/http"</span></span><br><span class="line"> <span class="string">"unsafe"</span></span><br><span class="line">)</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> {</span><br><span class="line"> <span class="comment">// 读取本地图片文件</span></span><br><span class="line"> fileData, err := ioutil.ReadFile(<span class="string">"../test.jpg"</span>)</span><br><span class="line"> <span class="keyword">if</span> err != <span class="literal">nil</span> {</span><br><span class="line"> <span class="built_in">panic</span>(err)</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// 将图片文件转换成base64编码</span></span><br><span class="line"> imageBase64 := base64.StdEncoding.EncodeToString(fileData)</span><br><span class="line"></span><br><span class="line"> <span class="comment">//在这里编辑Json串</span></span><br><span class="line"> song := <span class="built_in">make</span>(<span class="keyword">map</span>[<span class="type">string</span>]<span class="type">string</span>)</span><br><span class="line"> song[<span class="string">"ImageBase64"</span>] = imageBase64</span><br><span class="line"> song[<span class="string">"IsCorrection"</span>] = <span class="string">"1"</span></span><br><span class="line"> bytesData, _ := json.Marshal(song)</span><br><span class="line"></span><br><span class="line"> res, err := http.Post(<span class="string">"http://www.7-an.com:5000/api/paddle"</span>,</span><br><span class="line"> <span class="string">"application/json;charset=utf-8"</span>, bytes.NewBuffer([]<span class="type">byte</span>(bytesData)))</span><br><span class="line"> <span class="keyword">if</span> err != <span class="literal">nil</span> {</span><br><span class="line"> fmt.Println(<span class="string">"Fatal error "</span>, err.Error())</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">defer</span> res.Body.Close()</span><br><span class="line"></span><br><span class="line"> content, err := ioutil.ReadAll(res.Body)</span><br><span class="line"> <span class="keyword">if</span> err != <span class="literal">nil</span> {</span><br><span class="line"> fmt.Println(<span class="string">"Fatal error "</span>, err.Error())</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> str := (*<span class="type">string</span>)(unsafe.Pointer(&content)) <span class="comment">//转化为string,优化内存</span></span><br><span class="line"> fmt.Println(*str)</span><br><span class="line"></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>本地配置好环境之后,代码复制过去之后,命令行运行:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">go run demo.go</span><br></pre></td></tr></table></figure>
<h3 id="Cpp-示例"><a href="#Cpp-示例" class="headerlink" title="Cpp 示例"></a>Cpp 示例</h3><p>需要引入库的 HTTP 函数</p>
<figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><iostream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><string></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><vector></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><sstream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><fstream></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string"><malloc.h></span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">"HTTPRequest.hpp"</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="type">static</span> <span class="type">const</span> std::string base64_chars =</span><br><span class="line"><span class="string">"ABCDEFGHIJKLMNOPQRSTUVWXYZ"</span></span><br><span class="line"><span class="string">"abcdefghijklmnopqrstuvwxyz"</span></span><br><span class="line"><span class="string">"0123456789+/"</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">static</span> <span class="keyword">inline</span> <span class="type">bool</span> <span class="title">is_base64</span><span class="params">(<span class="type">unsigned</span> <span class="type">char</span> c)</span> </span>{</span><br><span class="line"> <span class="keyword">return</span> (<span class="built_in">isalnum</span>(c) || (c == <span class="string">'+'</span>) || (c == <span class="string">'/'</span>));</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function">std::string <span class="title">base64_encode</span><span class="params">(<span class="type">const</span> <span class="type">char</span>* bytes_to_encode, <span class="type">unsigned</span> <span class="type">int</span> in_len)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> std::string ret;</span><br><span class="line"> <span class="type">int</span> i = <span class="number">0</span>;</span><br><span class="line"> <span class="type">int</span> j = <span class="number">0</span>;</span><br><span class="line"> <span class="type">unsigned</span> <span class="type">char</span> char_array_3[<span class="number">3</span>];</span><br><span class="line"> <span class="type">unsigned</span> <span class="type">char</span> char_array_4[<span class="number">4</span>];</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> (in_len--)</span><br><span class="line"> {</span><br><span class="line"> char_array_3[i++] = *(bytes_to_encode++);</span><br><span class="line"> <span class="keyword">if</span> (i == <span class="number">3</span>)</span><br><span class="line"> {</span><br><span class="line"> char_array_4[<span class="number">0</span>] = (char_array_3[<span class="number">0</span>] & <span class="number">0xfc</span>) >> <span class="number">2</span>;</span><br><span class="line"> char_array_4[<span class="number">1</span>] = ((char_array_3[<span class="number">0</span>] & <span class="number">0x03</span>) << <span class="number">4</span>) + ((char_array_3[<span class="number">1</span>] & <span class="number">0xf0</span>) >> <span class="number">4</span>);</span><br><span class="line"> char_array_4[<span class="number">2</span>] = ((char_array_3[<span class="number">1</span>] & <span class="number">0x0f</span>) << <span class="number">2</span>) + ((char_array_3[<span class="number">2</span>] & <span class="number">0xc0</span>) >> <span class="number">6</span>);</span><br><span class="line"> char_array_4[<span class="number">3</span>] = char_array_3[<span class="number">2</span>] & <span class="number">0x3f</span>;</span><br><span class="line"> <span class="keyword">for</span> (i = <span class="number">0</span>; (i < <span class="number">4</span>); i++)</span><br><span class="line"> {</span><br><span class="line"> ret += base64_chars[char_array_4[i]];</span><br><span class="line"> }</span><br><span class="line"> i = <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span> (j = i; j < <span class="number">3</span>; j++)</span><br><span class="line"> {</span><br><span class="line"> char_array_3[j] = <span class="string">'\0'</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> char_array_4[<span class="number">0</span>] = (char_array_3[<span class="number">0</span>] & <span class="number">0xfc</span>) >> <span class="number">2</span>;</span><br><span class="line"> char_array_4[<span class="number">1</span>] = ((char_array_3[<span class="number">0</span>] & <span class="number">0x03</span>) << <span class="number">4</span>) + ((char_array_3[<span class="number">1</span>] & <span class="number">0xf0</span>) >> <span class="number">4</span>);</span><br><span class="line"> char_array_4[<span class="number">2</span>] = ((char_array_3[<span class="number">1</span>] & <span class="number">0x0f</span>) << <span class="number">2</span>) + ((char_array_3[<span class="number">2</span>] & <span class="number">0xc0</span>) >> <span class="number">6</span>);</span><br><span class="line"> char_array_4[<span class="number">3</span>] = char_array_3[<span class="number">2</span>] & <span class="number">0x3f</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span> (j = <span class="number">0</span>; (j < i + <span class="number">1</span>); j++)</span><br><span class="line"> {</span><br><span class="line"> ret += base64_chars[char_array_4[j]];</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">while</span> ((i++ < <span class="number">3</span>))</span><br><span class="line"> {</span><br><span class="line"> ret += <span class="string">'='</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> ret;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span> </span>{</span><br><span class="line"> fstream f;</span><br><span class="line"> f.<span class="built_in">open</span>(<span class="string">"test.jpg"</span>, ios::in | ios::binary);</span><br><span class="line"> f.<span class="built_in">seekg</span>(<span class="number">0</span>, std::ios_base::end); <span class="comment">//设置偏移量至文件结尾</span></span><br><span class="line"> std::streampos sp = f.<span class="built_in">tellg</span>(); <span class="comment">//获取文件大小</span></span><br><span class="line"> <span class="type">int</span> size = sp;</span><br><span class="line"></span><br><span class="line"> <span class="type">char</span>* buffer = (<span class="type">char</span>*)<span class="built_in">malloc</span>(<span class="built_in">sizeof</span>(<span class="type">char</span>) * size);</span><br><span class="line"> f.<span class="built_in">seekg</span>(<span class="number">0</span>, std::ios_base::beg); <span class="comment">//设置偏移量至文件开头</span></span><br><span class="line"> f.<span class="built_in">read</span>(buffer, size); <span class="comment">//将文件内容读入buffer</span></span><br><span class="line"> cout << <span class="string">"file size:"</span> << size << endl;</span><br><span class="line"></span><br><span class="line"> string imgBase64 = <span class="built_in">base64_encode</span>(buffer, size); <span class="comment">//编码</span></span><br><span class="line"> cout << <span class="string">"img base64 encode size:"</span> << imgBase64.<span class="built_in">size</span>() << endl;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">try</span></span><br><span class="line"> {</span><br><span class="line"> http::Request request{ <span class="string">"http://www.7-an.com:5000/api/paddle"</span> };</span><br><span class="line"> <span class="comment">// c++的Json比较复杂,没有使用网上的Json相关库,而是用的字符串拼接,用起来比较麻烦。</span></span><br><span class="line"> <span class="type">const</span> std::string body = <span class="string">"{\"IsCorrection\": 1, \"ImageBase64\": \""</span> + imgBase64 + <span class="string">"\"}"</span>;</span><br><span class="line"> <span class="type">const</span> <span class="keyword">auto</span> response = request.<span class="built_in">send</span>(<span class="string">"POST"</span>, body, {</span><br><span class="line"> {<span class="string">"Content-Type"</span>, <span class="string">"application/json"</span>}</span><br><span class="line"> });</span><br><span class="line"> std::cout << std::string{ response.body.<span class="built_in">begin</span>(), response.body.<span class="built_in">end</span>() } << <span class="string">'\n'</span>; <span class="comment">// print the result</span></span><br><span class="line"> }</span><br><span class="line"> <span class="built_in">catch</span> (<span class="type">const</span> std::exception& e)</span><br><span class="line"> {</span><br><span class="line"> std::cerr << <span class="string">"Request failed, error: "</span> << e.<span class="built_in">what</span>() << <span class="string">'\n'</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>
</div>
<footer class="post-footer">
<div class="post-eof"></div>
</footer>
</article>
</div>
<script>
window.addEventListener('tabs:register', () => {
let { activeClass } = CONFIG.comments;
if (CONFIG.comments.storage) {
activeClass = localStorage.getItem('comments_active') || activeClass;
}
if (activeClass) {
let activeTab = document.querySelector(`a[href="#comment-${activeClass}"]`);
if (activeTab) {
activeTab.click();
}
}
});
if (CONFIG.comments.storage) {
window.addEventListener('tabs:click', event => {
if (!event.target.matches('.tabs-comment .tab-content .tab-pane')) return;
let commentClass = event.target.classList[1];
localStorage.setItem('comments_active', commentClass);
});
}
</script>
</div>
<div class="toggle sidebar-toggle">
<span class="toggle-line toggle-line-first"></span>
<span class="toggle-line toggle-line-middle"></span>
<span class="toggle-line toggle-line-last"></span>
</div>
<aside class="sidebar">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
<p class="site-author-name" itemprop="name">Xuanyu Zhu</p>
<div class="site-description" itemprop="description">Xuanyu Zhu Blog</div>
</div>
<div class="site-state-wrap motion-element">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">1</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
</nav>
</div>
</div>
</div>
</aside>
<div id="sidebar-dimmer"></div>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
©
<span itemprop="copyrightYear">2023</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">Xuanyu Zhu</span>
</div>
<div class="powered-by">由 <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> & <a href="https://muse.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> 强力驱动
</div>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/muse.js"></script>
<script src="/js/next-boot.js"></script>
<span id="busuanzi_container_site_pv">本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
</body>
</html>