从今天开始,Emacs里面可以运行任何你想要的程序 (Linux & Windows & Mac & BSD)

更新系统到 Fedora Linux 37, eaf 的PDF功能无法使用

terminal also

看Github的README, 有中文的介绍告诉你出错以后怎么调试, 学东西一定要注意看文档!!!

1 个赞

完全理解,非常感谢开发出eaf这么有用的东东!!

好的,多谢测试!

EAF browser能安装Chrome 插件吗?比如油猴插件,然后通过运行油猴脚本,这样EAF browser就更像我平时用的 Chrome了。

EAF browser 就是裸 JavaScript 代码直接执行。

不能直接用 Chrome 插件, 但是你可以看看油猴插件能否直接变成单 JavaScript 文件去执行?

有没有可以参考的 EAF 实现参考?

最近在读一些 PDF, 但是一些 PDF 其实是扫描版, mupdf 并不能提取扫描版图片里面的文字。

写了一个补丁, 利用 EasyOCR自动截图并用提取PDF扫描版的文字内容, 并把识别的内容插入Emacs的粘贴板中。

EAF 里面对应的命令是 eaf-ocr-buffer, EAF PDF Viewer 里面按 z 键可以了。

EasyOCR 类似 PaddleOCR, 是基于深度学习技术构建的, 识别率还可以, 99%以上的准确率, EasyOCR的识别率应该要比 PaddleOCR 差一点, 优点是安装比较方便。

因为 EasyOCR 比较大(需要下载2GB的内容), 需要你手动安装 pip3 install easyocr , EAF运行时探测到 EasyOCR已经安装好才会运行 OCR 的功能, 否则只会在 minibuffer 提示你安装 EasyOCR.

我的电脑没有N卡, 用不了CUDA, CPU识别一页PDF需要5秒左右的时间, 如果能够用上CUDA, 识别一页PDF的时间应该在1秒以内。 因为 EasyOCR 是被封印在Python子线程中, 所以它识别的过程该干嘛干嘛, 不会卡住Emacs的。

欢迎大家试用哈, 以后读扫描版的PDF就比较方便了, 做笔记不需要手敲了。

4 个赞

EasyOCR 真大啊,轻量级的 OCR 可以用 tesseract。

Google这个识别率不行, tesseract我很多年前用过, 准确率在70%左右, 而且还特别挑识别图片的字体。

看来干重活儿还得是这些机器学习深度学习的模型更好。

虽然我电脑上装着 tesseract 也很少用,倒是有几个 app 调用的 macOS 系统 OCR 还挺好用。

现在 OCR、语音识别、离线翻译的包都动辄 GB 级别,要是有能让个人用户用上的多模态的模型就好了。

大归大, 真的好用啊。

我看了很多扫描版的图书, 没有这些深度学习的OCR, 想要啥就要一个字一个字的手抄下来, 现在OCR一下, 从头到尾校对一遍就好了。

效率提升了10倍都不止。

1 个赞

MindMap应用无法保存,报错如下:

Traceback (most recent call last):
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/core/utils.py", line 51, in on_signal_received
    self._func(obj, *args, **kwargs)
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/eaf.py", line 314, in kill_buffer
TypeError: unhashable type: 'list'
Uncaught ReferenceError: relayout is not defined
SyntaxError: Unexpected end of JSON input
can not parse to json

MindMap 应用我要重写了, 暂时不想维护旧的了。

我也试试,Apple 太封闭了,系统自带了 OCR、语音识别、离线翻译,却都要花钱买第三方 App 才能调用服务,实现的功能也乏善可陈,离线翻译甚至连个第三方 App 都没有。

期待重写的MindMap

在macos中启动markdown previewer失败 错误信息如下:

qt.webenginecontext: 

GL Type: core_profile
Surface Type: OpenGL
Surface Profile: CoreProfile
Surface Version: 4.1
QSG RHI Backend: OpenGL
Using Supported QSG Backend: yes
Using Software Dynamic GL: no
Using Multithreaded OpenGL: yes

Init Parameters:
  *  application-name eaf.py 
  *  browser-subprocess-path /Users/chenxianbin/Library/Python/3.10/lib/python/site-packages/PyQt6/Qt6/lib/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess 
  *  disable-features ConsolidatedMovementXY,InstalledApp,BackgroundFetch,WebOTP,WebPayments,WebUSB,PictureInPicture 
  *  disable-speech-api  
  *  disable-web-security  
  *  enable-features NetworkServiceInProcess,TracingServiceInProcess 
  *  enable-gpu-rasterization  
  *  enable-native-gpu-memory-buffers  
  *  enable-threaded-compositing  
  *  ignore-gpu-blocklist  
  *  in-process-gpu  
  *  use-gl core_profile 

Traceback (most recent call last):
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/core/utils.py", line 51, in on_signal_received
    self._func(obj, *args, **kwargs)
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/eaf.py", line 155, in new_buffer
    self.create_buffer(buffer_id, url, module_path, arguments)
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/eaf.py", line 173, in create_buffer
    app_buffer = module.AppBuffer(buffer_id, url, arguments)
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/app/markdown-previewer/buffer.py", line 57, in __init__
    self.run_render_server()
  File "/Users/chenxianbin/.doom.d/site-lisp/eaf/app/markdown-previewer/buffer.py", line 66, in run_render_server
    subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
  File "/usr/local/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 971, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/local/Cellar/[email protected]/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py", line 1847, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'node'

其中node已经在PATH环境变量中,经检查Python进程中无法获取PATH环境变量 在eaf.py中,手动添加PATH环境变量就是正常的。