网络识图,delphi识别,百度图片
1、放置2个button,2个edit,2个image

2、button1的过程
var
ms:TMemoryStream;
jpg:TJPEGImage;
begin
try
jpg:=TJPEGImage.Create;
ms:=TMemoryStream.Create;
idhtp1.Get(edt1.Text,ms);
ms.Position:=0;
jpg.LoadFromStream(ms);
img1.Picture.Assign(jpg);
jpg.SaveToFile('c:\123.jpg');
except
ms.Free;
end;
3、button2的过程,即是识别图片过程,这个过程完全模拟百度上传图片识别
var
i:Integer;
pd:tstringlist;
s,sName,sUrljpg:string;
ms,ms1:TStringStream;
jpg:TJPEGImage;
// Cookies : TIdCookieManager;
mstrCookie: string;
begin
try
jpg:=TJPEGImage.Create;
ms:=TStringStream.Create('');
ms1:=TStringStream.Create('');
img1.Picture.Bitmap.SaveToStream(ms);
idhtp1.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko';
idhtp1.Request.AcceptLanguage:='zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.7,en;q=0.5,es-DO;q=0.3,es;q=0.2';
begin
s:=(idhtp1.Post('http://image.baidu.com/pictureup/uploadshitu?'
+'fr=flash&fm=index&pos=upload',mps));
s:=(idhtp1.Get('http://image.baidu.com'+s));
sName:=GetStringBetween(s,'guessWord','.split') ;
sName:=Trim(StringReplace (sName,'''',
'', [rfReplaceAll]));
sName:=Trim(StringReplace (sName,':',
'', [rfReplaceAll]));
sUrljpg:=GetStringBetween(s,'<img class="guess-newbaike-left-img" src="','<div class="guess-newbaike-left-similarity">') ;
sUrljpg:=Trim(StringReplace (sUrljpg,'amp;',
'', [rfReplaceAll]));
sUrljpg:=Trim(StringReplace (sUrljpg,'</div>',
'', [rfReplaceAll]));
sUrljpg:=Trim(StringReplace (sUrljpg,'">',
'', [rfReplaceAll]));
// sUrljpg:=TIdURI.URLDecode(sUrljpg);
idhtp1.Request.UserAgent := '';
mstrCookie := 'aaa=5555&bb=12345';
idhtp1.Request.AcceptEncoding := '';
if mstrCookie <> '' then
begin
idhtp1.Request.CustomHeaders.Add('Cookie: ' + mstrCookie);
end;
idhtp1.Request.Referer:='https://www.baidu.com';
idhtp1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko';
idhtp1.Get(sUrljpg,ms1);
ms1.Position:=0;
jpg.LoadFromStream(ms1);
img2.Picture.Assign(jpg);
edt2.Text:='我猜您的图片是:'+Utf8ToAnsi(sName);
// ShowMessage(sUrljpg);
end;
except
MPS.Free;
ms.Free;
ms1.Free;
end;
4、必要的过程,取字符串与字符串中间的字符
function GetStringBetween(const FullStr, StrLeft, StrRight: String): string;
var
idx_Start,idx_End,iStrCnt: Integer;
begin
Result:='';
idx_Start := Pos(StrLeft,FullStr)+Length(StrLeft);
idx_End:= Pos(StrRight,FullStr);
iStrCnt:= idx_End - idx_Start;
Result:=Copy(FullStr,idx_Start,iStrCnt);
end;
