mirror of
https://github.com/HIllya51/LunaTranslator.git
synced 2024-12-29 16:44:13 +08:00
gpt
This commit is contained in:
parent
278340a019
commit
d7d09467c1
118
LunaTranslator/LunaTranslator/ocrengines/chatgptlike.py
Normal file
118
LunaTranslator/LunaTranslator/ocrengines/chatgptlike.py
Normal 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
|
@ -4,6 +4,25 @@ from ocrengines.baseocrclass import baseocr
|
|||||||
|
|
||||||
|
|
||||||
class OCR(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):
|
def ocr(self, imagebinary):
|
||||||
self.checkempty(["key"])
|
self.checkempty(["key"])
|
||||||
self.checkempty(["url"])
|
self.checkempty(["url"])
|
||||||
@ -13,12 +32,15 @@ class OCR(baseocr):
|
|||||||
model = self.config["model"]
|
model = self.config["model"]
|
||||||
image_data = base64.b64encode(imagebinary).decode("utf-8")
|
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 = {
|
payload = {
|
||||||
"contents": [
|
"contents": [
|
||||||
{
|
{
|
||||||
"parts": [
|
"parts": [
|
||||||
{"text": "Ocr this picture"},
|
{"text": prompt},
|
||||||
{"inlineData": {"mimeType": "image/png", "data": image_data}},
|
{"inlineData": {"mimeType": "image/png", "data": image_data}},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1471,6 +1471,10 @@
|
|||||||
"geminiocr": {
|
"geminiocr": {
|
||||||
"use": false,
|
"use": false,
|
||||||
"name": "GeminiOCR"
|
"name": "GeminiOCR"
|
||||||
|
},
|
||||||
|
"chatgptlike": {
|
||||||
|
"use": false,
|
||||||
|
"name": "ChatGPT_兼容接口_OCR"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fanyi": {
|
"fanyi": {
|
||||||
|
@ -272,7 +272,83 @@
|
|||||||
"args": {
|
"args": {
|
||||||
"key": "",
|
"key": "",
|
||||||
"url": "https://generativelanguage.googleapis.com/v1",
|
"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": {
|
"xunfei": {
|
||||||
@ -319,4 +395,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -363,7 +363,7 @@
|
|||||||
"rank": 1
|
"rank": 1
|
||||||
},
|
},
|
||||||
"API_KEY": {
|
"API_KEY": {
|
||||||
"rank": 2
|
"rank": 0.5
|
||||||
},
|
},
|
||||||
"流式输出": {
|
"流式输出": {
|
||||||
"type": "switch",
|
"type": "switch",
|
||||||
|
@ -29,7 +29,7 @@ include(generate_product_version)
|
|||||||
|
|
||||||
set(VERSION_MAJOR 5)
|
set(VERSION_MAJOR 5)
|
||||||
set(VERSION_MINOR 15)
|
set(VERSION_MINOR 15)
|
||||||
set(VERSION_PATCH 10)
|
set(VERSION_PATCH 11)
|
||||||
|
|
||||||
add_library(pch pch.cpp)
|
add_library(pch pch.cpp)
|
||||||
target_precompile_headers(pch PUBLIC pch.h)
|
target_precompile_headers(pch PUBLIC pch.h)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user