Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

桌面端支持搜索图片 OCR 文本 #3470

Closed
jibwf opened this issue Nov 23, 2021 · 40 comments
Closed

桌面端支持搜索图片 OCR 文本 #3470

jibwf opened this issue Nov 23, 2021 · 40 comments
Assignees
Labels
Milestone

Comments

@jibwf
Copy link

jibwf commented Nov 23, 2021

笔记里面有很多是直接截图记录的,希望能像onenote一样,支持OCR,这样可以通过文字搜索到

@88250
Copy link
Member

88250 commented Nov 23, 2021

你好,OCR 短期内无法支持,目前只能考虑手动设置图片标题来进行搜索 #3427

@linglongyoudoufu
Copy link

linglongyoudoufu commented Oct 16, 2022

不能立为长期计划吗,我想了解下难点在哪里?

@88250
Copy link
Member

88250 commented Oct 16, 2022

@linglongyoudoufu 需要一个支持跨平台、能够打包整合进思源的开源方案,有推荐不?

@pisceswb
Copy link

感觉ocr功能没必要一定跨平台,PC端能够实现图片ocr,并把ocr识别到的内容保存到图片的“提示文本”中就可以了,这样跨平台也能搜索。相信提出ocr功能需要的人都是为了搜索需求的。需要注意的是,如果在android端添加了图片,或以前就在思源笔记中存在的图片,ocr功能能够将这些未进行ocr的图片识别到,并自动对其ocr识别,保存到各自图片的“提示文本”中。这样就能满足图片文字搜索的需求了,感觉ocr功能很实用,提出该问题的人也很多,希望能够添加,谢谢!

@88250
Copy link
Member

88250 commented Jan 15, 2023

仅支持桌面端的话至少也要考虑支持 Windows/Linux/macOS,目前似乎只有联网调用其他平台 API 比较现实,或者让用户自行安装 tesseract?

@pisceswb
Copy link

仅支持桌面端的话至少也要考虑支持 Windows/Linux/macOS,目前似乎只有联网调用其他平台 API 比较现实,或者让用户自行安装 tesseract?

联网调用其他平台 API 也可以啊,让确实有需要使用ocr功能的用户自己去申请接口。Windows端的用户,也可以调用win10自带ocr功能。确实感觉ocr功能对于搜索功能来说帮助很大,尤其是笔记较多的用户和喜欢截图保存数据的用户。

@Soltus
Copy link
Contributor

Soltus commented Jan 15, 2023

确实,调API就行,然后限定为订阅用户权益

@88250 88250 self-assigned this Jan 15, 2023
@88250 88250 added the Feature label Jan 15, 2023
@88250 88250 added this to the 2.7.0 milestone Jan 15, 2023
@88250 88250 reopened this Jan 15, 2023
@88250 88250 changed the title 希望增加对图片内容搜索的功能 支持搜索图片中的文本 Jan 15, 2023
@88250 88250 changed the title 支持搜索图片中的文本 桌面端支持搜索图片中的文本 Jan 15, 2023
@88250
Copy link
Member

88250 commented Jan 15, 2023

解决方案:

  1. 用户自行安装 Tesseract,注意需要勾选中文语言包,并将安装后的 Tesseract-OCR 目录路径添加到环境变量 PATH 中。如果安装正常的话,启动思源后内核日志会输出这一行:
    image
  2. 自动在建立数据库索引时对行级元素图片节点进行识别
  3. 将识别结果追加到 ast.NodeLinkText 结果后面,这样 blocks 表 content 字段就会保存 OCR 结果,以供后续搜索使用
  4. 如果需要对以前的图片进行 OCR,执行一次重建索引

88250 added a commit that referenced this issue Jan 15, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@88250 88250 changed the title 桌面端支持搜索图片中的文本 桌面端支持搜索图片 OCR 文本 Jan 15, 2023
88250 added a commit that referenced this issue Jan 15, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
@tcmtom
Copy link

tcmtom commented Jan 15, 2023

解决方案:

  1. 用户自行安装 Tesseract,注意需要勾选中文语言包,并将安装后的 Tesseract-OCR 目录路径添加到环境变量 PATH 中。如果安装正常的话,启动思源后内核日志会输出这一行:
    image
  2. 自动在建立数据库索引时对行级元素图片节点进行识别
  3. 将识别结果追加到 ast.NodeLinkText 结果后面,这样 blocks 表 content 字段就会保存 OCR 结果,以供后续搜索使用
  4. 如果需要对以前的图片进行 OCR,执行一次重建索引

