accurate是高精度文字识别带位置,然后改成 accurate_basic 不带位置的,就说我请求的参数错误。什么情况

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

wantop
Posts: 7
Joined: 25 May 2023, 03:20

accurate是高精度文字识别带位置,然后改成 accurate_basic 不带位置的,就说我请求的参数错误。什么情况

Post by wantop » 25 May 2023, 11:13

Code: Select all

BaiduOCR(img,client_id,client_secret) ;传入一个B64数据串    accurate是高精度文字识别带位置,然后改成 accurate_basic 不带位置的,就说我请求的参数错误。什么情况
{
	whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
	url:="https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=" client_id "&client_secret=" client_secret "&"
	whr.Open("Get", url)
	whr.Send()
	baidutoken:= whr.ResponseText  ;返回一个令牌
	baidutoken:=RegExReplace(baidutoken,".*(?<=access_token""\:"")(.*?)(?=""\,""scope).*","$1")  ;按照格式提取令牌,此处用正则,可以用json,不懂
	url:="https://aip.baidubce.com/rest/2.0/ocr/v1/accurate?access_token=" baidutoken   ;加上这个令牌再发请求
	whr.Open("POST", url)
	whr.Send("image=" img )      ;发送具体的数据
	whr.WaitForResponse()  ;等待返回
	oADO := ComObjCreate("adodb.stream")  ;返回的数据需要格式化,否则乱码,不懂。
	oADO.Type := 1
	oADO.Mode := 3
	oADO.Open()
	oADO.Write(whr.ResponseBody)
	oADO.Position := 0
	oADO.Type := 2
	oADO.Charset := "UTF-8"
	res := oADO.ReadText()
	oADO.Close()
	return res
}
UrlEncode(str, enc:="UTF-8")
{
	hex := "00"
	fun := "msvcrt\swprintf"
	VarSetCapacity(buff, size:=StrPut(str, enc))
	StrPut(str, &buff, enc)
	while(code:=NumGet(buff, A_Index - 1, "UChar")) && dllcall(fun, "str",hex, "str","%%%02X", "uchar",code, "cdecl")
		r .= hex
	return r
}
Gdip_EncodeBitmapTo64string(pBitmap, ext:="jpg", Quality:=75)
{	;此函数来自vis,未做任何修改
	if Ext not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
	return -1
	Extension := "." Ext
	DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
	VarSetCapacity(ci, nSize)
	DllCall("gdiplus\GdipGetImageEncoders", "uint", nCount, "uint", nSize, Ptr, &ci)
	if !(nCount && nSize)
	return -2
	Loop, %nCount%
	{
		sString := StrGet(NumGet(ci, (idx := (48+7*A_PtrSize)*(A_Index-1))+32+3*A_PtrSize), "UTF-16")
		if !InStr(sString, "*" Extension)
		continue
		pCodec := &ci+idx
		break
	}
	if !pCodec
	return -3
	if (Quality != 75)
	{
		Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
		if Extension in .JPG,.JPEG,.JPE,.JFIF
		{
			DllCall("gdiplus\GdipGetEncoderParameterListSize", Ptr, pBitmap, Ptr, pCodec, "uint*", nSize)
			VarSetCapacity(EncoderParameters, nSize, 0)
			DllCall("gdiplus\GdipGetEncoderParameterList", Ptr, pBitmap, Ptr, pCodec, "uint", nSize, Ptr, &EncoderParameters)
			Loop, % NumGet(EncoderParameters, "UInt")
			{
				elem := (24+(A_PtrSize ? A_PtrSize : 4))*(A_Index-1) + 4 + (pad := A_PtrSize = 8 ? 4 : 0)
				if (NumGet(EncoderParameters, elem+16, "UInt") = 1) && (NumGet(EncoderParameters, elem+20, "UInt") = 6)
				{
					p := elem+&EncoderParameters-pad-4
					NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20, "UInt")), "UInt")
					break
				}
			}
		}
	}
	DllCall("ole32\CreateStreamOnHGlobal", "ptr",0, "int",true, "ptr*",pStream)
	DllCall("gdiplus\GdipSaveImageToStream", "ptr",pBitmap, "ptr",pStream, "ptr",pCodec, "uint",p ? p : 0)
	DllCall("ole32\GetHGlobalFromStream", "ptr",pStream, "uint*",hData)
	pData := DllCall("GlobalLock", "ptr",hData, "uptr")
	nSize := DllCall("GlobalSize", "uint",pData)
	VarSetCapacity(Bin, nSize, 0)
	DllCall("RtlMoveMemory", "ptr",&Bin , "ptr",pData , "uint",nSize)
	DllCall("GlobalUnlock", "ptr",hData)
	DllCall(NumGet(NumGet(pStream + 0, 0, "uptr") + (A_PtrSize * 2), 0, "uptr"), "ptr",pStream)
	DllCall("GlobalFree", "ptr",hData)
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint",0x01, "ptr",0, "uint*",base64Length)
	VarSetCapacity(base64, base64Length*2, 0)
	DllCall("Crypt32.dll\CryptBinaryToString", "ptr",&Bin, "uint",nSize, "uint",0x01, "ptr",&base64, "uint*",base64Length)
	Bin := ""
	VarSetCapacity(Bin, 0)
	VarSetCapacity(base64, -1)
	return base64
}
Str_RegExMatchAll_tmp(ByRef Haystack, NeedleRegEx, SubPat:="",startPos := 1)
{
    arr := []
    while ( pos := RegExMatch(Haystack, NeedleRegEx, match, startPos) )
    {
        arr.push(match%SubPat%)
        startPos := pos + StrLen(match)
    }
    return arr.MaxIndex() ? arr : ""
}
[Mod edit: + [code][/code] tags]


Post Reply

Return to “请求帮助”