测试了某个识图大模型,识别不是很快而且存在一些错字,决定换个思路调用微信 OCR 识别图像,然后再将识别结果发给 AI 处理。
调用微信 OCR 本地识别的好处是:识别效果最好,运行速度快,没有 token 费用成本。aardio 里提供了封装好的 process.wxOcr 可以很方便地做这事( 先更新一下 process.wxOcr 扩展库 )。
我们需要将包含所有文字坐标信息的原始识别结果转换为 JSON 发送给 AI,不能只发文本。AI 可以理解这种 JSON 数据,不需要添加额外解释。超级方便!
下面先截图,用 aardio 写这种代码很容易:
//屏幕选区
import mouse.screenArea;
var screenArea = mouse.screenArea();
//保存屏幕选区
screenArea.onSelectionChanged = function(rc){
//屏幕截图
import gdip.snap;
var bmp = gdip.snap(screenArea.hwnd,rc.getPos());
bmp.save("/~~~~ocr.png",80);
owner.close();
}
screenArea.doModal();
在以上代码后面继续添加代码识别图像:
//创建 AI 聊天界面
import web.form.chat;
var chatUi = web.form.chat(text="AI 识别图像");
chatUi.showLoading(" 正在思考");
//加载微信 OCR 组件
import process.wxOcr;
var ocr = process.wxOcr();
//识别图像
ocr.sendRquest("/~~~~ocr.png",
function(mmojoOcrResponse){
//获取识别结果
var singleResult = mmojoOcrResponse.ocrResult.singleResult;
//转换为普通表对象
singleResult = table.parseValue(singleResult)
//移除所有坐标点的小数部分
singleResult = table.mapDeep(singleResult,function(v,k,result){
if(type(v)==type.number){
v = math.floor(v)
}
return v;
})
//添加提示词
chatUi.system(
'下面是 OCR 工具识别图像返回的 JSON 数据'
+ '
```json
' + JSON.stringify(singleResult)
+ '```
你不需要向用户解释 JSON 的结构各字段的作用,请根据 JSON 数据获取的信息直接分析图像上的内容'
);
//多线程:创建 AI 对话线程
thread.invoke(
function(chatUi){
//创建 AI 客户端
import web.rest.aiChat;
var aiClient = web.rest.aiChat(
key = '196'; //接口密钥
url = "https://ai.aardio.com/api/v1/"; //接口地址
model = "deepseek"; //模型 ID
temperature = 0.5;//温度
)
//调用聊天接口。
var ok,err = aiClient.messages(chatUi.chatMessage,
function(deltaText,reasoning){
//输出思考过程
if(reasoning) chatUi.showThinking(reasoning);
//输出回复,自带高性能 Markdown 解析器。
chatUi.assistant(deltaText);
}
);
//输出错误信息(无错时自动忽略)
if(err)chatUi.errorMessage(err)
},chatUi //将窗口对象作为参数传入工作线程
)
}
)
//显示模态窗口
chatUi.doModal()
我们可以根据需要修改提示词,也可以继续添加 AI 调用本地工具函数的代码,例如让 AI 识别屏幕后来调用鼠标点击指定的按钮这都很简单(请查看 aardio 自带的 AI 调用工具范例)。
下面请将上面的所有代码复制粘贴到 aardio 开发环境中,按 F5可以直接运行。如果创建 aardio 工程,将代码粘贴到 main.aardio 中,按 F7可编译为 EXE 程序。

© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...