使用OCR文字识别制作自动答题

前言:最近我在玩游戏时遇到一个很烦的事情,就是游戏限时任务需要答题,但是我又不想自己慢慢手点也不想搜题,那么我就有一个想法,为什么不自己做一个自动答题的脚本呢?

首先我遇到的题目是这样的

这样的题目一共有20道,那么一个一个搜起来就很麻烦,就算有题目也需要Ctrl+F慢慢搜,那么我们就可以用到OCR文字识别提取文字,再写一个自动遍历题库的脚本。

正文开始:

关于OCR文字识别我们可以使用百度云,阿里云,腾讯云等。或者去Github下载一些开源的文字识别,比如:rapidocr(此处我们以百度云OCR文字识别为例)

注:百度云ocr文字识别需要去百度云注册,此处我不作演示,需要的可以去百度云官网注册

代码部分:

首先我们随意定义两个值:如下(此处我将该值从界面输入框读取)

Dim account = ReadUIConfig("输入框1")
Dim secret = ReadUIConfig("输入框2")

然后我们可以在百度云获取到我们的client_id以及client_secret。在使用OCR文字识别之前我们需要用到access_token,以下是获取代码:

token1 = "https://aip.baidubce.com/oauth/2.0/token?   client_id="&account&"&client_secret="&secret&"&grant_type=client_credentials"
token1 = URL.Get(token1)
token1 = Encode.JsonToTable(token1)
token1 = token1["access_token"]
TracePrint token1  //此处打印获取到的access_token的值

获取到token之后我们就可以使用OCR文字识别了,但是识别是需要上传图片到百度云识别的,那么我们就可以用下列代码截取屏幕指定范围内的一张图

path = GetSdcardDir()
SnapShot path & "/test.png", 289,282,536,993//这里我截取的是289,282,536,993范围的图片
图片路径 = path & "/test.png"
path是要存放图片的文件夹,也就是手机默认的文件夹

做完上述步骤后我们就可以使用百度云OCR的api接口了(此处使用了紫猫插件,需要的可以在网络下载)

link = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" & token1
base64 = zm.FileReadBinaryBase64(图片路径)
base64 = zm.EncodeURL (base64)
param =  "image="&base64
res = Url.Post(link,param)
TracePrint res

这样我们就获得了识别到的文字,但是有些字体因为i 1 l和5 s都很相像,识别可能不准确,不过无伤大雅

我们开始提取题目和答案,因为返回的res是一个json类型,我们需要让他变成table类型

res = Encode.JsonToTable(res)
words_result = res["words_result"]
For i = 0 To UBound(words_result) - 3
	题目 = words_result(i)
	题目 = 题目["words"]
	题目1 = 题目1 & 题目
	Call 替换题目()
	TracePrint 题目1
Next
optionA = words_result(UBOUND(words_result) - 2)
optionA = optionA["words"]
optionB = words_result(UBOUND(words_result) - 1)
optionB = optionB["words"]
optionC = words_result(UBOUND(words_result)    )
optionC = optionC["words"]

这样我们就提取到了题目,选项A,选项B,选项C。接下来就是遍历题库了(可以使用txt文本来保存题目和答案,我这里格式为 题目:答案,方便后续获取答案)

fileContent = File.Read("/sdcard/misc/题库.txt")
fileContent = Split(fileContent, "\n")   //使用换行符号分割题库
For i = 0 To UBOUND(fileContent)
题库题目 = Split(fileContent(i), ":")
If InStr(1,题目1, 题库题目(0)) > 0 Then 
	Dim length2 = UTF8.Len(题库题目(1))
	题库答案 = UTF8.Left(题库题目(1), length2 - 1)
	Exit For
End If
Next

这样就获取到了答案,最后我们只需要截取原来选项中的A,B,C的图片使用findpic函数找图执行点击就好了(这部分过于简单,就不作演示了)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