delphi2010转码Base64图片上传百度AI接口识别发票手记
最近在研究如何快速度处理增值税发票的识别,对百度AI的接口还是感到非常不错的。下面把一些碰到的问题写下来,以方便其它用户。
1、修改EncdDecd.pas 120行处,共三行
2、转到bin\dcc32.exe
3、为保险期间,我先将EncdDecd.pas放在c:\,然后cmd下运行,dcc32.exe c:\EncdDecd.pas会在同目录下生成
EncdDecd.dcu文件,将文件放入lib目录。替换注意备份原文件。
4、按百度原文:“图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持 jpg/jpeg/png/bmp 格式,当image字段存在时url字段失效”
5、先进行Base64转码
function TForm2.BaseImage(fn: string): string;
var
m1: TMemoryStream;
m2: TStringStream;
str: string;
begin
m1 := TMemoryStream.Create;
m2 := TStringStream.Create;
m1.LoadFromFile(fn);
EncdDecd.EncodeStream(m1, m2); // 将m1的内容Base64到m2中
result:=m2.DataString; // 返回值为Base64的Stream
m1.Free;
m2.Free;
end;
6、再进行urlencode转码
function TForm2.EncodeURIComponent(const ASrc: string): UTF8String;
const
HexMap: UTF8String = '0123456789ABCDEF';
function IsSafeChar(ch: Integer): Boolean;
begin
if (ch >= 48) and (ch <= 57) then Result := True // 0-9
else if (ch >= 65) and (ch <= 90) then Result := True // A-Z
else if (ch >= 97) and (ch <= 122) then Result := True // a-z
else if (ch = 33) then Result := True // !
else if (ch >= 39) and (ch <= 42) then Result := True // '()*
else if (ch >= 45) and (ch <= 46) then Result := True // -.
else if (ch = 95) then Result := True // _
else if (ch = 126) then Result := True // ~
else Result := False;
end;
var
I, J: Integer;
ASrcUTF8: UTF8String;
begin
Result := ''; {Do not Localize}
ASrcUTF8 := UTF8Encode(ASrc);
// UTF8Encode call not strictly necessary but
// prevents implicit conversion warning
I := 1; J := 1;
SetLength(Result, Length(ASrcUTF8) * 3); // space to %xx encode every byte
while I <= Length(ASrcUTF8) do
begin
if IsSafeChar(Ord(ASrcUTF8[I])) then
begin
Result[J] := ASrcUTF8[I];
Inc(J);
end
else if ASrcUTF8[I] = ' ' then
begin
Result[J] := '+';
Inc(J);
end
else
begin
Result[J] := '%';
Result[J+1] := HexMap[(Ord(ASrcUTF8[I]) shr 4) + 1];
Result[J+2] := HexMap[(Ord(ASrcUTF8[I]) and 15) + 1];
Inc(J,3);
end;
Inc(I);
end;
SetLength(Result, J-1);
end;
7、接下来通过idhttp把数据post到服务器,因为要支持http所以要加一个IdSSLIOHandlerSocketOpenSSL控件
这个控件需要二个dll文件支持,ssleay32.dll和libeay32.dll。他们有32位版本和64位版本区别。注意下载好,放在程序目录中。
function TForm2.post_jpg(filename:string): string;
var
token,url,temp,tmp1:string;
m1,m2: TStringStream;
jRet: ISuperObject;
begin
token:= '*******申请的toeken*******';
//通用文字识别地址
//url:= 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token='+token;
//增值税发票识别地址
url:= 'https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token='+token;
idhttp1.Request.ContentType := 'multipart/form-data' ;
IdHTTP1.Request.UserAgent:='Mozilla/3.0';
try
m1 := TStringStream.Create;
m2 := TStringStream.Create('', TEncoding.UTF8);
m1.WriteString('image='+EncodeURIComponent(BaseImage(filename)));
IdHTTP1.Post(url,m1,m2);
if length(m2.DataString)>100 then
begin
jRet:=TSuperObject.Create(stObject);
jRet := SO(m2.DataString);
tmp1:=jret.O['words_result'].AsString;
result:=tmp1;
end
else
result:='error';
finally
//m1.Free;
end;
end;
8、调用方法post_jpg(sfile);
9、最后通过CreateOleObject('Excel.Application');导出至excel,注意要添加ComObj单元。
10、使用的单元
uses IdMultipartFormData,IdGlobal,EncdDecd,superobject,ComObj;
delphi2010转码Base64图片上传百度AI接口识别发票手记相关推荐
- php图片上传为base64,php实现base64图片上传方式实例代码
/** * base64图片上传 * @param $base64_img * @return array */ header("content-type:text/html;charset ...
- App图片上传Base64图片上传
/*** @Method base64图片上传* @author Angus* return array* date 2018-05-04*/ function saveBase64Image($ba ...
- Java做图片上传、文件上传、 批量上传、 Base64图片上传 。附上源码
Java做文件上传.图片上传后台方法 利用Springboot快速搭建项目环境 项目源码已经上传到码云:https://gitee.com/jack_party/upload .喜欢的朋友可以支持一下 ...
- php 图片 投稿 源码,php图片上传,审核,显示源码(转载)
php图片上传,审核,显示源码(转载) 最近想为http://gif.nbqq.net,加一个网友可以自主上传的页面,然后我审核.所以百度了下源码先.下午好好研究下. 首先来看下上传部分的表单代码: ...
- php相册实现图片上传源码,php 图片上传源码下载[gif,jpg]
php 图片上传源码下载[gif,jpg] 无标题文档 $dest_folder = "/picture/"; if(!file_exists($dest_folder)){ ...
- base64图片上传Java上传
controller层获取图片数据调用upload方法 String imagesUrl = null;//获取图片信息String imageBaseStr = reqData.getImageBa ...
- php 接收 oc 图片上传,php yii2接口中图片上传
现在在给ios给接口,遇到了一些图片上传的问题,现在可以接收到ios传来的base64编码后的数据.我是否需要解码?解码又需要怎么处理才能把图片上传到服务器,并从服务器获取URL来存入到数据库呢?求大 ...
- C# pdf 转图片 and 创建百度AI文字识别应用(识别图片中的文字和数字)
/// <summary>/// pdf 转图片/// </summary>public static void Turnpicture(){string str = &quo ...
- python调用百度AI接口识别营业执照
上一篇文章介绍了应用python中的pytesseract库和OCR识别软件进行文字识别.本文介绍应用百度AI的文字识别功能对营业执照进行识别,感兴趣的朋友一起来看看效果吧. 一.安装baidu ...
- Springboot文件上传 百度ocr文字识别提取
前言 在学习过程中突然发现我以前用的文件上传真的好傻.以前的博客记录中还沾沾自喜文件上传模板可以套用,不接收新事物,却发现原来Springboot的文件上传如此简单. 首先,文件上传的三种方式,普通文 ...
最新文章
- QT pro文件解析
- C++ 多线程教程及实现方法
- 数据库面试题【十五、优化查询过程中的数据访问】
- (数据科学学习手札30)朴素贝叶斯分类器的原理详解Python与R实现
- 前端:Vue前端开发规范,值得收藏!
- JavaScript-操作DOM对象-更新dom节点
- spark基础之spark streaming的checkpoint机制
- php将汉字转换为拼音和得到词语首字母(一)
- shop--8.商品类别--批量操作--添加(前端)
- 【二分图】【最大匹配】【匈牙利算法】bzoj1191 [HNOI2006]超级英雄Hero
- 2008下mysql补丁_windows Server 2008 R2安装Mysql 8的打补丁顺序
- Ubuntu下Tinyos安装步骤
- 测试用例设计方法之选择原则
- VBA下载糗事百科图片
- 小米编程真题:风口的猪-中国牛市
- c_predicted_api调用模型,初始化创建mxnet预测器不成功,句柄始终等于0
- 图像缩放、旋转、翻转、平移
- js 正则知识汇总(转)
- BOSS管账深度融合钉能力,打破业财数据壁垒实现数据互通
- 图像处理 - GLCM灰度共生矩阵如何计算