diff --git a/go/main b/go/AntiScamAI.exe similarity index 52% rename from go/main rename to go/AntiScamAI.exe index c05763b..66b3b61 100755 Binary files a/go/main and b/go/AntiScamAI.exe differ diff --git a/go/go.mod b/go/go.mod index d7bcd1d..7a46a07 100644 --- a/go/go.mod +++ b/go/go.mod @@ -5,7 +5,6 @@ go 1.23.2 require ( github.com/PuerkitoBio/goquery v1.10.2 github.com/gorilla/websocket v1.5.3 - github.com/sashabaranov/go-openai v1.38.0 github.com/ssgo/httpclient v1.7.8 github.com/ssgo/log v1.7.7 github.com/ssgo/s v1.7.22 @@ -17,7 +16,6 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/gomodule/redigo v1.9.2 // indirect github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect - github.com/otiai10/gosseract/v2 v2.4.1 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect github.com/shirou/gopsutil/v3 v3.24.5 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect diff --git a/go/image.go b/go/image.go index 6278002..153bf96 100644 --- a/go/image.go +++ b/go/image.go @@ -1,15 +1,20 @@ package main import ( + "errors" "fmt" - "github.com/otiai10/gosseract/v2" + "github.com/ssgo/httpclient" "github.com/ssgo/log" "github.com/ssgo/u" "strings" + "time" ) func checkImg(imgStr string) error { - text := ocrImage(u.UnBase64(strings.Split(imgStr, "base64,")[1])) + text := OCR(u.UnBase64(strings.Split(imgStr, "base64,")[1])) + if text == "" { + return errors.New("text is empty") + } log.DefaultLogger.Info("checkImg", "imgStrLen", len(imgStr), "imgLen", len(u.UnBase64(strings.Split(imgStr, "base64,")[1])), "text", text) score, err := parseRiskScore(ask(buildImgDetectionPrompt(text))) if err != nil { @@ -31,24 +36,35 @@ func checkImg(imgStr string) error { return nil } -func ocrImage(image []byte) string { - client := gosseract.NewClient() - defer client.Close() - err := client.SetImageFromBytes(image) - if err != nil { - fmt.Println(err) - log.DefaultLogger.Error("ocr setimg error", "err", err) +func OCR(file []byte) string { + resMap := httpclient.GetClient(time.Second*30).Post("https://api.textin.com/ai/service/v2/recognize/multipage", file, "x-ti-app-id", "d367747801bba61cd45026ebee91c784", "x-ti-secret-code", "f79c9c361d7bdb92195bd8c63bedffa0").Map() + res := struct { + Result struct { + Pages []struct { + Lines []struct { + Text string + } `json:"lines"` + } `json:"pages"` + } `json:"result"` + }{} + //log.DefaultLogger.Info("Result", "", resMap) + //log.DefaultLogger.Error("ocrres err111", "err", errors.New(u.BRed(resMap["message"])), "rescode", reflect.TypeOf(resMap["code"]).String(), "rescod1e", reflect.TypeOf(resMap["code"]).Kind()) + if u.Int(resMap["code"]) != 200 { + log.DefaultLogger.Error("ocrres err", "err", errors.New(u.BRed(resMap["message"])), "rescode", resMap["code"]) + fmt.Println(u.BRed(resMap["message"])) return "" } - fmt.Println(u.Red("111")) - text, err := client.Text() - fmt.Println(text) - if err != nil { - fmt.Println(err) - log.DefaultLogger.Error("ocr error", "err", err) + str := "" + u.Convert(resMap, &res) + if len(res.Result.Pages) < 1 { + log.DefaultLogger.Error("no characters recognized") return "" } - return text + for _, k := range res.Result.Pages[len(res.Result.Pages)-1].Lines { + str += "" + k.Text + } + //log.DefaultLogger.Info("OCRResult", "Map", resMap, "Text", str) + return str } func buildImgDetectionPrompt(content string) string { diff --git a/web/ai-assistant.js b/web/ai-assistant.js index 583ef56..aefa63e 100644 --- a/web/ai-assistant.js +++ b/web/ai-assistant.js @@ -1,69 +1,69 @@ - // 初始化 WebSocket 连接 - const socket = new WebSocket('ws://your-websocket-server-url'); // 替换为实际的 WebSocket URL - - // 监听 WebSocket 打开事件 - socket.addEventListener('open', () => { - console.log('WebSocket 连接已建立'); - }); - - // 监听 WebSocket 消息事件 - socket.addEventListener('message', (event) => { - const chatBox = document.getElementById('chat-box'); - - // 解析后端返回的消息 - const aiMessage = event.data; - - // 添加 AI 消息到对话框 - const aiMessageDiv = document.createElement('div'); - aiMessageDiv.className = 'ai-message'; - aiMessageDiv.innerHTML = `
${aiMessage}
`; - chatBox.appendChild(aiMessageDiv); - - // 滚动到底部 - chatBox.scrollTop = chatBox.scrollHeight; - }); - - // 监听 WebSocket 错误事件 - socket.addEventListener('error', (error) => { - console.error('WebSocket 错误:', error); - }); - - // 监听 WebSocket 关闭事件 - socket.addEventListener('close', () => { - console.log('WebSocket 连接已关闭'); - }); - - // 发送消息功能 - function sendMessage() { - const userInput = document.getElementById('user-input'); - const chatBox = document.getElementById('chat-box'); - - // 获取用户输入内容 - const message = userInput.value.trim(); - if (!message) return; - - // 添加用户消息到对话框 - const userMessageDiv = document.createElement('div'); - userMessageDiv.className = 'user-message'; - userMessageDiv.innerHTML = `
${message}
`; - chatBox.appendChild(userMessageDiv); - - // 清空输入框 - userInput.value = ''; - - // 滚动到底部 - chatBox.scrollTop = chatBox.scrollHeight; - - // 通过 WebSocket 发送消息到后端 - socket.send(message); - } - - // 绑定发送按钮点击事件 - document.getElementById('send-btn').addEventListener('click', sendMessage); - - // 按下回车键发送消息 - document.getElementById('user-input').addEventListener('keypress', function (e) { - if (e.key === 'Enter') { - sendMessage(); - } + // 初始化 WebSocket 连接 + const socket = new WebSocket('ws://localhost:9000/socket'); // 替换为实际的 WebSocket URL + + // 监听 WebSocket 打开事件 + socket.addEventListener('open', () => { + console.log('WebSocket 连接已建立'); + }); + + // 监听 WebSocket 消息事件 + socket.addEventListener('message', (event) => { + const chatBox = document.getElementById('chat-box'); + + // 解析后端返回的消息 + const aiMessage = event.data; + + // 添加 AI 消息到对话框 + const aiMessageDiv = document.createElement('div'); + aiMessageDiv.className = 'ai-message'; + aiMessageDiv.innerHTML = `
${aiMessage}
`; + chatBox.appendChild(aiMessageDiv); + + // 滚动到底部 + chatBox.scrollTop = chatBox.scrollHeight; + }); + + // 监听 WebSocket 错误事件 + socket.addEventListener('error', (error) => { + console.error('WebSocket 错误:', error); + }); + + // 监听 WebSocket 关闭事件 + socket.addEventListener('close', () => { + console.log('WebSocket 连接已关闭'); + }); + + // 发送消息功能 + function sendMessage() { + const userInput = document.getElementById('user-input'); + const chatBox = document.getElementById('chat-box'); + + // 获取用户输入内容 + const message = userInput.value.trim(); + if (!message) return; + + // 添加用户消息到对话框 + const userMessageDiv = document.createElement('div'); + userMessageDiv.className = 'user-message'; + userMessageDiv.innerHTML = `
${message}
`; + chatBox.appendChild(userMessageDiv); + + // 清空输入框 + userInput.value = ''; + + // 滚动到底部 + chatBox.scrollTop = chatBox.scrollHeight; + + // 通过 WebSocket 发送消息到后端 + socket.send(message); + } + + // 绑定发送按钮点击事件 + document.getElementById('send-btn').addEventListener('click', sendMessage); + + // 按下回车键发送消息 + document.getElementById('user-input').addEventListener('keypress', function (e) { + if (e.key === 'Enter') { + sendMessage(); + } }); \ No newline at end of file