能和pandoc一样直接内置在软件里吗

@pisceswb
Copy link

解决方案:

  1. 用户自行安装 Tesseract,注意需要勾选中文语言包,并将安装后的 Tesseract-OCR 目录路径添加到环境变量 PATH 中。如果安装正常的话,启动思源后内核日志会输出这一行:
    image
  2. 自动在建立数据库索引时对行级元素图片节点进行识别
  3. 将识别结果追加到 ast.NodeLinkText 结果后面,这样 blocks 表 content 字段就会保存 OCR 结果,以供后续搜索使用
  4. 如果需要对以前的图片进行 OCR,执行一次重建索引

感谢!赞!

@mozhux
Copy link

mozhux commented Jan 16, 2023

话说这个支持百度腾讯那些ocr接口吗?实现难度?

@88250
Copy link
Member

88250 commented Jan 16, 2023

@mozhux 不支持,仅支持本地的 Tesseract,后续版本可能会考虑改为配置命令,这样可以用其他程序实现。

@88250 88250 moved this to 正在进行 In Progress in SiYuan Roadmap Jan 16, 2023
@pisceswb
Copy link

中文识别能力较差,建议能够对接百度图片识别的API

@ericma15
Copy link

在macos上,homebrew安装的tesseract输出如下,使用‘tesseract v’判定是否存在不正确。

tesseract 5.3.0
 leptonica-1.82.0
  libgif 5.2.1 : libjpeg 8d (libjpeg-turbo 2.1.4) : libpng 1.6.39 : libtiff 4.4.0 : zlib 1.2.11 : libwebp 1.3.0 : libopenjp2 2.5.0
 Found NEON
 Found libcurl/7.84.0 SecureTransport (LibreSSL/3.3.6) zlib/1.2.11 nghttp2/1.47.0

@88250
Copy link
Member

88250 commented Jan 17, 2023

