This commit is contained in:
恍兮惚兮 2024-07-26 04:43:42 +08:00
parent 278340a019
commit d7d09467c1
6 changed files with 226 additions and 6 deletions

View File

@ -0,0 +1,118 @@
from ocrengines.baseocrclass import baseocr
import base64
class OCR(baseocr):
def langmap(self):
return {
"zh": "Simplified Chinese",
"ja": "Japanese",
"en": "English",
"ru": "Russian",
"es": "Spanish",
"ko": "Korean",
"fr": "French",
"cht": "Traditional Chinese",
"vi": "Vietnamese",
"tr": "Turkish",
"pl": "Polish",
"uk": "Ukrainian",
"it": "Italian",
"ar": "Arabic",
"th": "Thai",
}
def createdata(self, message):
try:
temperature = float(self.config["Temperature"])
except:
temperature = 0.3
data = dict(
model=self.config["model"],
messages=message,
# optional
max_tokens=self.config["max_tokens"],
n=1,
# stop=None,
top_p=self.config["top_p"],
temperature=temperature,
frequency_penalty=self.config["frequency_penalty"],
)
return data
def createparam(self):
return None
def createheaders(self):
return {"Authorization": "Bearer " + self.config["SECRET_KEY"]}
def checkv1(self, api_url: str):
# 傻逼豆包大模型是非要v3不是v1
if api_url.endswith("/v3"):
return api_url
elif api_url.endswith("/v3/"):
return api_url[:-1]
# 智谱AI
elif api_url.endswith("/v4"):
return api_url
elif api_url.endswith("/v4/"):
return api_url[:-1]
# 正常的
elif api_url.endswith("/v1"):
return api_url
elif api_url.endswith("/v1/"):
return api_url[:-1]
elif api_url.endswith("/"):
return api_url + "v1"
else:
return api_url + "/v1"
def ocr(self, imagebinary):
if self.config["use_custom_prompt"]:
prompt = self.config["custom_prompt"]
else:
prompt = f"Recognize the {self.srclang} text in the picture."
base64_image = base64.b64encode(imagebinary).decode("utf-8")
message = [
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}",
"detail": "low",
},
},
],
}
]
response = self.proxysession.post(
self.createurl(),
headers=self.createheaders(),
params=self.createparam(),
json=self.createdata(message),
)
try:
message = (
response.json()["choices"][0]["message"]["content"]
.replace("\n\n", "\n")
.strip()
)
return message
except:
raise Exception(response.text)
def createurl(self):
url = self.config["apiurl"]
if url.endswith("/chat/completions"):
pass
else:
url = self.checkv1(url) + "/chat/completions"
return url

View File

@ -4,6 +4,25 @@ from ocrengines.baseocrclass import baseocr
class OCR(baseocr):
def langmap(self):
return {
"zh": "Simplified Chinese",
"ja": "Japanese",
"en": "English",
"ru": "Russian",
"es": "Spanish",
"ko": "Korean",
"fr": "French",
"cht": "Traditional Chinese",
"vi": "Vietnamese",
"tr": "Turkish",
"pl": "Polish",
"uk": "Ukrainian",
"it": "Italian",
"ar": "Arabic",
"th": "Thai",
}
def ocr(self, imagebinary):
self.checkempty(["key"])
self.checkempty(["url"])
@ -13,12 +32,15 @@ class OCR(baseocr):
model = self.config["model"]
image_data = base64.b64encode(imagebinary).decode("utf-8")
# Prepare the request payload
if self.config["use_custom_prompt"]:
prompt = self.config["custom_prompt"]
else:
prompt = f"Recognize the {self.srclang} text in the picture."
payload = {
"contents": [
{
"parts": [
{"text": "Ocr this picture"},
{"text": prompt},
{"inlineData": {"mimeType": "image/png", "data": image_data}},
]
}

View File

@ -1471,6 +1471,10 @@
"geminiocr": {
"use": false,
"name": "GeminiOCR"
},
"chatgptlike": {
"use": false,
"name": "ChatGPT_兼容接口_OCR"
}
},
"fanyi": {

View File

@ -272,7 +272,83 @@
"args": {
"key": "",
"url": "https://generativelanguage.googleapis.com/v1",
"model": "gemini-1.5-flash"
"model": "gemini-1.5-flash",
"use_custom_prompt": false,
"custom_prompt": ""
},
"argstype": {
"custom_prompt": {
"name": "自定义promt",
"type": "multiline",
"refswitch": "use_custom_prompt"
},
"use_custom_prompt": {
"type": "switch_ref",
"name": "使用自定义promt"
}
}
},
"chatgptlike": {
"args": {
"model": "gpt-4",
"apiurl": "https://api.openai.com/v1",
"SECRET_KEY": "",
"use_custom_prompt": false,
"custom_prompt": "",
"Temperature": 0.3,
"top_p": 0.3,
"max_tokens": 128,
"frequency_penalty": 0,
"s": ""
},
"argstype": {
"SECRET_KEY": {
"rank": 1.1
},
"s": {
"type": "split",
"rank": 1.5
},
"apiurl": {
"name": "API接口地址",
"rank": 0
},
"model": {
"rank": 1
},
"top_p": {
"type": "spin",
"min": 0,
"max": 1,
"step": 0.01
},
"frequency_penalty": {
"type": "spin",
"min": 0,
"max": 2,
"step": 0.05
},
"max_tokens": {
"type": "intspin",
"min": 1,
"max": 4096,
"step": 1
},
"custom_prompt": {
"name": "自定义promt",
"type": "multiline",
"refswitch": "use_custom_prompt"
},
"use_custom_prompt": {
"type": "switch_ref",
"name": "使用自定义promt"
},
"Temperature": {
"type": "spin",
"min": 0,
"max": 1,
"step": 0.1
}
}
},
"xunfei": {

View File

@ -363,7 +363,7 @@
"rank": 1
},
"API_KEY": {
"rank": 2
"rank": 0.5
},
"流式输出": {
"type": "switch",

View File

@ -29,7 +29,7 @@ include(generate_product_version)
set(VERSION_MAJOR 5)
set(VERSION_MINOR 15)
set(VERSION_PATCH 10)
set(VERSION_PATCH 11)
add_library(pch pch.cpp)
target_precompile_headers(pch PUBLIC pch.h)