案记索图——根据图片中的文本内容搜索图片(windows)【软件加加系列-第1弹】

AutoHotkey 有完善的 PaddleOCR 库,没必要借助其他软件。不过我不看好 PaddleOCR,性能不行,经过这么多迭代,识别耗时仍旧以秒计,毫无进步。
如果图片文件夹固定,不如监听文件夹,然后将识别结果保存到 sql,这就又摆脱了 Everything。

1 个赞

建议1:使用 hiroi-sora/RapidOCR-json: OCR离线图片文字识别命令行windows程序,以JSON字符串形式输出结果基于 。 (github.com) 来代替PaddleOCR,PaddleOCR的姐妹项目,速度比PaddleOCR快
建议2:可以通过AHK直接调用命令行直接生成json,将输出索引直接存在软件运行目录,不需要复制txt文本

目前我在尝试使用ahk调用rapidOCR-json,但是遇到了中文路径需要转ACSII码传入的问题,欢迎大家提供好的解决方案

使用了TheArkive的库来获取命令行输出, TheArkive/CLSAK_AHK: AutoHotkey library for CLI handling, capturing, and interaction (github.com)

#Include <TheArkive_CliSAK>
RapidOCRtoJSON("D:\Downloads\RapidOCR-json\sample.png",&response)
MsgBox response

RapidOCRtoJSON(target,&response) {
    execPath:=GetFullPathName("..\lib\RapidOcr\RapidOcr_json.exe")
    modelsPath:=GetFullPathName("..\lib\RapidOcr\models")
    cmd:=string(execPath " --models=" modelsPath " --imagePath=" . target)
    response:=""
    If (IsObject(response))
        response.close(), response := ""
    response:=CliData(cmd)
    return response
}

输出:

OCR init completed.

{"code":100,"data":[{"box":[[389,24],[1042,29],[1041,69],[389,64]],"score":0.9671138644218444,"text":"使用说明·下载地址·更新日志·提交Bug"},{"box":[[16,142],[527,142],[527,171],[16,171]],"score":0.9444133419739572,"text":"Â·å…è´¹ï¼šæœ¬é¡¹ç›®æ‰€æœ‰ä»£ç å¼€æºï¼Œå®Œå…¨å…è´¹ã€‚"},{"box":[[18,195],[527,195],[527,220],[18,220]],"score":0.9390283132854261,"text":"Â·æ–¹ä¾¿ï¼šè§£åŽ‹å³ç”¨ï¼Œç¦»çº¿è¿è¡Œï¼Œæ— éœ€ç½‘ç»œã€‚"}]}

因为ahk是半路入门,不太熟练,尝试后遇到的两个问题:

  1. 输入的文件不能含中文,需要解决路径转ACSII的问题
  2. 输出的文字包含了中文,要避免输出是乱码

============
目前搜集到的一些材料:

  1. AutohotkeyV1的JSON库中,有对字符串的unicode或ascii的处理,GitHub - cocobelgica/AutoHotkey-JSON: JSON module for AutoHotkey
  2. RunAny中,有对字符串转换的功能, RunAny/huiZz_Text.ahk · hui-Zz/RunAny (github.com)
  3. Powershell,中文转换ASCII的方法, PowerShell中汉字与ASCII码相互转换(cnblogs.com)

============
我用Autohotkey V2的strsplit()和ord()来逐字转换时,得出结果跟Powershell或在线转换结果不一样

function asc($param) { 
$rtn = ''
$list = $param -split ''
foreach ($char in $list)
{
    if($char -ne '')
    {
       $rtn = $rtn + ("\u" + ("{0:x}" -f [int]([char]$char)))
    }
}
return $rtn 
}

asc("样例")
\u6837\u4f8b
name:=StrSplit("样例","")
    AscName := ""
    for k in name{
        asc := Ord(k)
        AscName:= AscName '&#'  asc ';'
        MsgBox AscName
    }

AscName:='&#26679;&#20363;'

希望能全盘搜索,再加上每当有新图片储存时,自动识别 :tada:

我用Umi-OCR v1.3.4将图片识别后,在点击“案记索图”的“收集”后对应文件的.txt文件没有移动过去。(路径我已经配置过了)
image

盲猜是因为你修改了setting.ini的编码格式

我按照这些操作设置,最后ctrl+alt+f搜索的时候出了问题。
1.大部分情况下,ctrl+alt+f搜索之后everything没有任何动静;
2.偶尔,ctrl+alt+f搜索之后显示“未找到匹配的txt文件——在文件夹‘……’未找到包含关键词xx的文件。

求解…
screenshots

everything版本不一样?
我用的 V1.4.1.1022 (x64)

我也考虑了everything版本的问题,
原本我使用的是1.4.1.895,
然后我又去官网下载了最新的1.4.1.1024版本试了一下。
都是一样的反应,无法使用。

(小吐槽:昨天在手机记账app导入账单方面出了问题,问官方,也是操作上没问题但就是导入失败,然后官方发开发人员微信给我。。。这几天有点麻了〒▽〒…)

(顺带一提,
检索图片文字,我主要是用来搜索我做的思维导图,
下午我又尝试了一些别的方法,发现文字识别的精准度有点低…(实际搜索效果不尽人意)
然后我把思维导图的原文件以pdf导出,用Adobe Acrobat来检索文字,
发现可以对多个文件同时检索,算是解决了我的需求,而且精准度也很高。)

所以如果不太好排查我这边的问题,我还是打算放弃了案记索图了(;´д`)ゞ…
(挺折腾的唉…)

思维导图应该都是文本格式应该能搜索到才对,我没用EV但我用TextSeek,不过图片搜索我还是没找到好的方法解决

我和上面某个网友一样,案记输入后everything没有反应

试试管理员权限运行

希望能实现楼上好多人提到的,直接调用命令行版本进行全盘识别这样一条龙的整合工具,挺需要这样的工具,而且对umi的效果也是验证过非常好的,谢谢