@ericma15 使用的是 if nil == err && strings.HasPrefix(string(data), "tesseract ") { 判断的,感觉好像没问题哦。

@ericma15
Copy link

是我看错版本了。我再看看为啥没成功

@ZinYY
Copy link

ZinYY commented Jan 17, 2023

image

系统是 MacOS 12.6,为什么已经成功安装了tesseract并且安装了中文语言包,还是无法在思源笔记中激活该功能呢?(思源笔记的启动日志中也没有)

image

@88250
Copy link
Member

88250 commented Jan 17, 2023

macOS 端 Tesseract 有问题的话请关注 #7107

@lentikr
Copy link

lentikr commented Jan 18, 2023

是仅支持本地图片吗?图床上的图片我这里好像没有效果呢,搜索不到里面的文字。

@88250
Copy link
Member

88250 commented Jan 18, 2023

仅支持本地图片。

@lentikr
Copy link

lentikr commented Jan 18, 2023

我这里本地图片中的简体字会被识别为繁体字,这样的话搜简体是搜不到的,D大知道是什么原因吗?
image

@88250
Copy link
Member

88250 commented Jan 18, 2023

把 tesseract 繁体字的语言包删掉看看,chi_tra*

@lentikr
Copy link

lentikr commented Jan 18, 2023

可以了,谢谢D大

@linglongyoudoufu
Copy link

解决方案:

  1. 用户自行安装 Tesseract,注意需要勾选中文语言包,并将安装后的 Tesseract-OCR 目录路径添加到环境变量 PATH 中。如果安装正常的话,启动思源后内核日志会输出这一行:
    image
  2. 自动在建立数据库索引时对行级元素图片节点进行识别
  3. 将识别结果追加到 ast.NodeLinkText 结果后面,这样 blocks 表 content 字段就会保存 OCR 结果,以供后续搜索使用
  4. 如果需要对以前的图片进行 OCR,执行一次重建索引

请问有教程吗

@pisceswb
Copy link

中文识别能力较差,建议能够对接百度图片识别的API

自己把中文语言包安装错了,Tesseract对中文的识别还是很好的。

@TransMux
Copy link
Contributor

Windows用户如果安装后,重启思源还是没有ocr功能的话,可以尝试:

  1. 命令行使用tesseract --version看看有没有输出,如果有的话,重启电脑再开思源应该就可以了
  2. 如果没有输出,需要把安装路径添加到环境变量(我这里是C:\Program Files\Tesseract-OCR)
I 2023/01/28 13:53:21 runtime.go:91: use network proxy [system]
I 2023/01/28 13:53:21 tesseract.go:135: tesseract-ocr enabled [ver=v5.3.0.20221222, langs=chi_sim+eng]
I 2023/01/28 13:53:21 serve.go:111: kernel [pid=18976] http server [127.0.0.1:2832] is booting

用了一下太香了,感谢D大!

@88250 88250 removed this from SiYuan Roadmap Mar 29, 2023
@2234839
Copy link
Member

2234839 commented May 29, 2024

解决方案:

1. 用户自行安装 [Tesseract](https://github.com/tesseract-ocr/tesseract),注意需要勾选中文语言包,并将安装后的 Tesseract-OCR 目录路径添加到环境变量 PATH 中。如果安装正常的话,启动思源后内核日志会输出这一行:
   ![image](https://user-images.githubusercontent.com/873584/212551081-984d7b3b-ff60-439c-8ffd-b5f1e560cc20.png)

2. 自动在建立数据库索引时对行级元素图片节点进行识别

3. 将识别结果追加到 `ast.NodeLinkText` 结果后面,这样 blocks 表 content 字段就会保存 OCR 结果,以供后续搜索使用

4. 如果需要对以前的图片进行 OCR,执行一次重建索引

@88250 这个ocr的文本没有存储在sy文件中嘛
我正在尝试开发一个ocr的插件,想要兼容思源对于ocr的文本搜索,但我手动设置了这个值
图片
在sy文件中没有搜索到该结果

@88250
Copy link
Member

88250 commented May 29, 2024

@2234839 要启用 OCR 才会存储,你看下是否启用了

@pisceswb
Copy link

@2234839 期待!支持!
Quicker ocr(本地)的识别效果还是不错的。曾尝试使用Quicker的本地ocr程序批量识别思源笔记的图片,写入存储ocr文本内容的文件中。但经常会莫名其妙的有或没有,尤其是同步后,最终放弃折腾了。供您参考

@88250
Copy link
Member

88250 commented May 29, 2024

写入存储ocr文本内容的文件中。但经常会莫名其妙的有或没有,尤其是同步后

不要直接读写文件,要走内核的文件 API

@2234839
Copy link
Member

2234839 commented May 29, 2024

@88250 我会将这个功能添加到OceanPress 插件中,这个插件是支持将挂件转化成图片的,所以刚刚我在想,OCR文本搜索这个功能可以在通用一些嘛,使得用户可以搜索到各个挂件,iframre之类的,也许以后还可以搜索歌曲,视频。

也就是对于非文本块,拥有一个内容描述的文本字段,这个字段参与搜索,对于图片而言,就是OCR

@88250
Copy link
Member

88250 commented May 29, 2024

可以考虑保存到自定义属性,这个更通用些,用户打开这个开关可以搜索到:

image

@2234839
Copy link
Member

2234839 commented May 29, 2024

@88250 这个会不会又太杂了,因为很多插件可能都是依赖自定义属性的,将这些程序用的数据也搜索出来给用户看就太乱了,或许我应该直接使用备注字段

@88250
Copy link
Member

88250 commented May 29, 2024

我觉得怕是先稍微调查一下用户需求比较好 😂

@2234839
Copy link
Member

2234839 commented May 29, 2024

嗯,我去社区发个帖问问

@2234839
Copy link
Member

2234839 commented May 29, 2024

@88250 刚发现一个问题,图片没有id和属性....
所以如果想要通过属性来使用户搜索到该图片似乎不现实

@88250
Copy link
Member

88250 commented May 29, 2024 via email

@2234839
Copy link
Member

2234839 commented May 30, 2024

@88250 可以提供返回ocr识别带文字坐标的api嘛,下面是我使用在线api实现的效果,我想用户也可以选择使用tesseract 来获得这样的体验
图片

@88250
Copy link
Member

88250 commented May 30, 2024

@2234839 请单独提 issue 记录

@ruin1990
Copy link
Contributor

ruin1990 commented Feb 24, 2025

话说这个支持百度腾讯那些ocr接口吗?实现难度?

是不是理论上只要兼容tesseractocr的接口输出和参数输入,做个中间件来中转的插件或者外部程序,就能替换成各种服务了,如果不懂siyuan的主工程

不过没太理解tsv输出的各列含义

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests