AntiScamAI/go/image.go

87 lines
2.9 KiB
Go
Raw Normal View History

package main
import (
2025-03-11 21:05:36 +08:00
"errors"
"fmt"
2025-03-11 21:05:36 +08:00
"github.com/ssgo/httpclient"
"github.com/ssgo/log"
"github.com/ssgo/u"
"strings"
2025-03-11 21:05:36 +08:00
"time"
)
func checkImg(imgStr string) error {
2025-03-11 21:05:36 +08:00
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 {
log.DefaultLogger.Error("parseImgResp error", "err", err)
return err
}
err = conn.WriteJSON(map[string]any{
"type": "imageResult",
"result": map[string]any{
"score": score,
"isSuspicious": score >= 50,
},
})
if err != nil {
log.DefaultLogger.Error("sendImgScore Error", "err", err)
return err
}
log.DefaultLogger.Info("sendImgScore")
return nil
}
2025-03-11 21:05:36 +08:00
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 ""
}
2025-03-11 21:05:36 +08:00
str := ""
u.Convert(resMap, &res)
if len(res.Result.Pages) < 1 {
log.DefaultLogger.Error("no characters recognized")
return ""
}
2025-03-11 21:05:36 +08:00
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 {
return fmt.Sprintf(`你是一名反诈骗专家专门分析聊天记录判断其中是否涉及诈骗信息请仔细阅读以下文字并回答以下问题
1. 这段内容是否包含诈骗信息如果是请给出具体的诈骗类型如刷单冒充客服杀猪盘等
2. 请分析这段内容是否具有诈骗话术例如使用了限时优惠保证赚钱不透露给别人等常见诈骗用语
3. 诈骗信息通常会使用哪些伎俩欺骗受害者请指出可能的欺诈手法
4. 请用简洁的语言不超过100字总结你的分析结果并给出风险等级
5. 如果有必要请建议用户如何避免被骗
请返回JSON格式
{
"risk_score": 0-100
"risk_reason": "主要风险点"
}
待分析的文本如下%s`, content)
}