Skip to content

Bob for Electorn是一款仿Bob、PopClip的划词、OCR、翻译、取色工具

License

Notifications You must be signed in to change notification settings

danger-dream/dta

Folders and files

NameName
Last commit message
Last commit date

Latest commit

76687d3 · Nov 13, 2023

History

24 Commits
Mar 31, 2023
Feb 3, 2023
Mar 31, 2023
Feb 3, 2023
Mar 31, 2023
Feb 4, 2023
Feb 14, 2023
Nov 13, 2023
Mar 31, 2023
Feb 14, 2023
Feb 27, 2023
Feb 3, 2023
Feb 28, 2023
Feb 27, 2023
Feb 3, 2023
Feb 3, 2023
Feb 3, 2023
Feb 3, 2023
Mar 31, 2023
Feb 28, 2023

Repository files navigation

Desktop Tools Assistant

Desktop Tools Assistant是一款仿BobPopClip.的屏幕取词、OCR、翻译、取色工具,使用Electron、Vite、Vue3开发。

图片识别、翻译功能可仅使用自建服务(paddocr + meta-ai fairseq nllb)

集成ahk2,自定义按键后可拥有与macos同样的按键体验

截图

主界面 翻译.png 查词

已接入的OCR

  • PaddleOCR 识别率还行,部署在自己的服务器比较放心。后面考虑集成本地版
    docker run --name ppdocr -p 8866:8866 -d drainkeng/paddleocr:2.6-cpu-latest
  • 百度文字识别OCR 备选方案

已接入语种识别

已接入文本翻译(已删除效果较差的接口)

配置文件

  • 自己申请接口后修改这部分,涉及到各种密钥,我就不提交这个文件了

  • 路径在electron/config.ts

  • 不加没法运行!!!!

import { IConfig } from '@/types'

export default {
	init: true,
	//  截图类型,shareX、html
	screenhost_type: 'shareX',
	//  滑词检索配置
	takeword: {
		//  启用
		enable: true,
		//  自动隐藏时间,单位:秒
		auto_hide_time: 1,
		//  跳过要处理的进程,进程名称、路径
		skip: ['MobaXterm_Personal_22.1.exe', 'D:\\JetBrains\\apps', 'C:\\Program Files\\PowerShell', 'WindowsTerminal.exe', 'explorer.exe']
	},
	//  翻译配置
	trans: {
		//  钉住窗口
		pinup: false,
		//  默认启动位置,未使用
		position: 'right-top',
		//  语言检测方式
		lang_testing: 'local',
		//  ocr识别方式
		current_ocr: 'paddocr',
		//  识图后复制到剪切板
		ocr_clipboard: true,
		//  单个翻译接口超时时间
		timeout: 15,
		//  本地ip前缀
		local_ip: '172.20.0.',
		//  ocr配置
		ocr: [
			{
				enable: true,
				name: 'baidu',
				label: '百度通用场景文本识别',
				token_url: 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials',
				url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/',
				client_id: '',
				client_secret: '',
				detect_direction: true,
				type: '标准' as '高精度' | '高精度含坐标' | '标准' | '标准含坐标',
				type_action: { 标准: 'general_basic', 标准含坐标: 'general', 高精度: 'accurate_basic', 高精度含坐标: 'accurate' }
			},
			{ enable: true, name: 'paddocr', label: '飞桨OCR', url: '你的地址' }
		],
		translate: [
			{ enable: true, name: 'youdao', label: '有道翻译', url: 'http://openapi.youdao.com/api', appKey: '', key: '' },
			{ enable: true, name: 'baidu', label: '百度翻译', url: 'https://fanyi-api.baidu.com/api/trans/vip/translate', appid: '', secret: '' },
			{ enable: true, name: 'google', label: '谷歌翻译', zh2en_enable: false, url: 'https://你的workers地址.workers.dev/trans', apiKey: '' },
			{ enable: true, name: 'tencent', label: '腾讯翻译', url: 'tmt.tencentcloudapi.com', region: 'ap-chengdu', secretId: '', secretKey: '' },
			{ enable: true, name: 'wechat', label: '微信翻译', url: 'https://api.weixin.qq.com/cgi-bin', appid: '', secret: '' },
			{ enable: true, name: 'caiyun', label: '彩云小译', url: 'http://api.interpreter.caiyunai.com/v1/translator', token: '' }
		],
		languages: [
			{ name: '中文', default: 'zh', wechat: 'zh_CN', youdao: 'zh-CHS', google: 'zh_CN' },
			{ name: '英语', default: 'en', wechat: 'en_US' },
			{ name: '日语', default: 'ja', wechat: '-' },
			{ name: '韩语', default: 'ko', baidu: 'kor', caiyun: '-', wechat: '-' },
			{ name: '俄语', default: 'ru', caiyun: '-', wechat: '-' },
			{ name: '德语', default: 'de', caiyun: '-', wechat: '-' },
			{ name: '法语', default: 'fr', baidu: 'fra', caiyun: '-', wechat: '-' }
		]
	}
} as IConfig

......

  • 飞桨OCR部署完成后的地址是host:port/predict/ocr_system.我自己代理了一层到cdn,要用的话记得改成你自己的url
  • google api调用建议使用CloudFlare的Workers,稳定免费,脚本如下:
unction
main(request)
{
	const { lang, text, key } = await request.json()
	const req = { "target": lang, "q": text }
	const response = await fetch(
		'https://translation.googleapis.com/language/translate/v2?key=' + key,
		{ body: JSON.stringify(req), method: 'POST', headers: { 'content-type': 'application/json;charset=UTF-8' } }
	)
	const { headers, status } = response
	if (status == "200" && headers.get('content-type').includes('application/json')) {
		const res = await response.json()
		if (res.data) {
			let translations = res.data.translations
			return (Array.isArray(translations) ? translations[0] : translations).translatedText
			// detectedSourceLanguage
		}
	}
	throw new Error("Failed response from Google Translate")
}

export default {
	async fetch(request, env) {
		if (request.method !== 'POST' || !request.url.endsWith('/trans')) {
			return new Response('', { status: 404, headers: { "Cache-Control": "no-cache" } })
		}
		let status = true
		let text = ''
		try {
			text = await main(request)
		} catch (e) {
			status = false
			text = e.message
		}
		return new Response(text, { status: status ? 200 : 400, headers: { "Cache-Control": "no-cache" } })
	}
}
  • 只支持了部分语言,有需要的自己加,文末有各平台语言编码对照链接
  • 只使用了常用的包,理论都能自己打包出来
  • 集成了AutoHotKey 2.0,做改键会更像mac,打包成dll了,放在pack/ahkh2x64.dll,改键脚本是pack/Mac.ahk

各平台语言编码

有道

彩云

google

腾讯

百度

end