基本的なキャプチャ画像を含むWebページがあります。Webサイトから画像をダウンロードしてTesaractを使用してキャプチャを解決しました。この関数を使用して、ダウンロードせずにTimageオブジェクトに画像を表示しています。
FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap;
VAR
HTTP : TIdHttp;
S : TStream;
IMG : TGraphic;
STR : AnsiString;
LHandler: TIdSSLIOHandlerSocketOpenSSL;
BEGIN
HTTP:=TIdHttp.Create(NIL);
LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
TRY
HTTP.IOHandler:=LHandler;
S:=TMemoryStream.Create;
TRY
HTTP.Get(URL,S);
IF NOT Assigned(ImageType) THEN BEGIN
S.Position:=0;
SetLength(STR,5);
S.Read(STR[1],LENGTH(STR));
IF COPY(STR,1,2)='BM' THEN
ImageType:=TBitMap
ELSE IF COPY(STR,1,3)='GIF' THEN
ImageType:=TGIFImage
ELSE IF COPY(STR,2,3)='PNG' THEN
ImageType:=TPngImage
ELSE IF (ORD(STR[1])=$FF) AND (ORD(STR[2])=$D8) THEN
ImageType:=TJPEGImage
END;
IF NOT Assigned(ImageType) THEN RAISE EInvalidImage.Create('Unrecognized file format!');
IMG:=ImageType.Create;
TRY
S.Position:=0;
IMG.LoadFromStream(S);
Result:=TBitMap.Create;
TRY
Result.Assign(IMG)
EXCEPT
Result.Free;
RAISE
END
FINALLY
IMG.Free
END
FINALLY
S.Free
END
FINALLY
HTTP.Free
END
END;
またはダウンロード画像用
function DownLoadInternetFile(Source, Dest : String): Boolean;
begin
try
Result := URLDownloadToFile(nil,PChar(Source),PChar(Dest),0,nil) = 0
except
Result := False;
end;
end;
問題は、画像を取得するためにWebサイトに接続するこれらの機能の両方であり、このため、フォームでWebブラウザーを使用してページをナビゲートすると、ダウンロードしたcaptcha画像と参照したページのcaptcha画像が異なり、取得しようとしています。ドキュメントが完成したときにembeddedwbまたはwebbrowserオブジェクトから直接画像を取得しました。実行時にwebbrowserのスクリーンショットを取得しようとしましたが、失敗しました。Webページは「https://esgm.sgk.gov.tr/Esgm/」です。ありがとうございます。事前に悪い英語でごめんなさい