AI prompts
base on 截屏 离线OCR 搜索翻译 以图搜图 贴图 录屏 万向滚动截屏 屏幕翻译 Screenshot Offline OCR Search Translate Search for picture Paste the picture on the screen Screen recorder Omnidirectional scrolling screenshot Screen translator # eSearch
(中文 | [English](README_en.md))
![LOGO](https://esearch-app.netlify.app/readme/title_photo.svg)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fxushengfeng%2FeSearch.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fxushengfeng%2FeSearch?ref=badge_shield)
[![license](https://img.shields.io/github/license/xushengfeng/eSearch)](LICENSE)
![platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey)
![commit-activity](https://img.shields.io/github/commit-activity/m/xushengfeng/eSearch)
[![release-date](https://img.shields.io/github/release-date/xushengfeng/eSearch)](https://github.com/xushengfeng/eSearch/releases/latest)
[![release](https://img.shields.io/github/v/release/xushengfeng/eSearch)](https://github.com/xushengfeng/eSearch/releases/latest)
[![](https://img.shields.io/github/downloads/xushengfeng/eSearch/total?color=brightgreen&label=总下载量)](https://github.com/xushengfeng/eSearch/releases/latest)
[![aur](https://img.shields.io/badge/aur-e--search-blue?logo=archlinux)](https://aur.archlinux.org/packages/e-search)
[![aur1](https://img.shields.io/badge/aur-e--search--git-blue?logo=archlinux)](https://aur.archlinux.org/packages/e-search-git)
## 简介
eSearch 是[Information-portal](https://github.com/xushengfeng/Information-portal.git)的:electron:重写版(顺便加了亿些功能)
主要是想在 Linux 上(win 和 mac 上也能用)实现[锤子大爆炸](https://www.smartisan.com/pr/videos/bigbang-introduction)或[小米传送门](https://www.miui.com/zt/miui9/index.html)这样的**屏幕搜索**功能,当然也是一款方便的**截屏软件**。
经过数次版本迭代,eSearch 的功能愈加丰富
即拥有 **截屏+OCR+搜索+翻译+贴图+屏幕翻译+以图搜图+滚动截屏+录屏**
![截屏界面](https://esearch-app.netlify.app/readme/1.webp)
> 字体是[FiraCode](https://github.com/tonsky/FiraCode),字体可在设置里设置
![识别文字主页面](https://esearch-app.netlify.app/readme/8.webp)
## 下载安装
到网站[eSearch](https://esearch-app.netlify.app/#download)下载
或在右侧 [releases](https://github.com/xushengfeng/eSearch/releases) 打开标签,选择符合你系统的包并下载安装
国内可以用[GitHub Proxy](https://mirror.ghproxy.com)加速下载
ArchLinux 可在 AUR 查找安装 `e-search`或`e-search-git`
winget `winget install esearch`
## 启动
在你的启动器打开 eSearch,他将出现在托盘。
默认快捷键为 <kbd>Alt</kbd>+<kbd>C</kbd>(你也可以在设置里设置快捷键)
## 功能
更多介绍见[文档](./docs/use/start.md)
### 截屏
框选裁切、取色器、自由画笔、几何、马赛克、模糊
框选除了通过方向键调节,还支持输入四则运算式调整
支持自定义框选后立马执行操作,如框选后自动 OCR
还支持滚动截屏,横向、竖向、任意方向都可以拼接
### 截屏美化
可为截屏设置背景(渐变、图片)、圆角、阴影
改变图像分辨率导出
抹除物体并修补图像
### 录屏
录制屏幕、自定义大小、摄像头
可提示光标位置和键盘击键
可设置虚拟背景
### 屏幕贴图
滚轮缩放、透明度、自动归位、鼠标穿透
支持放大图像且不改变窗口大小,防止遮挡其他内容
可通过 CSS 设置滤镜、变换(如镜像)
### OCR(文字识别)
开箱即用的离线 OCR([eSearch-OCR](https://github.com/xushengfeng/eSearch-OCR)),框选文字后按下回车键即可
离线 OCR 支持段落识别,也可以使用基于标点符号的分段算法
同时也支持百度、有道的在线 OCR
可后期编辑文字,在图片上选择文字,同步选区到编辑区,方便校对
支持多语言(需要在设置额外下载)
### 以图搜图
谷歌、百度、Yandex 的以图搜图引擎
可自定义多模态大模型接口,与 AI 交流图片
### 翻译
OCR 后可调用翻译,支持选词翻译
支持免费的翻译引擎,如谷歌翻译等,也可以自己设置其他翻译引擎的 API,如 DeepL、百度等,可以使用 ChatGPT 等 AI 翻译,甚至可以自定义本地 AI 翻译
可多个引擎同时翻译,择其善者
可以保存翻译结果到本地文件或通过网络保存到 Anki 等记忆软件
### 屏幕翻译
生成一个贴图窗口,并把图片文字替换成翻译后的文本
可设置定时翻译,适合视频、游戏等
### 其他
二维码识别
## 展示
https://user-images.githubusercontent.com/28475549/155870834-34ffa59f-9eac-4eea-9d82-135681d7dfa9.mp4
> 截屏,自由调整框选大小(视频约 2.6MB)
https://user-images.githubusercontent.com/28475549/155870857-99c7d6d0-a90b-4558-872a-85f2603225d6.mp4
> 取色器(视频约 1MB)
https://user-images.githubusercontent.com/28475549/155870867-fb0d31f0-2e06-431c-9ae9-ee3af5a5c08e.mp4
> Ding 在屏幕上,透明度调节、归位以及鼠标操作(视频约 1.8MB)
![3](https://esearch-app.netlify.app/readme/3.webp)
> 绘图界面
https://user-images.githubusercontent.com/28475549/155870881-9b2fc1b3-77de-4a99-8076-ed49b7b5c4c0.mp4
> 主页面搜索和其他应用编辑(视频约 1.6MB)
![3](https://esearch-app.netlify.app/readme/4.webp)
> 主页面查找替换(支持正则)
## 国际化
大多数按钮使用图标,简少了不必要的翻译
[+添加新语言](./lib/translate/readme.md)
- [x] 简体中文
- [x] 繁体中文
- [x] 世界语(Esperanto)
- [x] 西班牙语(Español)
- [x] 阿拉伯语(عربي)
- [x] 英语(English)
- [x] 法语(Français)
- [x] 俄语(Русский)
## 源码运行&编译
```shell
git clone https://github.com/xushengfeng/eSearch.git
cd eSearch
npm install
# 编译
npm run dist
# 将在build目录产生安装包和解压的目录
```
```shell
# 运行
npm run start
# 调试
npm run dev
```
[具体技术说明](docs/develop/readme.md)
## 测试
在 ArchLinux,KDE plasma,Xorg 下测试通过
Windows10 和 Windows11 测试通过
macOS Catalina 测试通过
## Q&A
### 不再支持 Win7、Win8
Electron 官方不再支持 Win7、Win8,所以 eSearch 也不再支持。
但可以自己编译,见[文档](./docs/use/qa.md#兼容性),部分功能可能无法使用。
### 下载依赖库
大部分 Windows 在安装后会提示下载依赖库,这是因为截屏库需要,点击下载,将自动打开微软官网下载,安装完成后可能需要重启。
### Gnome 点击后无响应
Gnome 用户需要安装[appindicator](https://extensions.gnome.org/extension/615/appindicator-support/)插件来使用托盘。
### mac 提示文件已损坏
mac 对互联网下载的 dmg 做了部分限制。
可以在互联网上搜索“mac”、“文件损坏”等关键词。不同版本的系统适用的方法也不同。
### 为什么选择 electron
- 跨平台需要,本来我是想在 Linux 上也能体验 Windows 下优秀的截屏工具,Linux 独占也不好,所以选择跨平台。
- qt 依赖 c++,学习成本太高。flutter 桌面版还不太成熟。我更擅长 js 开发。
- 截屏依赖本地系统,这是目前浏览器做不到的。
- 最后只有 js 类跨平台方案,我选择了较为成熟,使用最多的 electron。
在其他平台没有类似 Arch Linux 单独打包作为库的情况下,软件占用的存储空间是比较多的,但几十行 js 脚本的增加不多,带来的功能却显著地感知到,所以我会尽力发挥其潜力,做到更精美的 UI、更丰富的功能。
### 为什么安装包这么大
除了 Electron 的占用,还有 onnx 运行库(用于运行 AI 模型)、离线文字识别模型、录屏人像识别模型、高级编辑的物体移除模型、FFmpeg(用于录屏格式转换,Linux 有库所以不附带)等。
### 更新版本后出现了以前没有的错误
一般是因为不同版本的配置不兼容,可以尝试在 设置-高级-高级设置 里 恢复默认设置。
若未能解决问题,请提交 issue
## 贡献
请查看[贡献指南](CONTRIBUTING.md)
## 开发原因
我在用 Windows 时一直用这个好用的截屏软件:[Snipaste - 截图 + 贴图](https://zh.snipaste.com/),但我切换到 Linux,Snipaste 不支持(2019 年,现在已支持),所以我选择了[Flameshot](https://flameshot.org/),很可惜它没有直观的取色器。
促使我开发 eSearch 的另一个契机是我很享受在手机上使用[锤子大爆炸](https://www.smartisan.com/pr/videos/bigbang-introduction)或[小米传送门](https://www.miui.com/zt/miui9/index.html)这样的即时信息搜索工具,但我没有找到电脑上类似的代替品。
所以我干脆自己开发一个“截屏+OCR+搜索+贴图”的软件。最开始用 python+pyqt 开发出[Information-portal](https://github.com/xushengfeng/Information-portal.git),但因为我不熟悉 pyqt,所以我转战:electron:,开发出本软件。😄
## 赞赏与支持
精神支持:点亮右上角 star 星标 🌟
物质支持:[个人主页赞赏](https://github.com/xushengfeng)
行动:反馈 bug、提供新功能点子、[参与开发](CONTRIBUTING.md)
## License
[GPL-3.0](LICENSE) © xushengfeng
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fxushengfeng%2FeSearch.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fxushengfeng%2FeSearch?ref=badge_large)", Assign "at most 3 tags" to the expected json: {"id":"11565","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"